yolov5 ros 行人检测
时间: 2025-01-17 11:02:44 浏览: 71
### 使用YOLOv5在ROS中实现行人检测
#### 安装依赖项
为了在ROS环境中部署YOLOv5,需安装必要的Python库和其他工具。确保已安装`ros-noetic-desktop-full`或其他对应版本的ROS环境。
```bash
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
pip install rospkg catkin_pkg rospy message_generation std_msgs sensor_msgs cv_bridge opencv-python
```
#### 下载并配置YOLOv5仓库
克隆官方YOLOv5仓库,并设置好模型权重文件路径:
```bash
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
```
#### 创建ROS节点
创建一个新的ROS包来集成YOLOv5与ROS通信功能:
```bash
catkin_create_pkg yolo_v5_node rospy std_msgs sensor_msgs cv_bridge
```
编辑`CMakeLists.txt`和`package.xml`以包含适当依赖关系。
#### 编写ROS节点代码
编写一个简单的ROS Python脚本作为YOLOv5推理引擎接口[^1]:
```python
#!/usr/bin/env python
import rospy
from sensor_msgs.msg import Image as RosImage
from cv_bridge import CvBridge, CvBridgeError
import cv2
import numpy as np
import torch
import time
class YOLOV5Node(object):
def __init__(self):
self.bridge = CvBridge()
self.image_subscriber = rospy.Subscriber("/camera/image_raw", RosImage, self.callback)
self.model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 加载预训练模型
def callback(self, ros_image):
try:
frame = self.bridge.imgmsg_to_cv2(ros_image, "bgr8")
except CvBridgeError as e:
print(e)
results = self.model(frame) # 执行推断操作
labels, confidences = [], []
for detection in results.xyxy[0]:
label = int(detection[-1])
confidence = float(detection[-2])
if label == 0 and confidence >= 0.7: # 假设标签索引0代表'person'
x_min, y_min, x_max, y_max = map(int, detection[:4].tolist())
# 绘制矩形框标记行人位置
cv2.rectangle(frame, (x_min,y_min), (x_max,y_max),(0,255,0), thickness=2)
resized_frame = cv2.resize(frame,(int(frame.shape[1]/2), int(frame.shape[0]/2)))
cv2.imshow("Detected Pedestrians",resized_frame)
key=cv2.waitKey(1)&0xFF
if(key==ord('q')):
exit()
if __name__=="__main__":
rospy.init_node('yolov5_pedestrian_detector')
node = YOLOV5Node()
while not rospy.is_shutdown():
rospy.spin()
```
此段程序订阅了摄像头话题获取原始图像流,利用加载好的YOLOv5模型处理每一帧图片,当发现置信度超过设定阈值的人类对象时,则绘制边框标注出来。最后显示带有标注的结果窗口给用户查看。
阅读全文
相关推荐

















