训练模型监测开关

张开发
2026/4/9 21:50:18 15 分钟阅读

分享文章

训练模型监测开关
好的我完全理解你的需求。你是新人需要一步一步带着做还要讲清楚原理。你提到的“动素分析”通常是对人工作业的动作分解如伸手、抓取、旋转等而“检测静态阀门开关”是一个纯粹的计算机视觉任务——识别阀门是开还是关。这两者结合起来最合理的解释是先用 YOLO 识别出阀门的位置和开关状态然后把识别结果作为一个“动作要素”输入给动素分析系统例如判断操作人员是否正确地完成了“旋转阀门”这个动素。为了让你能立刻上手并看到效果我会先带你完成核心目标用 YOLO 实时检测阀门开关。最后再简单说明如何与动素分析关联保证你每一步都能在电脑上操作成功。---准备工作你需要的东西· 一台 Windows 台式电脑有摄像头可以是 USB 摄像头或笔记本自带摄像头· 一个实际的阀门或者打印几张阀门开/关的图片甚至用手机显示阀门图片也可以用于训练· 耐心和按照步骤执行最终效果摄像头对着阀门屏幕上会显示一个方框框上标注 open开或 closed关。---第 0 步原理通俗解释先明白你在做什么· YOLO一种超级快的目标检测算法。你给它一张图它能告诉你图里有什么物体、在什么位置。· 训练YOLO 本身不认识阀门所以你需要给它看很多阀门图片并告诉它“这个是开”、“那个是关”它就会自己学会。· 动素分析工业工程中把人的动作分解成 18 种基本动作如“抓取”、“旋转”。检测到阀门状态后可以判断操作员是否执行了“旋转”这个动素以及用时多少。我们先用 YOLO 把阀门状态检测出来这是基础。---第 1 步安装软件环境约 20 分钟1.1 安装 Python1. 打开浏览器访问 python.org2. 点击黄色的 Download Python 3.10.x不要选 3.12 以上可能不兼容3. 下载后双击安装一定要勾选 “Add Python to PATH”4. 点击 “Install Now”5. 安装完成后按 Win R输入 cmd 打开命令提示符输入cmdpython --version如果显示 Python 3.10.x 就成功了。1.2 安装需要的库在命令提示符中一行一行输入以下命令每输完一行按回车cmdpip install ultralytics opencv-python torch torchvision这个过程可能需要 5~10 分钟请保持网络通畅。原理ultralytics 是 YOLOv8 的工具包opencv 用来处理摄像头图像torch 是 PyTorch 深度学习框架。---第 2 步准备自己的阀门数据集最难但最关键的一步因为 YOLOv8 官方模型不认识阀门你必须自己拍照片教它。2.1 拍摄阀门照片· 把阀门放在桌子上用摄像头从不同角度、不同光线拍照片。· 开状态拍 30~50 张阀门手柄与管道平行或符合你定义的开· 关状态拍 30~50 张手柄垂直· 如果阀门不方便转动你可以打印两张阀门图片一张开一张关用手举着变换角度拍。· 照片格式为 .jpg 或 .png全部放进一个文件夹比如 C:\valve_dataset\images新手提醒最少每类 20 张也能训练但越多越准。如果实在不够用手机从网上找阀门图片也可以但最好保持风格一致。2.2 安装标注工具LabelImg标注就是告诉电脑图片里哪个位置是阀门是开还是关。1. 打开命令提示符输入cmdpip install labelimg2. 安装完后在命令提示符中输入 labelimg 回车会打开一个小窗口。2.3 标注图片详细操作1. 在 LabelImg 窗口中点击左侧 Open Dir选择你的 C:\valve_dataset\images 文件夹。2. 点击 Change Save Dir在 C:\valve_dataset 下新建一个文件夹叫 labels并选中它YOLO 标注文件会保存到这里。3. 点击菜单栏的 View → Auto Save mode自动保存。4. 点击 PascalVOC 切换成 YOLO 格式按钮文字会变成 YOLO。5. 开始标注· 按 W 键鼠标变成十字在阀门周围画一个框刚好包住阀门。· 松开鼠标会弹出一个对话框让你输入类别名称。输入 open 或 closed注意小写。· 按 CtrlS 保存如果开了自动保存就不需要。· 按 D 键跳到下一张图片。6. 把每一张图片都这样标注完。检查打开 C:\valve_dataset\labels 文件夹每个图片会对应一个 .txt 文件里面内容类似 0 0.5 0.5 0.2 0.3数字表示类别和框的位置。2.4 划分训练集和验证集在 C:\valve_dataset 下创建两个子文件夹· train放 80% 的图片和对应的标签· val放 20% 的图片和对应的标签具体做法1. 在 images 文件夹里手动移动 20% 的图片到 val 文件夹例如总共 60 张移 12 张到 val。2. 对应的 .txt 标签文件也要从 labels 复制到 val 文件夹注意名字要匹配。最后你的文件夹结构应该像这样C:\valve_dataset│├── images│ ├── train (放训练图片)│ └── val (放验证图片)├── labels│ ├── train (放训练图片对应的txt)│ └── val (放验证图片对应的txt)可以用文件管理器手动操作对于新人最简单。---第 3 步编写数据集配置文件用记事本新建一个文件命名为 valve.yaml内容如下请根据你的实际路径修改yamlpath: C:/valve_dataset # 数据集根目录train: images/train # 训练图片相对路径val: images/val # 验证图片相对路径nc: 2 # 类别数量开和关names: [open, closed] # 类别名称顺序必须和标注时一致保存到 C:\valve_dataset\valve.yaml。---第 4 步训练模型让电脑学习4.1 写一个训练脚本用记事本新建一个文件 train_valve.py内容如下pythonfrom ultralytics import YOLO# 加载预训练模型YOLOv8nmodel YOLO(yolov8n.pt)# 开始训练model.train(dataC:/valve_dataset/valve.yaml,epochs50, # 训练轮数新人用50就够了imgsz640,batch8, # 如果内存不够就改成4devicecpu # 如果没有独立显卡就写cpu有NVIDIA显卡可写0)print(训练完成模型保存在 runs/detect/train/weights/best.pt)保存到桌面或者任意文件夹。4.2 运行训练1. 打开命令提示符用 cd 命令切换到脚本所在目录例如cmdcd C:\Users\你的用户名\Desktop2. 输入cmdpython train_valve.py3. 然后开始等待。根据图片数量和电脑性能可能需要 10~30 分钟。命令行会不断输出损失值最后出现 Results saved to runs\detect\train 就表示成功了。原理YOLO 会反复看你的图片每次调整内部参数使得预测的框和标签越来越准。epochs50 意味着把所有图片看 50 遍。---第 5 步用摄像头实时检测阀门开关5.1 编写实时检测脚本新建文件 live_detect.py内容如下pythonimport cv2from ultralytics import YOLO# 加载你刚刚训练好的模型model YOLO(runs/detect/train/weights/best.pt)# 打开摄像头0 表示第一个摄像头cap cv2.VideoCapture(0)if not cap.isOpened():print(无法打开摄像头请检查驱动或摄像头索引)exit()print(按 q 键退出)while True:success, frame cap.read()if not success:break# 检测阀门results model(frame, conf0.5) # 置信度阈值0.5# 绘制结果annotated_frame results[0].plot() # 自动画框和标签cv2.imshow(Valve Switch Detection, annotated_frame)if cv2.waitKey(1) 0xFF ord(q):breakcap.release()cv2.destroyAllWindows()5.2 运行实时检测在命令提示符中执行cmdpython live_detect.py此时会弹出一个窗口摄像头启动。把你的阀门放在摄像头前慢慢转动阀门你会看到屏幕上的框从 open 变成 closed或者反过来。恭喜你你已经完成了 YOLO 检测阀门开关的全部流程。---第 6 步怎么和“动素分析”结合起来满足你的原始需求动素分析关注人的动作。在你有了阀门状态检测的基础上你可以1. 检测状态变化的时间点比如阀门从 closed 变为 open 的那一刻记录下时间。2. 分析“旋转”动素从手接触阀门开始到旋转结束计算持续时间判断是否属于正常范围。3. 结合 OpenCV 的手部关键点检测可选更复杂检测到人手在阀门附近且发生旋转动作就记录一个“旋转”动素。一个最简单的动素分析示例只记录状态变化时间python# 在实时检测循环中加入以下逻辑last_state Nonewhile True:...current_state results[0].names[results[0].boxes.cls[0].item()] if len(results[0].boxes) 0 else Noneif current_state and current_state ! last_state:print(f阀门状态变化{last_state} - {current_state} 时间 {time.time()})last_state current_state这样你就有了状态变化的时间戳可以用于后续的效率分析。---常见问题与解决遇到报错先看这里错误现象 可能原因 解决方法ModuleNotFoundError: No module named ultralytics 没有安装库 重新执行 pip install ultralytics训练时 CUDA out of memory 显存不足 把 batch8 改成 batch4 或 2或者设置 devicecpu摄像头打开黑屏 摄像头被占用或索引不对 把 VideoCapture(0) 改成 VideoCapture(1) 试试检测不到阀门或乱框 训练图片太少或标注不准 增加图片数量重新标注再训练一次运行时提示 No labels found 数据集路径不对 检查 valve.yaml 中的路径是否使用了反斜杠 \ 或正斜杠 /建议用正斜杠---最后的话你现在已经掌握了· 安装 Python 和深度学习环境· 用摄像头采集数据并使用 LabelImg 标注· 训练 YOLOv8 模型来识别阀门开关· 实时检测并显示结果· 简单结合动素分析记录状态变化如果还有不清楚的步骤请告诉我你卡在哪一步例如“第2步标注完不知道标签放在哪”我会给你更具体的截图级指导。加油

更多文章