:sparkles: support yolo26
Browse files- README.md +211 -4
- examples/yolo26_det.jpg +3 -0
- examples/yolo26_obb.jpg +3 -0
- examples/yolo26_pose.jpg +3 -0
- examples/yolo26_seg_mask_0.png +3 -0
- examples/yolo26_test.go +130 -0
- yolo26_weights/yolo26l-cls.onnx +3 -0
- yolo26_weights/yolo26l-obb.onnx +3 -0
- yolo26_weights/yolo26l-pose.onnx +3 -0
- yolo26_weights/yolo26l-seg.onnx +3 -0
- yolo26_weights/yolo26l.onnx +3 -0
- yolo26_weights/yolo26m-cls.onnx +3 -0
- yolo26_weights/yolo26m-obb.onnx +3 -0
- yolo26_weights/yolo26m-pose.onnx +3 -0
- yolo26_weights/yolo26m-seg.onnx +3 -0
- yolo26_weights/yolo26m.onnx +3 -0
- yolo26_weights/yolo26n-cls.onnx +3 -0
- yolo26_weights/yolo26n-obb.onnx +3 -0
- yolo26_weights/yolo26n-pose.onnx +3 -0
- yolo26_weights/yolo26n-seg.onnx +3 -0
- yolo26_weights/yolo26n.onnx +3 -0
- yolo26_weights/yolo26s-cls.onnx +3 -0
- yolo26_weights/yolo26s-obb.onnx +3 -0
- yolo26_weights/yolo26s-pose.onnx +3 -0
- yolo26_weights/yolo26s-seg.onnx +3 -0
- yolo26_weights/yolo26s.onnx +3 -0
- yolo26_weights/yolo26x-cls.onnx +3 -0
- yolo26_weights/yolo26x-obb.onnx +3 -0
- yolo26_weights/yolo26x-pose.onnx +3 -0
- yolo26_weights/yolo26x-seg.onnx +3 -0
- yolo26_weights/yolo26x.onnx +3 -0
README.md
CHANGED
|
@@ -19,12 +19,10 @@ tags:
|
|
| 19 |
<a href="https://github.com/getcharzp/go-vision/pulls" target="blank">
|
| 20 |
<img src="https://img.shields.io/github/issues-pr/getcharzp/go-vision?style=for-the-badge" alt="go-vision pull-requests"/>
|
| 21 |
</a>
|
| 22 |
-
<a href='https://github.com/getcharzp/go-vision/releases'>
|
| 23 |
-
<img src='https://img.shields.io/github/release/getcharzp/go-vision?&label=Latest&style=for-the-badge'>
|
| 24 |
-
</a>
|
| 25 |
</p>
|
| 26 |
|
| 27 |
-
go-vision 基于 Golang + [ONNX](https://github.com/microsoft/onnxruntime/releases/tag/v1.23.2)
|
|
|
|
| 28 |
|
| 29 |
## 安装
|
| 30 |
|
|
@@ -274,3 +272,212 @@ func main() {
|
|
| 274 |
| 原图 | OBB图 |
|
| 275 |
|-----------------------------------------------------|------------------------------------------------------------|
|
| 276 |
| <img width="100%" src="./examples/ship.jpg" alt=""> | <img width="100%" src="./examples/yolov11_obb.jpg" alt=""> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
<a href="https://github.com/getcharzp/go-vision/pulls" target="blank">
|
| 20 |
<img src="https://img.shields.io/github/issues-pr/getcharzp/go-vision?style=for-the-badge" alt="go-vision pull-requests"/>
|
| 21 |
</a>
|
|
|
|
|
|
|
|
|
|
| 22 |
</p>
|
| 23 |
|
| 24 |
+
go-vision 基于 Golang + [ONNX](https://github.com/microsoft/onnxruntime/releases/tag/v1.23.2) 构建的视觉库,支持 SAM2、YOLOv11-Det、YOLOv11-Seg、YOLOv11-Cls、YOLOv11-Pose、YOLOv11-OBB、YOLO26-Det、
|
| 25 |
+
YOLO26-Seg、YOLO26-Cls、YOLO26-Pose、YOLO26-OBB 等模型。
|
| 26 |
|
| 27 |
## 安装
|
| 28 |
|
|
|
|
| 272 |
| 原图 | OBB图 |
|
| 273 |
|-----------------------------------------------------|------------------------------------------------------------|
|
| 274 |
| <img width="100%" src="./examples/ship.jpg" alt=""> | <img width="100%" src="./examples/yolov11_obb.jpg" alt=""> |
|
| 275 |
+
|
| 276 |
+
|
| 277 |
+
### yolo26-det
|
| 278 |
+
|
| 279 |
+
```go
|
| 280 |
+
package main
|
| 281 |
+
|
| 282 |
+
import (
|
| 283 |
+
"fmt"
|
| 284 |
+
"github.com/getcharzp/go-vision/yolo26"
|
| 285 |
+
"github.com/up-zero/gotool/imageutil"
|
| 286 |
+
"image"
|
| 287 |
+
"image/color"
|
| 288 |
+
"image/draw"
|
| 289 |
+
"log"
|
| 290 |
+
)
|
| 291 |
+
|
| 292 |
+
func main() {
|
| 293 |
+
engine, err := yolo26.NewDetEngine(yolo26.DefaultDetConfig())
|
| 294 |
+
if err != nil {
|
| 295 |
+
log.Fatalf("初始化引擎失败: %v", err)
|
| 296 |
+
}
|
| 297 |
+
defer engine.Destroy()
|
| 298 |
+
|
| 299 |
+
img, _ := imageutil.Open("./test.png")
|
| 300 |
+
results, err := engine.Predict(img)
|
| 301 |
+
if err != nil {
|
| 302 |
+
log.Fatalf("预测失败: %v", err)
|
| 303 |
+
}
|
| 304 |
+
|
| 305 |
+
targetImg := image.NewRGBA(img.Bounds())
|
| 306 |
+
draw.Draw(targetImg, img.Bounds(), img, img.Bounds().Min, draw.Src)
|
| 307 |
+
fmt.Printf("检测到目标: %d 个\n", len(results))
|
| 308 |
+
for _, res := range results {
|
| 309 |
+
fmt.Printf("Class: %d, Score: %.2f, Box: %v\n", res.ClassID, res.Score, res.Box)
|
| 310 |
+
imageutil.DrawThickRectOutline(targetImg, res.Box, color.RGBA{R: 255, G: 0, B: 0, A: 255}, 3)
|
| 311 |
+
}
|
| 312 |
+
imageutil.Save("yolo26_det.jpg", targetImg, 50)
|
| 313 |
+
}
|
| 314 |
+
```
|
| 315 |
+
|
| 316 |
+
| 原图 | 检测结果 |
|
| 317 |
+
|-----------------------------------------------------|-----------------------------------------------------------|
|
| 318 |
+
| <img width="100%" src="./examples/test.png" alt=""> | <img width="100%" src="./examples/yolo26_det.jpg" alt=""> |
|
| 319 |
+
|
| 320 |
+
### yolo26-seg
|
| 321 |
+
|
| 322 |
+
```go
|
| 323 |
+
package main
|
| 324 |
+
|
| 325 |
+
import (
|
| 326 |
+
"fmt"
|
| 327 |
+
"github.com/getcharzp/go-vision/yolo26"
|
| 328 |
+
"github.com/up-zero/gotool/imageutil"
|
| 329 |
+
"log"
|
| 330 |
+
)
|
| 331 |
+
|
| 332 |
+
func main() {
|
| 333 |
+
cfg := yolo26.DefaultSegConfig()
|
| 334 |
+
cfg.ModelPath = "../yolo26_weights/yolo26s-seg.onnx"
|
| 335 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 336 |
+
|
| 337 |
+
engine, err := yolo26.NewSegEngine(cfg)
|
| 338 |
+
if err != nil {
|
| 339 |
+
log.Fatalf("初始化引擎失败: %v", err)
|
| 340 |
+
}
|
| 341 |
+
defer engine.Destroy()
|
| 342 |
+
|
| 343 |
+
img, _ := imageutil.Open("./test.png")
|
| 344 |
+
results, err := engine.Predict(img)
|
| 345 |
+
if err != nil {
|
| 346 |
+
log.Fatalf("预测失败: %v", err)
|
| 347 |
+
}
|
| 348 |
+
|
| 349 |
+
fmt.Printf("检测到目标: %d 个\n", len(results))
|
| 350 |
+
for idx, res := range results {
|
| 351 |
+
fmt.Printf("Class: %d, Score: %.2f, Box: %v\n", res.ClassID, res.Score, res.Box)
|
| 352 |
+
imageutil.Save(fmt.Sprintf("yolo26_seg_mask_%d.png", idx), res.Mask, 100)
|
| 353 |
+
}
|
| 354 |
+
}
|
| 355 |
+
```
|
| 356 |
+
|
| 357 |
+
| 原图 | Mask图 |
|
| 358 |
+
|-----------------------------------------------------|------------------------------------------------------------------|
|
| 359 |
+
| <img width="100%" src="./examples/test.png" alt=""> | <img width="100%" src="./examples/yolo26_seg_mask_0.png" alt=""> |
|
| 360 |
+
|
| 361 |
+
|
| 362 |
+
### yolo26-cls
|
| 363 |
+
|
| 364 |
+
```go
|
| 365 |
+
package main
|
| 366 |
+
|
| 367 |
+
import (
|
| 368 |
+
"fmt"
|
| 369 |
+
"github.com/getcharzp/go-vision/yolo26"
|
| 370 |
+
"github.com/up-zero/gotool/imageutil"
|
| 371 |
+
"log"
|
| 372 |
+
)
|
| 373 |
+
|
| 374 |
+
func main() {
|
| 375 |
+
cfg := yolo26.DefaultClsConfig()
|
| 376 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m-cls.onnx"
|
| 377 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 378 |
+
|
| 379 |
+
engine, err := yolo26.NewClsEngine(cfg)
|
| 380 |
+
if err != nil {
|
| 381 |
+
log.Fatalf("初始化引擎失败: %v", err)
|
| 382 |
+
}
|
| 383 |
+
defer engine.Destroy()
|
| 384 |
+
|
| 385 |
+
img, _ := imageutil.Open("./test.png")
|
| 386 |
+
results, err := engine.Predict(img, 5)
|
| 387 |
+
if err != nil {
|
| 388 |
+
log.Fatalf("预测失败: %v", err)
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
for _, res := range results {
|
| 392 |
+
fmt.Printf("Class: %d, Score: %.5f\n", res.ClassID, res.Score)
|
| 393 |
+
}
|
| 394 |
+
}
|
| 395 |
+
|
| 396 |
+
// 输出:
|
| 397 |
+
// Class: 656, Score: 0.99169
|
| 398 |
+
// Class: 436, Score: 0.00258
|
| 399 |
+
// Class: 511, Score: 0.00242
|
| 400 |
+
// Class: 654, Score: 0.00054
|
| 401 |
+
// Class: 675, Score: 0.00053
|
| 402 |
+
```
|
| 403 |
+
|
| 404 |
+
### yolo26-pose
|
| 405 |
+
|
| 406 |
+
```go
|
| 407 |
+
package main
|
| 408 |
+
|
| 409 |
+
import (
|
| 410 |
+
"github.com/getcharzp/go-vision/yolo26"
|
| 411 |
+
"github.com/up-zero/gotool/imageutil"
|
| 412 |
+
"log"
|
| 413 |
+
)
|
| 414 |
+
|
| 415 |
+
func main() {
|
| 416 |
+
cfg := yolo26.DefaultPoseConfig()
|
| 417 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m-pose.onnx"
|
| 418 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 419 |
+
|
| 420 |
+
engine, err := yolo26.NewPoseEngine(cfg)
|
| 421 |
+
if err != nil {
|
| 422 |
+
log.Fatalf("初始化引擎失败: %v", err)
|
| 423 |
+
}
|
| 424 |
+
defer engine.Destroy()
|
| 425 |
+
|
| 426 |
+
img, _ := imageutil.Open("./person.jpg")
|
| 427 |
+
results, err := engine.Predict(img)
|
| 428 |
+
if err != nil {
|
| 429 |
+
log.Fatalf("预测失败: %v", err)
|
| 430 |
+
}
|
| 431 |
+
|
| 432 |
+
dst := yolo26.DrawPoseResult(img, results)
|
| 433 |
+
imageutil.Save("yolo26_pose.jpg", dst, 50)
|
| 434 |
+
}
|
| 435 |
+
```
|
| 436 |
+
|
| 437 |
+
| 原图 | 姿态图 |
|
| 438 |
+
|-------------------------------------------------------|------------------------------------------------------------|
|
| 439 |
+
| <img width="100%" src="./examples/person.jpg" alt=""> | <img width="100%" src="./examples/yolo26_pose.jpg" alt=""> |
|
| 440 |
+
|
| 441 |
+
### yolo26-obb
|
| 442 |
+
|
| 443 |
+
```go
|
| 444 |
+
package main
|
| 445 |
+
|
| 446 |
+
import (
|
| 447 |
+
"github.com/getcharzp/go-vision/yolo26"
|
| 448 |
+
"github.com/up-zero/gotool/imageutil"
|
| 449 |
+
"image"
|
| 450 |
+
"image/color"
|
| 451 |
+
"image/draw"
|
| 452 |
+
"log"
|
| 453 |
+
)
|
| 454 |
+
|
| 455 |
+
func main() {
|
| 456 |
+
cfg := yolo26.DefaultOBBConfig()
|
| 457 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m-obb.onnx"
|
| 458 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 459 |
+
|
| 460 |
+
engine, err := yolo26.NewOBBEngine(cfg)
|
| 461 |
+
if err != nil {
|
| 462 |
+
log.Fatalf("初始化引擎失败: %v", err)
|
| 463 |
+
}
|
| 464 |
+
defer engine.Destroy()
|
| 465 |
+
|
| 466 |
+
img, _ := imageutil.Open("./ship.jpg")
|
| 467 |
+
results, err := engine.Predict(img)
|
| 468 |
+
if err != nil {
|
| 469 |
+
log.Fatalf("预测失败: %v", err)
|
| 470 |
+
}
|
| 471 |
+
|
| 472 |
+
dst := image.NewRGBA(img.Bounds())
|
| 473 |
+
draw.Draw(dst, img.Bounds(), img, img.Bounds().Min, draw.Src)
|
| 474 |
+
for _, result := range results {
|
| 475 |
+
imageutil.DrawThickPolygonOutline(dst, result.Corners[:], 3, color.RGBA{R: 255, G: 0, B: 0, A: 255})
|
| 476 |
+
}
|
| 477 |
+
imageutil.Save("yolo26_obb.jpg", dst, 50)
|
| 478 |
+
}
|
| 479 |
+
```
|
| 480 |
+
|
| 481 |
+
| 原图 | OBB图 |
|
| 482 |
+
|-----------------------------------------------------|-----------------------------------------------------------|
|
| 483 |
+
| <img width="100%" src="./examples/ship.jpg" alt=""> | <img width="100%" src="./examples/yolo26_obb.jpg" alt=""> |
|
examples/yolo26_det.jpg
ADDED
|
Git LFS Details
|
examples/yolo26_obb.jpg
ADDED
|
Git LFS Details
|
examples/yolo26_pose.jpg
ADDED
|
Git LFS Details
|
examples/yolo26_seg_mask_0.png
ADDED
|
Git LFS Details
|
examples/yolo26_test.go
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
package examples
|
| 2 |
+
|
| 3 |
+
import (
|
| 4 |
+
"fmt"
|
| 5 |
+
"github.com/getcharzp/go-vision/yolo26"
|
| 6 |
+
"github.com/up-zero/gotool/imageutil"
|
| 7 |
+
"image"
|
| 8 |
+
"image/color"
|
| 9 |
+
"image/draw"
|
| 10 |
+
"testing"
|
| 11 |
+
)
|
| 12 |
+
|
| 13 |
+
func TestYOLO26Det(t *testing.T) {
|
| 14 |
+
cfg := yolo26.DefaultDetConfig()
|
| 15 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m.onnx"
|
| 16 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 17 |
+
|
| 18 |
+
engine, err := yolo26.NewDetEngine(cfg)
|
| 19 |
+
if err != nil {
|
| 20 |
+
t.Fatalf("初始化引擎失败: %v", err)
|
| 21 |
+
}
|
| 22 |
+
defer engine.Destroy()
|
| 23 |
+
|
| 24 |
+
img, _ := imageutil.Open("./test.png")
|
| 25 |
+
results, err := engine.Predict(img)
|
| 26 |
+
if err != nil {
|
| 27 |
+
t.Fatalf("预测失败: %v", err)
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
targetImg := image.NewRGBA(img.Bounds())
|
| 31 |
+
draw.Draw(targetImg, img.Bounds(), img, img.Bounds().Min, draw.Src)
|
| 32 |
+
fmt.Printf("检测到目标: %d 个\n", len(results))
|
| 33 |
+
for _, res := range results {
|
| 34 |
+
fmt.Printf("Class: %d, Score: %.2f, Box: %v\n", res.ClassID, res.Score, res.Box)
|
| 35 |
+
imageutil.DrawThickRectOutline(targetImg, res.Box, color.RGBA{R: 255, G: 0, B: 0, A: 255}, 3)
|
| 36 |
+
}
|
| 37 |
+
imageutil.Save("yolo26_det.jpg", targetImg, 50)
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
func TestYOLO26Seg(t *testing.T) {
|
| 41 |
+
cfg := yolo26.DefaultSegConfig()
|
| 42 |
+
cfg.ModelPath = "../yolo26_weights/yolo26s-seg.onnx"
|
| 43 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 44 |
+
|
| 45 |
+
engine, err := yolo26.NewSegEngine(cfg)
|
| 46 |
+
if err != nil {
|
| 47 |
+
t.Fatalf("初始化引擎失败: %v", err)
|
| 48 |
+
}
|
| 49 |
+
defer engine.Destroy()
|
| 50 |
+
|
| 51 |
+
img, _ := imageutil.Open("./test.png")
|
| 52 |
+
results, err := engine.Predict(img)
|
| 53 |
+
if err != nil {
|
| 54 |
+
t.Fatalf("预测失败: %v", err)
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
fmt.Printf("检测到目标: %d 个\n", len(results))
|
| 58 |
+
for idx, res := range results {
|
| 59 |
+
fmt.Printf("Class: %d, Score: %.2f, Box: %v\n", res.ClassID, res.Score, res.Box)
|
| 60 |
+
imageutil.Save(fmt.Sprintf("yolo26_seg_mask_%d.png", idx), res.Mask, 100)
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
func TestYOLO26Cls(t *testing.T) {
|
| 65 |
+
cfg := yolo26.DefaultClsConfig()
|
| 66 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m-cls.onnx"
|
| 67 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 68 |
+
|
| 69 |
+
engine, err := yolo26.NewClsEngine(cfg)
|
| 70 |
+
if err != nil {
|
| 71 |
+
t.Fatalf("初始化引擎失败: %v", err)
|
| 72 |
+
}
|
| 73 |
+
defer engine.Destroy()
|
| 74 |
+
|
| 75 |
+
img, _ := imageutil.Open("./test.png")
|
| 76 |
+
results, err := engine.Predict(img, 5)
|
| 77 |
+
if err != nil {
|
| 78 |
+
t.Fatalf("预测失败: %v", err)
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
for _, res := range results {
|
| 82 |
+
fmt.Printf("Class: %d, Score: %.5f\n", res.ClassID, res.Score)
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
func TestYOLO26Pose(t *testing.T) {
|
| 87 |
+
cfg := yolo26.DefaultPoseConfig()
|
| 88 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m-pose.onnx"
|
| 89 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 90 |
+
|
| 91 |
+
engine, err := yolo26.NewPoseEngine(cfg)
|
| 92 |
+
if err != nil {
|
| 93 |
+
t.Fatalf("初始化引擎失败: %v", err)
|
| 94 |
+
}
|
| 95 |
+
defer engine.Destroy()
|
| 96 |
+
|
| 97 |
+
img, _ := imageutil.Open("./person.jpg")
|
| 98 |
+
results, err := engine.Predict(img)
|
| 99 |
+
if err != nil {
|
| 100 |
+
t.Fatalf("预测失败: %v", err)
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
dst := yolo26.DrawPoseResult(img, results)
|
| 104 |
+
imageutil.Save("yolo26_pose.jpg", dst, 50)
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
func TestYOLO26OBB(t *testing.T) {
|
| 108 |
+
cfg := yolo26.DefaultOBBConfig()
|
| 109 |
+
cfg.ModelPath = "../yolo26_weights/yolo26m-obb.onnx"
|
| 110 |
+
cfg.OnnxRuntimeLibPath = "../lib/onnxruntime.dll"
|
| 111 |
+
|
| 112 |
+
engine, err := yolo26.NewOBBEngine(cfg)
|
| 113 |
+
if err != nil {
|
| 114 |
+
t.Fatalf("初始化引擎失败: %v", err)
|
| 115 |
+
}
|
| 116 |
+
defer engine.Destroy()
|
| 117 |
+
|
| 118 |
+
img, _ := imageutil.Open("./ship.jpg")
|
| 119 |
+
results, err := engine.Predict(img)
|
| 120 |
+
if err != nil {
|
| 121 |
+
t.Fatalf("预测失败: %v", err)
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
dst := image.NewRGBA(img.Bounds())
|
| 125 |
+
draw.Draw(dst, img.Bounds(), img, img.Bounds().Min, draw.Src)
|
| 126 |
+
for _, result := range results {
|
| 127 |
+
imageutil.DrawThickPolygonOutline(dst, result.Corners[:], 3, color.RGBA{R: 255, G: 0, B: 0, A: 255})
|
| 128 |
+
}
|
| 129 |
+
imageutil.Save("yolo26_obb.jpg", dst, 50)
|
| 130 |
+
}
|
yolo26_weights/yolo26l-cls.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7c1cc0b98541b8404ba796d0402eebeca9e045019d7da08c583e38cf411e5959
|
| 3 |
+
size 56514487
|
yolo26_weights/yolo26l-obb.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4645afc349167aed3174aac9461b57372b88f98c4485cacf60d8fdf9d9748f73
|
| 3 |
+
size 102910657
|
yolo26_weights/yolo26l-pose.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:527b2b78daa9a4d969646538294a3445646f647a85ce5ea1049850726457a2b7
|
| 3 |
+
size 104235123
|
yolo26_weights/yolo26l-seg.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bba71c343eafbee77a8627fc90ef2bc4b0c01cd8b19bfea376c87ecef35cf361
|
| 3 |
+
size 112265898
|
yolo26_weights/yolo26l.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ca103edb0f50944e5a2467014a2d87a338a5d1a74d0b1d64336938921e0eb5b6
|
| 3 |
+
size 99613333
|
yolo26_weights/yolo26m-cls.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ba396b1496d39e06df773f3afc87f162535a0490c48cf29e19268a6e303ce51e
|
| 3 |
+
size 46567517
|
yolo26_weights/yolo26m-obb.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6395b66f8b251552baeb959588b72e01f4520c11f2bd953c929be5a47b92ed46
|
| 3 |
+
size 85260285
|
yolo26_weights/yolo26m-pose.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a96bc1408fdd986522410df331ef258a99c1c68b36bc51646afd1e9031181783
|
| 3 |
+
size 86584943
|
yolo26_weights/yolo26m-seg.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0caf9831c09fae8c0848b09f154c689b0d5ab44563ac7c906141aac576ad0817
|
| 3 |
+
size 94615718
|
yolo26_weights/yolo26m.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5ea17cc5173099a3c4b242cc73202af1f656312ad8220b0e442fae97ec06f306
|
| 3 |
+
size 81963155
|
yolo26_weights/yolo26n-cls.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d635527cf451b4998079ada3d9871798021b71ab1e238fc39a2766216ccdbae0
|
| 3 |
+
size 11293107
|
yolo26_weights/yolo26n-obb.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e0d314ac681df026df63c6922798fd547e98c558d2800355c0fff7a97d327b4e
|
| 3 |
+
size 10207248
|
yolo26_weights/yolo26n-pose.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e9f5cae96d489e18d2e46ec16807cd1e94dab23b1264d53e80af6796153f1dda
|
| 3 |
+
size 12125854
|
yolo26_weights/yolo26n-seg.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e327cc1464524d5bca1974ee56932551604862314bd8ffae92924ae6330f5a61
|
| 3 |
+
size 11218580
|
yolo26_weights/yolo26n.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:53d5c2fe69bd0524ee02c88e513ceffb0a15f8f040cfc41c9a3c6efc230139ea
|
| 3 |
+
size 9941955
|
yolo26_weights/yolo26s-cls.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:21c0fe906046b38b2ead8c0add802954037580b27b2e3f527a3fe5ea49159614
|
| 3 |
+
size 26925649
|
yolo26_weights/yolo26s-obb.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9fc512248f3188b793c0d21f00cd74009f9defcfb3a07854994bba7715d6e9f3
|
| 3 |
+
size 39438174
|
yolo26_weights/yolo26s-pose.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:cdc4b440333d482e525148942e456c136a71c127526b2cc80ef6efdbec3505b3
|
| 3 |
+
size 41859220
|
yolo26_weights/yolo26s-seg.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6e38992c0cc549e1a4ebc8d31e0dbe6da1785eb46c91922aff678ec672ef4da9
|
| 3 |
+
size 41912261
|
yolo26_weights/yolo26s.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:6a496b3fc443212340d7966ba8a8c2384447904095a232c6fe2740dda1f22c34
|
| 3 |
+
size 38291128
|
yolo26_weights/yolo26x-cls.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a31d44ac88dbc78d5efbfa38c2ef135876c3a0276f00e372f5d6ef45682ccf98
|
| 3 |
+
size 118570441
|
yolo26_weights/yolo26x-obb.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:42db72c33ebf04e8ef94ec0bcd576a83895fd69bc117942de634490e76efa0b8
|
| 3 |
+
size 230725483
|
yolo26_weights/yolo26x-pose.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:afe0819b859a0a12b966d6ce5e673ed9fdc7ad30a39f5c16cde2a192606f9d95
|
| 3 |
+
size 230728671
|
yolo26_weights/yolo26x-seg.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a76f5817534d996b4009c714021bceffd179d870918daadf6864168b5eb646ee
|
| 3 |
+
size 251680720
|
yolo26_weights/yolo26x.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7a6707f637b0b605a28cc568ebb579233af209cf5183825ae2b713e18b71f13c
|
| 3 |
+
size 223287477
|