Qualcomm Robotics RB5 平台软件用户指南(10)
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
- Run adb shell mkdir /data/tf 。
- 对于 Linux Ubuntu,
获取模型和标签文件use wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip- 对于嵌入式 Linux:
笔记
由于取消了加速器支持,该模型在 CPU 上执行。
- 对于嵌入式 Linux:
- Run 解压mobilenet_v1_224_android_quant_2017_11_08.zip
- Run adb push mobilenet_quant_v1_224.tflite /data/tf/ 。
- Run adb push labels.txt /data/tf/。
- 运行获取示例图像use wget:https://github.com/tensorflow/tensorflow/raw/master/tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp。
- Run adb push grace_hopper.bmp /data/tf/
- Run adb shell
- Go to /data/tf/: run cd /data/tf/
- 运行命令label_image -a 1 -m mobilenet_quant_v1_224.tflite -c 10 -l labels.txt。
5.1.1 在标签图像中设置硬件加速、多个模型及其优先级
- 要建模,请使用-m <list of model names comma separated m1, m2,…>
- 要运行多次迭代,请使用-c <# of iterations>
- 对于 Android 神经网络 API (NNAPI),请使用-a 1(模型在 CPU 上执行)。
- 要标记文件,请使用-l <label file, for multiple models, use it as separated comma l1,l2,… >
- 要测试图像,请使用-i .
- 要使用多线程 CPU arch,请使用-t
- 对于Hexagon delegate,,使用-j 1
- 要设置推理速率限制,请使用-J <与模型一对一映射的每个模型的推理速率,即 30,15 表示模型每秒推理 30 次 m1,> 表示每秒推理 15 次m2。
- 要在不同的委托上运行模型,请使用-A<逗号分隔的与模型一对一映射>。
- 0→默认CPU
- 1 → NNAPI 委托
- 要检查Op特定委托或 CPU 上的运行情况,请使用 profiling -p 1。
- 要获取有关模型的完整详细信息,请使用-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 插件
-
启用 Qualcomm 神经处理 SDK 发行版功能。
- 添加qti-snpe到DISTRO_FEATURES_append发行版配置文件中的列表。
- 配置文件: poky/meta-qti-bsp/conf/distro/.conf
- 配置:DISTRO_FEATURES_append = " qti-snpe"
-
在工作区中添加 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/.
-
重建映像并将映像刷新到设备。
5.4 测试高通神经处理SDK
要测试 Qualcomm 神经处理 SDK,请执行以下操作:
-
如果不存在,则将库和二进制文件推送到设备上:
- 将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 插件。
-
使用以下命令验证 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 端验证已通过。
-
使用以下命令在 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 插件以支持张量,请执行以下操作:
- 设置 adb root 和 adb shell。
- 将模型和标签文件推送到设备上。这些模型可以从 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/
- 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.
- Linux Ubuntu:
-
-
显示(变体 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:
- 文件来源:
- 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.
- Linux Ubuntu:
- 相机来源:
-
编码(变体 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:
- 文件来源:
- 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.
- Linux Ubuntu:
- 相机来源:
- 显示(变体 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:
- 文件来源:
- 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.
- Linux Ubuntu:
- 相机来源:
- 编码(变体 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.
- 相机来源:
- 显示(变体 1):使用qtioverlay插件应用检测叠加。
-
验证方法
- 当应用程序收到 CTRL+ C并成功终止命令行工具时,会将 .mp4 文件保存到存储中。
- 要验证 AI 处理,请检查显示屏上运行的视频流。物体(例如人)周围应该有可见的边界框。