Qualcomm Robotics RB5 平台软件用户指南(10)

150 篇文章 7 订阅
25 篇文章 0 订阅


5 配置 AI/ML 模块

TensorFlow Lite(v2.x)是平台源代码的一部分,用于在高通平台中执行模型,支持一系列算子和应用程序开发测试。有关更多详细信息,请参阅https://www.tensorflow.org/lite/ 。

TensorFlow Lite 支持 NNAPI 委托将图形处理卸载到 DSP/GPU。目前,高通已停止支持 NNAPI 卸载模型以在 DSP/GPU 上执行。模型只能在 CPU 上执行。 NNAPI delegate 基于 Android NNAPI v1.2,支持 Android NN API 29 之前的所有操作。

TensorFlow Lite 支持多模型并发。但是,多模型应在可用的 CPU 上执行,因为不再支持委派。

5.1 使用标签图像测试 TensorFlow Lite

  1. Run adb shell mkdir /data/tf 。
  2. 对于 Linux Ubuntu,
    获取模型和标签文件use wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip
    • 对于嵌入式 Linux:

      笔记
      由于取消了加速器支持,该模型在 CPU 上执行。

  3. Run 解压mobilenet_v1_224_android_quant_2017_11_08.zip
  4. Run adb push mobilenet_quant_v1_224.tflite /data/tf/ 。
  5. Run adb push labels.txt /data/tf/。
  6. 运行获取示例图像use wget:https://github.com/tensorflow/tensorflow/raw/master/tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp。
  7. Run adb push grace_hopper.bmp /data/tf/
  8. Run adb shell
  9. Go to /data/tf/: run cd /data/tf/
  10. 运行命令label_image -a 1 -m mobilenet_quant_v1_224.tflite -c 10 -l labels.txt。

5.1.1 在标签图像中设置硬件加速、多个模型及其优先级

  1. 要建模,请使用-m <list of model names comma separated m1, m2,…>
  2. 要运行多次迭代,请使用-c <# of iterations>
  3. 对于 Android 神经网络 API (NNAPI),请使用-a 1(模型在 CPU 上执行)。
  4. 要标记文件,请使用-l <label file, for multiple models, use it as separated comma l1,l2,… >
  5. 要测试图像,请使用-i .
  6. 要使用多线程 CPU arch,请使用-t
  7. 对于Hexagon delegate,,使用-j 1
  8. 要设置推理速率限制,请使用-J <与模型一对一映射的每个模型的推理速率,即 30,15 表示模型每秒推理 30 次 m1,> 表示每秒推理 15 次m2。
  9. 要在不同的委托上运行模型,请使用-A<逗号分隔的与模型一对一映射>。
    • 0→默认CPU
    • 1 → NNAPI 委托
  10. 要检查Op特定委托或 CPU 上的运行情况,请使用 profiling -p 1。
  11. 要获取有关模型的完整详细信息,请使用-v 1。

5.2 使用基准测试应用程序测试 TensorFlow Lite

要使用基准测试应用程序测试 TensorFlow Lite,请使用以下命令:

benchmark_model --graph=mv1_1.0_224_quant.tflite --enable_op_profiling=true --use_nnapi=true --num_threads=4

在这里插入图片描述
在这里插入图片描述

5.3 安装 GStreamer 插件

  1. 启用 Qualcomm 神经处理 SDK 发行版功能。

    • 添加qti-snpe到DISTRO_FEATURES_append发行版配置文件中的列表。
    • 配置文件: poky/meta-qti-bsp/conf/distro/.conf
    • 配置:DISTRO_FEATURES_append = " qti-snpe"
  2. 在工作区中添加 Qualcomm 神经处理 SDK 包。

    • 下载Qualcomm神经处理SDK包并解压。
    • 去poky/meta-qti-ml-prop/recipes/snpe-sdk/。
    • 在此目录下创建一个文件夹Files 。
    • 将解压后的 Qualcomm 神经处理 SDK 包文件夹复制到 poky/meta-qti-ml-prop/recipes/snpe-sdk/files/.
    • 将复制的文件夹名称重命名为snpe。

    例如,如果 Qualcomm 神经处理 SDK 文件夹名称为 snpe-x.y.z,请将其重命名为snpe。

    最终的目录结构应该类似于 poky/meta-qti-ml-prop/recipes/snpe-sdk/files/snpe/.

  3. 重建映像并将映像刷新到设备。

5.4 测试高通神经处理SDK

要测试 Qualcomm 神经处理 SDK,请执行以下操作:

  1. 如果不存在,则将库和二进制文件推送到设备上:

    • 将lib\aarch64-oe-linux-gcc9.3下的所有aarch64库推送到 /usr/lib/ 。
    • 将 DSP 库推lib\dsp送到/usr/lib/rfsa/adsp/.
    • 将bin\aarch64-oe-linux-gcc9.3下的所有二进制文件推送到 /usr/bin/.
    • 设置chmod 755所需二进制文件的权限。
    • 创建一个symlink:ln-s lib lib64来自root ‘/’.

    qtimlsnpe如果插件已构建并安装,则不需要此步骤。有关安装的更多信息qtimlsnpe,请参阅安装 GStreamer 插件。

  2. 使用以下命令验证 Qualcomm 神经处理 SDK 运行时。

snpe-platform-validator --runtime all

预期输出表明 SNPE DSP 运行时已准备好使用。
- PF_VALIDATOR:DEBUG:启动计算器测试
- PF_VALIDATOR:调试:已成功加载 DSP 库 - ‘libcalculator_domains.so’。设置指针。
- PF_VALIDATOR: DEBUG: 执行求和函数成功

运行时应满足以下 DSP 先决条件。

- PF_VALIDATOR:调试:调用PlatformValidator->setRuntime
- PF_VALIDATOR:DEBUG:CPU 端验证已通过。
  1. 使用以下命令在 Qualcomm 神经处理 SDK 上运行模型。

    snpe-net-run
              --container <full path to model > --input_list <target_raw_list.txt>
              --perf_profile balanced --use_dsp
    

有关如何将模型转换为 Qualcomm 神经处理 SDK DLC 格式并生成输入图像的更多信息,请参阅https://developer.qualcomm.com/。

5.5 添加GST插件以支持张量输入和输出

您可以添加 ML 插件来支持通用张量输入和张量输出。解耦预处理和后处理是单独的 GST 组件。因此,您可以在推理后运行自定义后处理。您还可以在单​​独的 GST 插件或 docker 应用程序中对其进行配置。

要添加 GST 插件以支持张量,请执行以下操作:

  1. 设置 adb root 和 adb shell。
  2. 将模型和标签文件推送到设备上。这些模型可以从 TensorFlow Lite 网页下载。
adb push  detect.tflite /data/ 
adb push detection.labels /data/
adb push mobilenet_v2_1.0_224_quant.tflite /data/
adb push classification.labels /data/
adb push dv3_argmax_int32.tflite /data/
adb push segmentation.labels /data/
  1. Weston 必须为显示用例运行。有关详细信息,请参阅验证 Weston 。

5.6 物体检测用例

  • 描述了以下用例:

    • 单摄像头流:1080p,带 AI 推理。
    • 单文件流:720p,带 AI 推理。
  • TensorFlow Lite:执行用例的步骤

    • 显示(变体 1):使用qtioverlay插件应用边界框覆盖。

      • 相机来源:

        • Linux Ubuntu:

          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! text/x-raw ! queue ! metamux.
          
        • 嵌入式Linux:

          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! text/x-raw ! queue ! metamux.
          
      • 文件来源:

        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/Draw_720p_180s_24FPS.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! text/x-raw ! queue ! metamux.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/Draw_720p_180s_24FPS.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! text/x-raw ! queue ! metamux.
          
    • 显示(变体 2):使用qtivcomposer插件将原始帧与边界框蒙版混合。

      • 相机来源:
        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! video/x-raw,format=BGRA,width=640,height=360 ! queue ! mixer.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! video/x-raw,format=BGRA,width=640,height=360 ! queue ! mixer.
          
      • 文件来源:
        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/Draw_720p_180s_24FPS.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! video/x-raw,format=BGRA,width=640,height=360 ! queue ! mixer.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/Draw_720p_180s_24FPS.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! video/x-raw,format=BGRA,width=640,height=360 ! queue ! mixer.
          
    • 编码(变体 1):使用qtioverlay插件应用边界框覆盖。

      • 相机来源:
        gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay ! queue ! qtic2venc target-bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! text/x-raw ! queue ! metamux.
        
      • 文件来源:
        gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/ Draw_720p_180s_24FPS.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay ! queue ! qtic2venc target-bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/ yolov5m.labels ! text/x-raw ! queue ! metamux.
        
    • 编码(变体 2):使用qtivcomposer插件将原始帧与边界框蒙版混合。

      • 相机来源:
        gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\ (memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! qtic2venc target- bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320-
        int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! video/x- raw,format=BGRA,width=640,height=360 ! queue ! mixer.
        
      • 文件来源:
        gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/ Draw_720p_180s_24FPS.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! qtic2venc target- bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimltflite delegate=hexagon model=/data/yolov5m-320x320- int8.tflite ! queue ! qtimlvdetection threshold=75.0 results=10 module=yolov5m labels=/data/yolov5m.labels ! video/x- raw,format=BGRA,width=640,height=360 ! queue ! mixer.
        
  • Qualcomm 神经处理 SDK:执行用例的步骤

    • 显示(变体 1):使用qtioverlay插件应用检测叠加。
      • 相机来源:
        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay text-font-size=24 ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! text/x-raw ! queue ! metamux.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay text-font-size=24 ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! text/x-raw ! queue ! metamux.
          
      • 文件来源:
        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/draw.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay text-font-size=24 ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! text/x-raw ! queue ! metamux.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/draw.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay text-font-size=24 ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! text/x-raw ! queue ! metamux.
          
    • 显示(变体 2):使用qtivcomposer插件将原始帧与检测掩模混合。
      • 相机来源:
        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! video/x-raw,width=640,height=360 ! queue ! mixer.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=false fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! video/x-raw,width=640,height=360 ! queue ! mixer.
          
      • 文件来源:
        • Linux Ubuntu:
          export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/draw.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! video/x-raw,width=640,height=360 ! queue ! mixer.
          
        • 嵌入式Linux:
          export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/draw.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! waylandsink sync=true fullscreen=true split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! video/x-raw,width=640,height=360 ! queue ! mixer.
          
    • 编码(变体 1):使用qtioverlay插件应用检测覆盖。
      • 相机来源:
        gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay text-font-size=24 ! queue ! qtic2venc target-bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! text/x-raw ! queue ! metamux.
        
      • 文件来源:
        gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/draw.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtimetamux name=metamux ! queue ! qtioverlay text-font-size=24 ! queue ! qtic2venc target-bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! text/x-raw ! queue ! metamux.
        
    • 编码(变体 2):使用qtivcomposer插件将原始帧与检测掩模混合。
      • 相机来源:
        gst-launch-1.0 -e --gst-debug=2 qtiqmmfsrc name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! qtic2venc target-bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! video/x-raw,width=640,height=360 ! queue ! mixer.
        
      • 文件来源:
        gst-launch-1.0 -e --gst-debug=2 filesrc location=/data/draw.mp4 ! qtdemux ! queue ! h264parse ! qtic2vdec ! queue ! tee name=split ! queue ! qtivcomposer name=mixer sink_1::dimensions="<1920,1080>" ! queue ! qtic2venc target-bitrate=6000000 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/data/video.mp4 split. ! queue ! qtimlvconverter ! queue ! qtimlsnpe delegate=dsp model=/data/yolov5s_relu_finetune_quantized_cle_bc.dlc layers="<Conv_139, Conv_140, Conv_141>" ! queue ! qtimlvdetection threshold=90.0 results=10 module=yolov5s labels=/data/yolov5s.labels ! video/x-raw,width=640,height=360 ! queue ! mixer.
        
  • 验证方法

    • 当应用程序收到 CTRL+ C并成功终止命令行工具时,会将 .mp4 文件保存到存储中。
    • 要验证 AI 处理,请检查显示屏上运行的视频流。物体(例如人)周围应该有可见的边界框。
  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Robotics Toolbox创建ur5机械臂模型,您需要遵循以下步骤: 1. 安装MATLAB Robotics Toolbox。 2. 下载Universal Robots URDF文件。 3. 将URDF文件导入MATLAB中并使用robotics.URDF类读取。 4. 使用robotics.RigidBodyTree类创建机器人模型。 5. 添加所有关节和链接。 6. 定义机器人末端执行器(End Effector)。 7. 设置机器人的关节角度和末端执行器位置。 这里是一个示例代码,可以帮助您进一步了解如何使用Robotics Toolbox创建ur5机械臂模型: ``` % 安装Robotics Toolbox % 下载URDF文件 urdf = 'ur5.urdf'; ur5 = robotics.URDF(urdf); % 创建RigidBodyTree对象 robot = robotics.RigidBodyTree; % 添加链接 link1 = robotics.RigidBody('link1'); joint1 = robotics.Joint('joint1', 'revolute'); setFixedTransform(joint1, trvec2tform([0 0 0])); joint1.JointAxis = [0 0 1]; link1.Joint = joint1; addBody(robot, link1, 'base'); link2 = robotics.RigidBody('link2'); joint2 = robotics.Joint('joint2', 'revolute'); setFixedTransform(joint2, trvec2tform([0 0 0.163])); joint2.JointAxis = [1 0 0]; link2.Joint = joint2; addBody(robot, link2, 'link1'); % ... 添加更多链接和关节 % 添加末端执行器 eeBody = robotics.RigidBody('EndEffector'); setFixedTransform(eeBody.Joint, trvec2tform([0 0 0.09])); addBody(robot, eeBody, 'tool0'); % 设置关节角度和末端执行器位置 q = zeros(1,6); eePos = [0.4 0.1 0.3]; eeOri = [pi/2 0 pi/2]; tform = eul2tform(eeOri); tform(1:3, 4) = eePos; q = ik(eeBody, tform, [1 1 1 0 0 0]); show(robot, q); ``` 这个示例代码将创建一个ur5机械臂模型,并设置关节角度和末端执行器位置。您可以通过修改关节角度和末端执行器位置来控制机器人的运动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值