# cv-yolo **Repository Path**: liox/cv-yolo ## Basic Information - **Project Name**: cv-yolo - **Description**: 训练yolo进行物体分割识别的工程 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-12 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cv-yolo #### 介绍 训练yolo进行物体分割识别的工程 工程使用参考了[https://github.com/Megvii-BaseDetection/YOLOX](https://github.com/Megvii-BaseDetection/YOLOX),但是修正了里面的部分错误 #### 安装教程 1. python3 -m venv .venv 2. ./.venv/bin/activate.ps1 3. pip install -r requirements.txt #### 使用说明 1. 使用Labelme精准标注 ```shell pip3 install labelme # 若提示已存在则跳过 labelme ``` 启动后操作极简 点击左上角 Open Dir → 选择 resources/images/seg/json/ 逐张打开图片,点击左侧 Polygon 工具(快捷键 P) 沿目标边缘单击打点,务必紧贴物体真实轮廓(尤其注意车窗、人体关节等细节) 标完一圈后双击闭合,弹出对话框输入类别名:person 或 car(必须与yaml中定义完全一致) 点击 OK → Save,自动生成同名 .json 文件(如 person_car_001.jpg.json) 2. 将JSON标注转换为YOLO标准格式 ```shell python ./tool/tool_json2label_seg.py --json_dir resources/images/seg/json --save_dir resources/images/seg/json/labels ``` 3. 划分训练集与验证集 ```shell python ./tool/tool_seg2datasets.py --labels_dir resources/images/seg/json/labels --image_dir resources/images/seg/json --output_dir resources/images/seg/datasets --train_ratio 0.8 ``` 4. 编写数据配置文件 yoloXX-seg.yaml,其中names节点必须从0开始,同时配套修改tool_json2label_seg.py中的map 5. 执行python train_seg.py进行模型训练,训练好的最优 YOLO11 图像分割模型文件为: segment/runs/segment/train/weights/best.pt 6. 执行 predict_seg.py,运行后,结果将生成在 segment/predict/val_results/: *.jpg:原图叠加彩色分割掩码(不同类别不同颜色) *.txt:每行格式 class_id center_x center_y width height confidence x1 y1 x2 y2 ...(多边形顶点) 以下来自豆包: # Yolo26模型实时识别rtsp流中的物体 ### 一、可行性说明 完全可以!Ultralytics 版本的 YOLO11 原生支持 RTSP 网络流的实时推理(包括图像分割+目标识别),只要你的 RTSP 流地址可正常访问、设备性能(CPU/GPU)足够,就能实现低延迟的实时识别与分割。 ### 二、实时识别 RTSP 流的具体使用方法 核心逻辑:将 YOLO 推理的 `source` 参数从图片/文件夹路径,替换为**RTSP 流地址**,并通过参数开启流式推理、实时显示。 #### 方法 1:Python 脚本(推荐,灵活可控) 适合需要自定义逻辑(如实时显示分割掩码、保存识别结果、触发告警等)的场景,代码可直接运行: ```python from ultralytics import YOLO import cv2 # 1. 加载训练好的分割模型(替换为你的best.pt路径) model = YOLO("segment/runs/segment/train/weights/best.pt") # 2. RTSP 流地址(替换为你的实际地址,格式:rtsp://用户名:密码@摄像头IP:端口/流路径) rtsp_url = "rtsp://admin:123456@192.168.1.100:554/stream1" # 3. 实时推理配置(关键参数) results = model.predict( source=rtsp_url, # 输入为RTSP流 stream=True, # 开启流式推理(必须,否则会卡顿/内存溢出) imgsz=640, # 推理尺寸(越小速度越快,建议320/640) conf=0.5, # 置信度阈值(过滤低质量识别) iou=0.45, # 重叠框合并阈值 show=True, # 实时显示识别窗口(含分割掩码) device='cuda', # 设备:有GPU用cuda,无GPU改cpu stream_buffer=True, # 缓冲流数据,降低延迟 verbose=False # 关闭冗余日志 ) # 4. 循环读取流帧(保持窗口运行) try: for r in results: # 可选:获取单帧的识别结果(如类别、坐标、分割掩码) if r.boxes is not None: print(f"识别到 {len(r.boxes)} 个目标") # 打印帧内目标数量 # 按 'q' 键退出窗口 if cv2.waitKey(1) & 0xFF == ord('q'): break finally: # 释放资源 cv2.destroyAllWindows() print("RTSP流推理已停止") ``` ##### 关键参数解释: + `stream=True`:必须开启!否则 YOLO 会将 RTSP 流当作“视频文件”一次性加载,导致内存爆满、卡顿甚至崩溃; + `show=True`:自动弹出窗口,实时显示**原图+彩色分割掩码+目标边界框+类别/置信度**; + `rtsp_url` 格式:多数摄像头的 RTSP 地址格式为 `rtsp://用户名:密码@IP:端口/流路径`,若无需密码则简化为 `rtsp://192.168.1.100:554/stream1`(需确认摄像头的RTSP协议开启)。 #### 方法 2:CLI 命令行(快捷,无需写脚本) 适合快速测试,直接在终端执行以下命令(项目根目录下): ```bash # RTSP流实时识别(带分割掩码显示) yolo task=segment mode=predict \ model=segment/runs/segment/train/weights/best.pt \ source=rtsp://admin:123456@192.168.1.100:554/stream1 \ stream=True show=True conf=0.5 device=cuda imgsz=640 ``` + 运行后会自动弹出实时显示窗口,按 `q` 键退出; + 若无 GPU,删除 `device=cuda` 或改为 `device=cpu`。 ### 三、关键注意事项(解决常见问题) 1. **RTSP 流无法访问**: - 检查摄像头的 RTSP 协议是否开启(多数摄像头默认关闭,需在网页后台设置); - 验证地址正确性:可先用 VLC 播放器打开 RTSP 地址,能播放则地址有效; - 确保电脑与摄像头在同一局域网,或公网可访问(需端口映射)。 2. **推理卡顿/延迟高**: - 降低 `imgsz`:从 640 改为 320(速度提升明显,精度略有下降); - 优先使用 GPU(`device=cuda`):CPU 推理 RTSP 流会严重卡顿(尤其是640尺寸); - 关闭无关程序:减少显存/内存占用,避免流缓冲溢出; - 改用有线网络:无线WiFi易导致RTSP流丢包、延迟增加。 3. **无分割掩码仅显示边界框**: - 确认模型路径是 `segment/runs/.../best.pt`(分割任务权重),而非 `detect/runs/...`(检测任务权重); - 命令行需保留 `task=segment`(不可省略或改为detect)。 4. **显存不足报错**: - 降低 `imgsz` 至 320,或添加参数 `batch=1`(强制单帧推理); - 若使用CPU,可增加 `workers=0` 参数(关闭多线程,避免CPU过载)。 ### 总结 1. YOLO11 分割模型支持 RTSP 流实时识别,核心是将 `source` 改为 RTSP 地址并开启 `stream=True`; 2. Python 脚本更灵活(可自定义识别逻辑),CLI 命令更快捷(适合快速测试); 3. 流畅运行的关键:使用 GPU 推理、合理降低 `imgsz`、保证 RTSP 流网络稳定。