YOLO + 摄像头实物判断实现方案
基于你的需求,我整理了3 种主流实现路径,从简单到复杂:
方案一:Model Zoo 官方示例(推荐新手)
参考帖子:RDK X5 目标检测入门 | USB 摄像头 + 实时 Web 预览
步骤 1:克隆 Model Zoo
cd ~
git clone -b rdk_x5 https://github.com/D-Robotics/rdk_model_zoo.git
cd rdk_model_zoo/samples/vision/ultralytics_yolo
步骤 2:连接摄像头并测试
# 查看摄像头设备
ls /dev/video*
# 运行官方示例(USB 摄像头)
python3 demo_usb_camera.py \
--model_path /path/to/your/yolov10.bin \
--device_id 0 \
--conf_threshold 0.5
步骤 3:修改为实物判断逻辑
在 demo_usb_camera.py 中添加判断逻辑:
# 在检测结果处理部分添加
def judge_object(detections):
"""实物判断逻辑"""
target_objects = ["cup", "bottle", "phone"] # 你要检测的实物
for det in detections:
if det['class_name'] in target_objects and det['confidence'] > 0.6:
print(f"✅ 检测到目标:{det['class_name']}, 置信度:{det['confidence']:.2f}")
# 在这里添加你的后续动作
# 如:控制机械臂、发送信号、记录日志等
return True
return False
# 在主循环中调用
if judge_object(results):
# 执行实物判断后的操作
pass
方案二:Sunrise Camera Web 界面(快速验证)
参考:你当前正在使用的 Sunrise Camera
步骤 1:配置自定义模型
# SSH 登录 X5
ssh root@<X5_IP>
# 找到配置文件
find /userdata/sunrise_camera -name "*.json"
# 编辑配置文件(添加你的 YOLOv10 模型)
vi /userdata/sunrise_camera/config/model_config.json
步骤 2:添加判断逻辑
在 Web 界面的基础上,你可以通过以下方式获取检测结果:
# 查看实时日志
tail -f /userdata/sunrise_camera/log/sunrise.log
# 或者通过 HTTP API 获取检测结果(如果支持)
curl http://<X5_IP>:8080/api/detection
步骤 3:编写外部判断脚本
# judge.py - 监听日志或 API 进行实物判断
import requests
import time
def check_object():
response = requests.get('http://<X5_IP>:8080/api/detection')
data = response.json()
# 判断逻辑
for obj in data.get('detections', []):
if obj['label'] == 'your_target' and obj['confidence'] > 0.6:
print("✅ 发现目标实物!")
# 触发动作
return True
return False
while True:
check_object()
time.sleep(0.1) # 10 FPS 检测频率
方案三:ROS2 节点集成(适合机器人系统)
参考帖子:TROS 部署 YOLOv10
步骤 1:启动摄像头和检测节点
source /opt/tros/humble/setup.bash
# 启动摄像头节点
ros2 launch hobot_camera usb_camera.launch.py
# 启动 YOLO 检测节点
ros2 launch rdk_model_zoo yolov10_detection.launch.py \
model_path:=/path/to/yolov10.bin
步骤 2:编写判断节点
# object_judge_node.py
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from vision_msgs.msg import Detection2DArray
class ObjectJudgeNode(Node):
def __init__(self):
super().__init__('object_judge_node')
self.subscription = self.create_subscription(
Detection2DArray,
'/detection_results',
self.detection_callback,
10
)
def detection_callback(self, msg):
"""检测回调函数"""
for detection in msg.detections:
class_name = detection.results[0].hypothesis.class_id
confidence = detection.results[0].hypothesis.score
# 实物判断逻辑
if class_name == 'your_target' and confidence > 0.6:
self.get_logger().info(f'✅ 检测到目标:{class_name}')
# 发布控制指令或触发其他节点
self.take_action()
def take_action(self):
# 执行实物判断后的动作
# 如:发布速度指令、控制 GPIO 等
pass
def main():
rclpy.init()
node = ObjectJudgeNode()
rclpy.spin(node)
node.destroy_node()
if __name__ == '__main__':
main()
步骤 3:运行判断节点
ros2 run object_judge object_judge_node.py
推荐参考资料
| 资源 | 链接 | 说明 |
|---|---|---|
| Model Zoo 官方文档 | GitHub | 完整示例代码 |
| USB 摄像头实时检测 | 帖子 | 3 分钟跑通教程 |
| YOLOv11 性能优化 | 帖子 | 7 FPS → 47 FPS 实战 |
| 目标检测入门 | 帖子 | 3 条路径详解 |
关键注意事项
-
摄像头选择:
- USB 摄像头:即插即用,适合快速验证
- MIPI 摄像头:性能更好,需要配置
- 推荐:USB 摄像头(如罗技 C270/C920)
-
模型输入尺寸:
- 确保量化时的输入尺寸与摄像头分辨率匹配
- 常见:640x640, 672x672
-
置信度阈值:
- 初始建议:
conf_threshold=0.5 - 根据实际效果调整(0.3-0.7)
- 初始建议:
-
性能优化:
- 如果帧率低,检查 BPU 占用率
- 使用
hrt_model_exec perf测试模型性能
下一步建议
告诉我你的具体场景,我可以给出更针对性的代码:
- 要检测什么实物?(杯子、手机、特定物体?)
- 检测到后需要做什么动作?(机械臂抓取、报警、记录?)
- 使用什么摄像头?(USB 还是 MIPI?)
- 需要集成到 ROS2 系统吗?
需要我帮你写完整的判断逻辑代码吗?![]()