news 2026/9/1 17:08:29

巡线小车添加yolov8识别stop交通标志功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
巡线小车添加yolov8识别stop交通标志功能

需求:小车通过摄像头识别到stop标志,使小车停止

实现框架:

#!/usr/bin/env python3 import rclpy from rclpy.node import Node from sensor_msgs.msg import Image from std_msgs.msg import Bool from cv_bridge import CvBridge from ultralytics import YOLO class YoloStopDetector(Node): def __init__(self): super().__init__('yolo_stop_detector') self.bridge = CvBridge()#用于ros图片和cv图片转换 self.image_sub = self.create_subscription(Image,'/ascamera/camera_publisher/rgb0/image',self.image_callback,10)#图片订阅 self.result_image_pub = self.create_publisher(Image,'/yolo_result_image',10)#检测图片发布 self.stop_pub = self.create_publisher(Bool,'/stop_detected',10)#停止消息发布 self.model = YOLO('/home/ubuntu/ros2_ws/yolo_models/yolov8n.pt')#加载推理模型 self.cv_image_count = 0 self.get_logger().info("YOLO停止标志检测器已启动") self.last_stop = False def image_callback(self,msg): cv_image = self.bridge.imgmsg_to_cv2(msg,'bgr8') self.cv_image_count += 1 # 每5帧检测一次 if self.cv_image_count % 5 != 0: return result = self.model.predict(cv_image,imgsz=416,conf=0.4,verbose=False)[0] # 可用的属性和方法 # result.boxes # 检测框信息 # result.boxes.xyxy # 框的坐标 [x1, y1, x2, y2] # result.boxes.cls # 类别 ID(整数) # result.boxes.conf # 置信度(0~1) # result.boxes.data # 全部数据 [x1, y1, x2, y2, conf, cls] # result.names # 类别名字典 {0: 'person', 11: 'stop sign', ...} # result.plot() # 画检测结果的图片 annotated_image = result.plot() self.publish_result_image(annotated_image)#发布检测画面 stop=False for cls, conf, box in zip(result.boxes.cls,result.boxes.conf,result.boxes.xyxy): if int(cls.item()) == 11 and conf.item()>0.4: # item() 把 PyTorch 张量(tensor)转换成 Python 数字 x1,y1,x2,y2 = map(int,box.tolist()) area=(x2-x1)*(y2-y1) h,w=cv_image.shape[:2] if area > 0.02*w*h: #检测框大于图片一定面积生效 stop=True break msg=Bool() msg.data=stop self.stop_pub.publish(msg) if stop and not self.last_stop: self.get_logger().info("YOLO检测到停止标志") self.last_stop = stop def publish_result_image(self, image): result_msg = self.bridge.cv2_to_imgmsg(image,encoding='bgr8') self.result_image_pub.publish(result_msg) def main(): rclpy.init() node=YoloStopDetector() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__=="__main__": main()

实现过程:新增一个目标检测节点,加载模型并进行推理,根据对图片处理结果,比如识别类型,置信度,识别目标占图面积决定标志位状态,发布bool类型的消息,c++巡线节点根据收到的消息更改标志位

最终实现效果:

巡线小车实测2

巡线小车实测3

巡线小车实测4

巡线小车实测5

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 17:03:38

从玩梗到落地:广东双马尾目标检测项目全流程拆解

如果有人说“警告!检测到广东双马尾出没!”,大多数人会把它当成一个段子。但如果这句话出现在产品需求里呢?我认真琢磨过之后发现,它其实是一个特别典型的目标检测项目需求。目标对象不是标准类别,包含发型…

作者头像 李华
网站建设 2026/9/1 17:00:43

vivo算法岗笔试高频考点全解析:从KMP到粒子群算法

1. 先搞清楚笔试到底考什么:vivo算法岗题型与考察逻辑 1.1 2024秋招vivo算法类笔试的整体结构 我投的是vivo的CV算法岗,秋招笔试通知来得挺快,从投递到收到笔试链接大概隔了不到一周。整套卷子90分钟,题目量不大,但覆…

作者头像 李华
网站建设 2026/9/1 17:00:40

OpenClaw(龙虾)AI 智能体安装教程

硬件 & 软件前置要求 硬件 内存:最低 4GB,推荐 8GB 及以上磁盘:至少 2GB 空闲存储空间网络:可访问外网(有能力的话最好,没也行) 必备环境 Node.js ≥ v22,版本过低会直接安装…

作者头像 李华
网站建设 2026/9/1 16:56:01

Django的手机数据分析与可视化大数据分析项目案例机器学习毕设选题

本系统基于Django框架、HTML和MySQL数据库技术,构建了一个全面的手机数据分析与可视化平台。大屏内容丰富,包括品牌市场份额分布、手机价格区间分布、各维度评分分布、热门机型Top10、内存容量分布以及品牌评分与价格分析等多个模块。通过这些模块&#…

作者头像 李华
网站建设 2026/9/1 16:53:19

2022小米秋招测试开发笔试复盘:考点拆解与避坑指南

说实话,测试开发这个岗位的笔试,历来有点“精神分裂”的味道。你既要像开发岗一样手撕代码、解算法,又要像测试岗一样抠细节、挑毛病、设计用例。2022年小米秋招这份测试开发笔试卷,我前后复盘了两遍,第一遍看的是题&a…

作者头像 李华