python3使用cv_bridge

提示:在上一篇博客中将yolov5封装,并可使用其他程序调用,这一篇介绍ros程序调用yolov5。 环境是ubuntu18.04
思路:将相机usb_cam发布的图像信息通过cv_bridge转化为cv传入yolov5中进行检测。
由于该程序在python3中运行,所以需要编译cv_bridge使其可以被python3调用。
直接根据参考的网址一步步进行即可。
参考:https://www.guyuehome.com/34115

布置好后进行下列步骤

ros下使用yolov5

创建一个新的功能包,包含下列库:

geometry_msgs
 rospy
 sensor_msgs
 std_msgs

将github中yolov5下的文件复制到scripts文件夹中,并更具上一篇博客修改,同时创建一个接受相机信息的程序,命名为video_detect.py:

#! /home/hc/anaconda3/envs/yolov5/bin/python3
# -*- coding: utf-8 -*-

import cv2
import mydetect
import rospy
import numpy as np
from sensor_msgs.msg import Image

import sys
sys.path.remove('/opt/ros/melodic/lib/python2.7/dist-packages')
import ctypes
libgcc_s = ctypes.CDLL('libgcc_s.so.1')

from cv_bridge import CvBridge

class yolo_detect():
    def __init__(self):
        self.a = mydetect.detectapi(weights = '/home/hc/my_ws/src/my_yolo/scripts/best.pt')
        im_sub = rospy.Subscriber('/usb_cam/image_raw', Image, self.detectimg)
        self.img_pub = rospy.Publisher('/yolov5/detect' , Image, queue_size = 1)
        self.bridge = CvBridge() #OpenCV与ROS的消息转换类

    def detectimg(self, img):
        frame = self.bridge.imgmsg_to_cv2(img, desired_encoding='bgr8')
        result, names = self.a.detect([frame])
        image_detect = result[0][0]
        print(result[0][1])
        self.img_pub.publish(self.bridge.cv2_to_imgmsg(image_detect, "bgr8"))
        

            

        
if __name__ == '__main__':
    rospy.init_node("yolo_detect")
    rospy.loginfo("yolo_detect node started")
    yolo_detect()
    rospy.spin()

# while True:
#     rec, img = cap.read()
#     result, names = a.detect([img])
#     img = result[0][0]
#     '''
#     for cls,(x1,y1,x2,y2),conf in result[0][1]: #第一张图片的处理结果标签。
#         print(cls,x1,y1,x2,y2,conf)
#         cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0))
#         cv2.putText(img,names[cls],(x1,y1-20),cv2.FONT_HERSHEY_DUPLEX,1.5,(255,0,0))
#     '''
#     cv2.imshow("vedio", img)
#     if cv2.waitKey(1)==ord('q'):
#         break

写的有点潦草,哈哈。
其中的import mydetect是我根据上一篇博客中detect.py文件修改成的。
想要修改权重直接改其中的weights路径即可。
先运行usb_cam中的launch文件,再运行:

rosrun 你的功能包名字 video_detect.py

之后打开rqt中的image_view再添加/yolov5/detect这个话题
就可以直接中看到yolo检测后的图片


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐