YOLOv5s的demo中如何使用USB摄像头开启1080p高清Web推流,Node级别拆分编写自己的launch

1. 卸载并重新装YOLOv5相关的Node(如果改乱了)

sudo apt remove -y tros-dnn-node tros-dnn-node-sample tros-hobot-usb-cam tros-hobot-codec
sudo apt update # 确保有地平线的源
sudo apt install -y tros-dnn-node* tros-hobot-usb-cam tros-hobot-codec

烧录镜像(如果有需要), 重启

2. 运行1次

source /opt/tros/setup.bash
export CAM_TYPE=usb

运行一小会, 打印一些帧率信息后, Ctrl+C结束

ros2 launch dnn_node_example dnn_node_example.launch.py dnn_example_config_file:=config/yolov5workconfig.json

3. 修改分辨率后运行1次, Ctrl+C结束

/opt/tros/share/dnn_node_example/launch/dnn_node_example.launch.py, 79-89行

# usb cam图片发布pkg
usb_node = IncludeLaunchDescription(
    PythonLaunchDescriptionSource(
        os.path.join(
            get_package_share_directory('hobot_usb_cam'),
            'launch/hobot_usb_cam.launch.py')),
    launch_arguments={
        'usb_image_width': '1920',
        'usb_image_height': '1080',
        'usb_video_device': LaunchConfiguration('device')
    }.items()
)

运行一小会, 打印一些帧率信息后, Ctrl+C结束

ros2 launch dnn_node_example dnn_node_example.launch.py dnn_example_config_file:=config/yolov5workconfig.json

4. 如果要将分辨率改回

/opt/tros/share/dnn_node_example/launch/dnn_node_example.launch.py, 79-89行

# usb cam图片发布pkg
usb_node = IncludeLaunchDescription(
    PythonLaunchDescriptionSource(
        os.path.join(
            get_package_share_directory('hobot_usb_cam'),
            'launch/hobot_usb_cam.launch.py')),
    launch_arguments={
        'usb_image_width': '640',
        'usb_image_height': '480',
        'usb_video_device': LaunchConfiguration('device')
    }.items()
)

Node拆解

usb_node

ros2 run hobot_usb_cam hobot_usb_cam \
--ros-args --log-level warn \
--ros-args -p zero_copy:=False \
--ros-args -p io_method:=mmap \
--ros-args -p video_device:=/dev/video8 \
--ros-args -p pixel_format:=mjpeg \
--ros-args -p image_height:=1080 \
--ros-args -p image_width:=1920

codec

ros2 run hobot_codec hobot_codec_republish \
--ros-args --log-level warn \
--ros-args -p in_format:=jpeg \
--ros-args -p out_format:=nv12 \
--ros-args -p channel:=1 \
--ros-args -p out_mode:=shared_mem \
--ros-args -p sub_topic:=image \
--ros-args -p pub_topic:=hbmem_img

hobot_dnn

ros2 run dnn_node_example example \
--ros-args --log-level warn \
--ros-args -p feed_type:=1 \
--ros-args -p dump_render_img:=0 \
--ros-args -p is_shared_mem_sub:=1 \
--ros-args -p config_file:=config/yolov5workconfig.json \
--ros-args -p msg_pub_topic_name:=yolov5_results

web

ros2 run websocket websocket \
--ros-args --log-level error \
--ros-args -p only_show_image:=False \
--ros-args -p image_topic:=image \
--ros-args -p image_type:=mjpeg \
--ros-args -p smart_topic:=yolov5_results

如何使用launch启动?

借着dnn_node的launch用一用

touch /opt/tros/share/dnn_node_example/launch/my.launch.py
vim /opt/tros/share/dnn_node_example/launch/my.launch.py

加入以下内容:

import os
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    # USB Camera Node
    usb_cam_node = Node(
        package='hobot_usb_cam',
        executable='hobot_usb_cam',
        name='usb_cam_node',
        output='screen',
        arguments=[
            '--ros-args', '--log-level', 'warn',
            '--ros-args', '-p', 'zero_copy:=False',
            '--ros-args', '-p', 'io_method:=mmap',
            '--ros-args', '-p', 'video_device:=/dev/video8',
            '--ros-args', '-p', 'pixel_format:=mjpeg',
            '--ros-args', '-p', 'image_height:=1080',
            '--ros-args', '-p', 'image_width:=1920'
        ]
    )

    # Codec Node
    codec_node = Node(
        package='hobot_codec',
        executable='hobot_codec_republish',
        name='codec_node',
        output='screen',
        arguments=[
            '--ros-args', '--log-level', 'warn',
            '--ros-args', '-p', 'in_format:=jpeg',
            '--ros-args', '-p', 'out_format:=nv12',
            '--ros-args', '-p', 'channel:=1',
            '--ros-args', '-p', 'out_mode:=shared_mem',
            '--ros-args', '-p', 'sub_topic:=image',
            '--ros-args', '-p', 'pub_topic:=hbmem_img'
        ]
    )

    # DNN Node
    dnn_node = Node(
        package='dnn_node_example',
        executable='example',
        name='dnn_node',
        output='screen',
        arguments=[
            '--ros-args', '--log-level', 'warn',
            '--ros-args', '-p', 'feed_type:=1',
            '--ros-args', '-p', 'dump_render_img:=0',
            '--ros-args', '-p', 'is_shared_mem_sub:=1',
            '--ros-args', '-p', 'config_file:=config/yolov5workconfig.json',
            '--ros-args', '-p', 'msg_pub_topic_name:=yolov5_results'
        ]
    )

    # Websocket Node
    websocket_node = Node(
        package='websocket',
        executable='websocket',
        name='websocket_node',
        output='screen',
        arguments=[
            '--ros-args', '--log-level', 'error',
            '--ros-args', '-p', 'only_show_image:=False',
            '--ros-args', '-p', 'image_topic:=image',
            '--ros-args', '-p', 'image_type:=mjpeg',
            '--ros-args', '-p', 'smart_topic:=yolov5_results'
        ]
    )

    return LaunchDescription([
        usb_cam_node,
        codec_node,
        dnn_node,
        websocket_node
    ])

使用以下命令启动即可:

source /opt/tros/setup.bash
ros2 launch dnn_node_example my.launch.py dnn_example_config_file:=config/yolov5workconfig.json

其他内容

摄像头相关测试, 尤其是确认摄像头支持的最大分辨率: https://developer.horizon.cc/forumDetail/226908961255990788
TROS跑YOLOv5: https://developer.horizon.cc/documents_tros/boxs/detection/yolo
TROS部署YOLOv5, 刷爆30fps: https://developer.horizon.cc/forumDetail/198685796998563332

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值