diff --git a/README.md b/README.md index 5c56aa2..bbe006d 100644 --- a/README.md +++ b/README.md @@ -282,3 +282,183 @@ python -m sophon_chakcy.build --verbose ├── my_detector └── faster_rcnn ``` + +## YOLOv8 示例 + +### 配置文件 + +在 `./config.json` 文件中添加对应的配置 + +```json +{ + "file_system": { + "type": "vfs" + }, + "vfs": { + "file_path": "./application.svfs" + }, + "model_map": { + "yolo_example": { + "name": "yolo_example", # 插件名称 + "module": "YOLOv8.yolov8_detector", # Detector 类模块位置 + "config": "resources/yolov8_config.json" # 插件配置路径 + } + } +} +``` + +编写插件配置 `resources/yolov8_config.json` +```json +{ + "bmodel_path": "resources/yolov8s_int8_1b.bmodel", # 模型路径 + "classes": [ # 检测类型 + ... + ], + "colors": [ # 边框颜色 + [56, 0, 255], + ... + ] +} +``` + +将模型放置在配置对应的路径下,YOLOv8 插件代码可参考 `./YOLOv8` (注意需实现配置类和 Detector 类,且 Detector 所在路径需与 config.json 中的配置保持一致) + +### 测试 + +执行 download.sh 脚本下载测试图片 + +```bash +./scripts/download.sh +``` + +执行测试 + +```bash +python main.py --name yolo_example --input ./resources/datasets/test/3.jpg +``` + +结果 + +```text +[BMRT][bmcpu_setup:406] INFO:cpu_lib 'libcpuop.so' is loaded. +bmcpu init: skip cpu_user_defined +open usercpu.so, init user_cpu_init +[BMRT][load_bmodel:1084] INFO:Loading bmodel from [resources/yolov8s_int8_1b.bmodel]. Thanks for your patience... +[BMRT][load_bmodel:1023] INFO:pre net num: 0, load net num: 1 +加载模型: resources/yolov8s_int8_1b.bmodel +模型信息: + 输入形状: [1, 3, 640, 640] + 输入类型: Dtype.BM_FLOAT32 + colors数量: 81 + classes类别数: 81 + +处理图像: ./resources/datasets/test/3.jpg +Open /dev/jpu successfully, device index = 0, jpu fd = 33, vpp fd = 34 +图像大小: 854x480 +原始检测数量: 11 +过滤后数量 (置信度 > 0.25): 11 + +绘制 11 个检测结果: +-------------------------------------------------------------------------------- +检测 1: person | 置信度: 0.9176 | 位置: [ 74, 163, 209, 422] | 大小: 135x 259 | 颜色: [226, 255, 0] +检测 2: person | 置信度: 0.9176 | 位置: [ 728, 142, 849, 472] | 大小: 121x 330 | 颜色: [226, 255, 0] +检测 3: person | 置信度: 0.8510 | 位置: [ 342, 181, 404, 314] | 大小: 62x 133 | 颜色: [226, 255, 0] +检测 4: person | 置信度: 0.8510 | 位置: [ 539, 152, 640, 428] | 大小: 101x 276 | 颜色: [226, 255, 0] +检测 5: skis | 置信度: 0.8196 | 位置: [ 99, 384, 221, 464] | 大小: 122x 80 | 颜色: [132, 0, 255] +检测 6: person | 置信度: 0.8196 | 位置: [ 494, 172, 571, 379] | 大小: 77x 207 | 颜色: [226, 255, 0] +检测 7: skis | 置信度: 0.6078 | 位置: [ 450, 403, 728, 447] | 大小: 278x 44 | 颜色: [132, 0, 255] +检测 8: skis | 置信度: 0.4471 | 位置: [ 439, 370, 588, 403] | 大小: 149x 33 | 颜色: [132, 0, 255] +检测 9: skis | 置信度: 0.3922 | 位置: [ 365, 311, 404, 322] | 大小: 39x 11 | 颜色: [132, 0, 255] +检测 10: car | 置信度: 0.2941 | 位置: [ 1, 215, 33, 248] | 大小: 32x 33 | 颜色: [0, 37, 255] +检测 11: skis | 置信度: 0.2510 | 位置: [ 364, 307, 404, 322] | 大小: 40x 15 | 颜色: [132, 0, 255] +-------------------------------------------------------------------------------- + +检测结果已保存到: ./detection_results/detected_3.jpg +``` + +![detected_3.jpg](./images/detected_3.jpg) + +### 打包 + +```bash +python -m sophon_chakcy.build +``` +``` +清理旧的构建目录: build +开始构建... +配置文件加载成功 +VFS初始化成功: application.svfs +模块打包器初始化成功: plugins.mbank +添加文件失败 config.json: UNIQUE constraint failed: files.path +添加文件: config.json +文件大小: 0.00 MB +数据库文件: application.svfs +导出文件失败 config.json: [Errno 2] No such file or directory: '' +已保存到: config.json +已保存到: application.svfs +配置文件已添加到VFS +打包模块: YOLOv8.yolov8_detector +打包包: YOLOv8 (来自: YOLOv8/__init__.py) +打包模块: YOLOv8.yolov8_detector (来自: YOLOv8/yolov8_detector.py) +打包模块: YOLOv8.postprocess_numpy (来自: YOLOv8/postprocess_numpy.py) +添加文件失败 resources/yolov8_config.json: UNIQUE constraint failed: files.path +添加文件: resources/yolov8_config.json +文件大小: 0.01 MB +数据库文件: application.svfs +导出成功: resources/yolov8_config.json -> resources/yolov8_config.json +已保存到: resources/yolov8_config.json +已保存到: application.svfs +添加文件失败 resources/yolov8s_int8_1b.bmodel: UNIQUE constraint failed: files.path +添加文件: resources/yolov8s_int8_1b.bmodel +文件大小: 11.44 MB +数据库文件: application.svfs +导出成功: resources/yolov8s_int8_1b.bmodel -> resources/yolov8s_int8_1b.bmodel +已保存到: resources/yolov8s_int8_1b.bmodel +已保存到: application.svfs + 添加模型文件: resources/yolov8s_int8_1b.bmodel + +VFS内容: + FILE: config.json (313 bytes) + FILE: resources/yolov8_config.json (7178 bytes) + FILE: resources/yolov8s_int8_1b.bmodel (11993088 bytes) + +复制文件到构建目录... + 复制: public/main.py + 复制: application.svfs + 复制: plugins.mbank + +构建成功完成! 输出目录: build + 主程序: build/main.py + VFS文件: build/application.svfs + 模块库: build/plugins.mbank +``` + +./build +``` +部署目录/ +├── main.py # 主程序(使用VFS和模块库) +├── application.svfs # 虚拟文件系统(存储配置文件和模型) +└── plugins.mbank # Python模块库 +``` + +## 部署 + +方法一:构建 whl 并在生成环境中安装 + +```bash +uv build +ls dist +``` + +```text +(sophon-chakcy) linaro@bm1684:/data/sophon_chakcy$ uv build +Building source distribution... +Building wheel from source distribution... +Successfully built dist/sophon_chakcy-0.1.0.tar.gz +Successfully built dist/sophon_chakcy-0.1.0-py3-none-any.whl +(sophon-chakcy) linaro@bm1684:/data/sophon_chakcy$ ls dist +sophon_chakcy-0.1.0-py3-none-any.whl sophon_chakcy-0.1.0.tar.gz +(sophon-chakcy) linaro@bm1684:/data/sophon_chakcy$ +``` + +方法二:复制 src/sophon_chakcy 到项目根路径 diff --git a/images/detected_3.jpg b/images/detected_3.jpg new file mode 100644 index 0000000..50ea3e0 Binary files /dev/null and b/images/detected_3.jpg differ