darknet_ros加播放原视频同时进行

第一代代码(实验中)

Publisher部分:

输入:本地avi视频

输出:话题/camera/image_raw、视频颜色空间为BGR格式,消息类型ROS格式

Subscriber部分_1(yolo部分)

输入:/camera/image_raw,输入视频颜色空间BGR颜色空间,消息类型ROS格式。若输入视频为RGB格式则darknet_ros视频将转化为BGR格式;反之,若输入视频为BGR格式则darknet_ros视频将转化为RGB格式

输出:/darknet_ros/bounding_boxes

Subscriber部分_2(视频处理部分)

输入:/camera/image_raw,输入视频颜色空间BGR颜色空间,消息类型ROS格式。

输出:输出RGB颜色空间的视频,消息格式为OpenCv

Subscriber部分代码:

#!/usr/bin/env python

#-*- coding: UTF-8 -*-

#1.编译器声明和2.编码格式声明

#1:为了防止用户没有将python安装在默认的/usr/bin目录,系统会先从env(系统环境变量)里查找python的安装路径,再调用对应路径下的解析器完成操作,也可以指定python3

#2:Python.X 源码文件默认使用utf-8编码,可以正常解析中文,一般而言,都会声明为utf-8编码

import rospy

from sensor_msgs.msg import Image

from std_msgs.msg import Int8

from cv_bridge import CvBridge

import cv2

from darknet_ros_msgs.msg import BoundingBoxes

def image_callback(msg):

    # ROS图像消息转换为OpenCV图像格式

    bridge = CvBridge()

   

    cv_image = bridge.imgmsg_to_cv2(msg, "rgb8")

    print("成功输出视频")

    # 显示图像

    cv2.imshow("Video", cv_image)

    cv2.waitKey(1)

def side_flag_callback(data):

    my_class = []

    for box in data.bounding_boxes:

        my_class.append(box.Class)   #box对象中获取Class属性的值,并将其添加到名为my_class的列表中。

        if box.Class == "stop":

            print("Detected a stop at position ({}, {})".format(box.xmin, box.ymin))

           

        if box.Class == "speed10":

            print("Detected a speed10 at position ({}, {})".format(box.xmin, box.ymin))

           

        if box.Class == "speed_limit":

            print("Detected a speed_limit at position ({}, {})".format(box.xmin, box.ymin))

    print(my_class)

    #rospy.set_param('/my_param', my_class)

def video_show():

    rospy.Subscriber("/camera/image_raw", Image, image_callback,queue_size=10)

    side_flag_sub = rospy.Subscriber("/darknet_ros/bounding_boxes", BoundingBoxes, side_flag_callback)

    line_judgment_pub = rospy.Publisher("/line_judgment", Int8, queue_size=1)

    rate = rospy.Rate(30)  # 消息发布频率

   

    while not rospy.is_shutdown():#只要ROS节点没有被要求关闭,就一直执行循环内的代码。

        # 根据业务逻辑进行判断,并发布相应的消息

        line_judgment = 0  # 假设判断结果为0

        line_judgment_pub.publish(line_judgment)

        rate.sleep()  

       

if __name__== '__main__':

    rospy.init_node("video_publisher")

    video_show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值