导览机器人产品讲解(摄像头 + YOLO 真实识别 + 语音讲解)

导览机器人产品讲解(摄像头 + YOLO 真实识别 + 语音讲解) 一、进阶要实现的效果摄像头实时识别物体自动语音讲解TTS语音播报不卡顿、不重复播报防抖动二、工程结构标准 ROS2 包product_robot/ ├── launch/ │ └── product_detect.launch.py ├── scripts/ │ ├── camera_node.py │ ├── yolo_detect_node.py │ └── talker_node.py ├── config/ │ └── product_info.json # 讲解词库 └── package.xml三、安装依赖OpenCV YOLO执行以下命令一键装完sudo apt update pip install opencv-python pip install ultralytics # YOLOv8 pip install ultralytics opencv-python pyttsx3 cv-bridge三、创建摄像头识别节点文件路径~/ros2_ws/src/product_robot/product_robot/camera_yolo_node.pyimport rclpy from rclpy.node import Node from sensor_msgs.msg import Image from cv_bridge import CvBridge from ultralytics import YOLO import cv2 from std_msgs.msg import String class YoloDetectNode(Node): def __init__(self): super().__init__(yolo_detect_node) self.publisher self.create_publisher(String, /detection_result, 10) self.subscriber self.create_subscription(Image, /image_raw, self.callback, 10) self.bridge CvBridge() self.model YOLO(yolov8n.pt) # 通用模型以后换客户模型 self.get_logger().info(✅ YOLO 目标检测启动) def callback(self, msg): frame self.bridge.imgmsg_to_cv2(msg, bgr8) results self.model(frame, streamTrue) for r in results: for box in r.boxes: cls self.model.names[int(box.cls[0])] self.publisher.publish(String(datacls)) def main(argsNone): rclpy.init(argsargs) node YoloDetectNode() rclpy.spin(node) rclpy.shutdown()四、更新讲解节点import rclpy from rclpy.node import Node from std_msgs.msg import String import json import pyttsx3 class ProductTalkerNode(Node): def __init__(self): super().__init__(product_talker_node) self.sub self.create_subscription(String, /detection_result, self.callback, 10) self.engine pyttsx3.init() self.last self.count 0 with open(config/product_info.json, r, encodingutf-8) as f: self.products json.load(f) self.get_logger().info(✅ 讲解节点启动) def callback(self, msg): label msg.data if label self.last: self.count 1 else: self.count 0 self.last label # 防抖连续识别2次才讲解 if self.count 2 and label in self.products: script self.products[label][script] self.get_logger().info(f讲解{script}) self.engine.say(script) self.engine.runAndWait() self.count -10 # 冷却避免重复讲 def main(argsNone): rclpy.init(argsargs) node ProductTalkerNode() rclpy.spin(node) rclpy.shutdown()四、把节点加入 setup.py打开~/ros2_ws/src/product_robot/setup.py在entry_points里加一行camera_yolo_node product_robot.camera_yolo_node:main,最终变成entry_points{ console_scripts: [ yolo_detect_node product_robot.yolo_detect_node:main, product_talker_node product_robot.product_talker_node:main, camera_yolo_node product_robot.camera_yolo_node:main, ], },五、编译bash运行cd ~/ros2_ws colcon build source install/setup.bash六、运行完整进阶系统开3个终端终端 1启动摄像头ros2 run usb_cam usb_cam_node_exe终端 2启动YOLO 识别ros2 run product_robot camera_yolo_node终端 3启动语音讲解ros2 run product_robot product_talker_node七、如果你想加更多物体讲解直接打开你的 JSON 文件加内容就行keyboard: { script: 检测到键盘用于输入文字。 }八、对接客户自定义产品收集客户各类展品多角度实拍图使用标注工具标注数据集训练专属xxx.pt模型仅修改检测节点内模型路径self.model YOLO(自定义展品模型.pt)同步更新product_speech.json内产品名与专属讲解话术即可九、拓展点1.增加识别置信度过滤过滤低概率误识别2. 新增界面可视化窗口绘制识别框 产品名称3. 接入机器人底盘逻辑识别展品后自动靠近讲解4. 切换离线 TTS / 云端语音合成优化播报音色