From d6880498f960fb17d4d3564713400969281d9f6b Mon Sep 17 00:00:00 2001 From: haotian <2421912570@qq.com> Date: Sat, 28 Feb 2026 14:44:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9E=8B=E7=9A=84?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=EF=BC=9B=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=8F=AA=E4=BF=9D=E7=95=99=E4=BA=BA=E5=92=8C=E9=9D=B4=E5=AD=90?= =?UTF-8?q?=E7=9A=84=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/sample_cam_ppe11.json | 3 +- docs/models.md | 57 +++++++-------------- models/{best-rk3588.rknn => best-768.rknn} | Bin plugins/ai_yolo/ai_yolo_node.cpp | 7 +-- 4 files changed, 25 insertions(+), 42 deletions(-) rename models/{best-rk3588.rknn => best-768.rknn} (100%) diff --git a/configs/sample_cam_ppe11.json b/configs/sample_cam_ppe11.json index 82f6418..7237b74 100644 --- a/configs/sample_cam_ppe11.json +++ b/configs/sample_cam_ppe11.json @@ -52,7 +52,8 @@ "stats": true, "stats_interval": 30, "detections": true - } + }, + "class_filter": [3, 6] }, { "id": "face_det_cam1", diff --git a/docs/models.md b/docs/models.md index eb4bda8..468d80f 100644 --- a/docs/models.md +++ b/docs/models.md @@ -6,8 +6,7 @@ ``` models/ -├── best-640.rknn # YOLO 通用检测模型 (3类) -├── best-768.rknn # YOLO PPE检测模型 (11类) +├── best-768.rknn # YOLO PPE检测模型 (11类,实际使用2类) ├── yolov5s-640-640.rknn # YOLOv5 COCO预训练模型 (80类) ├── yolov8n-640.rknn # YOLOv8n COCO预训练模型 (80类) ├── RetinaFace_mobile320.rknn # 人脸检测模型 @@ -17,38 +16,12 @@ models/ ## 模型详情 -### 1. best-640.rknn - -**类型**: YOLOv8 目标检测 -**输入尺寸**: 640x640 -**类别数**: 3 - -| 索引 | 类别名 | 说明 | -|------|--------|------| -| 0 | person | 人 | -| 1 | vest | 反光背心 | -| 2 | boots | 安全靴 | - -**配置示例**: -```json -{ - "type": "ai_yolo", - "model_path": "./models/best-640.rknn", - "model_version": "v8", - "num_classes": 3, - "conf": 0.35, - "nms": 0.45 -} -``` - ---- - -### 2. best-768.rknn (PPE11) +### 1. best-768.rknn (PPE11) **类型**: YOLOv8 PPE检测模型 **输入尺寸**: 768x768 **类别数**: 11 -**模型名**: ppe11_person_boots_boost +**实际使用类别**: 2 (boots + Person) | 索引 | 类别名 | 业务使用 | 说明 | |------|--------|----------|------| @@ -75,7 +48,7 @@ models/ "model_w": 768, "model_h": 768, "num_classes": 11, - "conf": 0.35, + "conf": 0.2, "nms": 0.45, "class_filter": [3, 6] } @@ -89,9 +62,18 @@ models/ } ``` +**Tracker配置**: +```json +{ + "type": "tracker", + "track_classes": [3, 6], + "per_class": true +} +``` + --- -### 3. yolov5s-640-640.rknn +### 2. yolov5s-640-640.rknn **类型**: YOLOv5s COCO预训练模型 **输入尺寸**: 640x640 @@ -113,7 +95,7 @@ models/ --- -### 4. yolov8n-640.rknn +### 3. yolov8n-640.rknn **类型**: YOLOv8n COCO预训练模型 **输入尺寸**: 640x640 @@ -135,7 +117,7 @@ models/ --- -### 5. RetinaFace_mobile320.rknn +### 4. RetinaFace_mobile320.rknn **类型**: RetinaFace 人脸检测 **输入尺寸**: 320x320 @@ -155,7 +137,7 @@ models/ --- -### 6. mobilefacenet_arcface.rknn +### 5. mobilefacenet_arcface.rknn **类型**: MobileFaceNet + ArcFace 人脸识别 **输入尺寸**: 112x112 @@ -186,8 +168,7 @@ models/ | 场景 | 推荐模型 | 说明 | |------|----------|------| | 通用目标检测 | yolov8n-640.rknn | 80类COCO,通用性强 | -| 工地安全检测 | best-640.rknn | 人/背心/安全靴 | -| PPE完整检测 | best-768.rknn | 11类PPE,含正反例 | +| 工地安全检测 (人+靴) | best-768.rknn | 11类PPE,只使用3(boots)+6(Person) | | 人脸检测+识别 | RetinaFace + MobileFaceNet | 人脸识别链路 | ## 注意事项 @@ -195,4 +176,4 @@ models/ 1. **模型尺寸匹配**: `preprocess` 节点的 `dst_w/dst_h` 必须与模型输入尺寸一致 2. **num_classes**: 必须与模型实际类别数一致,否则后处理会出错 3. **class_filter**: 用于过滤只关心的类别,减少后续处理负载 -4. **best-768.rknn**: 只消费类别 3(boots) 和 6(Person),其他类别可忽略 +4. **best-768.rknn**: 只消费类别 3(boots) 和 6(Person),其他类别在 class_filter 中已过滤 diff --git a/models/best-rk3588.rknn b/models/best-768.rknn similarity index 100% rename from models/best-rk3588.rknn rename to models/best-768.rknn diff --git a/plugins/ai_yolo/ai_yolo_node.cpp b/plugins/ai_yolo/ai_yolo_node.cpp index 47c9e9c..e1fa69a 100644 --- a/plugins/ai_yolo/ai_yolo_node.cpp +++ b/plugins/ai_yolo/ai_yolo_node.cpp @@ -432,9 +432,10 @@ public: PushToDownstream(frame); ++processed_; - if (stats_log_ && stats_interval_ > 0 && (processed_ % stats_interval_) == 0) { - LogInfo("[ai_yolo] processed=" + std::to_string(processed_) + " id=" + id_); - } + // Stats log disabled to reduce log spam + // if (stats_log_ && stats_interval_ > 0 && (processed_ % stats_interval_) == 0) { + // LogInfo("[ai_yolo] processed=" + std::to_string(processed_) + " id=" + id_); + // } return NodeStatus::OK; }