开发你的第一个应用程序
Qualcomm® 智能多媒体 SDK (IM SDK) 是一组 GStreamer 插件,可让您在 Dragonwing 开发板的 GPU 上运行计算机视觉操作,并且可以创建完全在 GPU 和 NPU 上运行的 AI 管道,而无需回到 CPU(零拷贝)。比起在 OpenCV + TFLite 中实现 AI CV 管道,这样可以实现更高的吞吐率。
集成 IM SDK 的 GStreamer 管道
智能多媒体 SDK (IM SDK) 建立在强大的多媒体框架 GStreamer 之上。开发人员能够将视频和音频处理工作流定义为管道。使用 GStreamer,您可以在一个管道字符串中定义整个处理流程,而不需要手动编写捕获帧、尺寸调整、画面裁剪、运行推理和渲染输出等步骤。框架会自动处理执行、同步和数据流。
在 Qualcomm® 硬件上,IM SDK 通过全管道的无缝加速来进一步优化这种体验。图 像尺寸调整、画面裁剪和叠加渲染等任务由 GPU 承担,而推理操作则在 NPU 上执行。这种零拷贝架构确保数据流经在整个处理过程中无需CPU介入,从而实现实时性能并降低系统负载。
为实现这一目标,IM SDK 提供了专门的 GStreamer 插件:
qtivtransform:使用 GPU 加速色彩转换、画面裁剪和尺寸调整。
qtimltflite:在 NPU 上执行 TensorFlow Lite 模型。
通过集成这些插件,开发人员可以使用熟悉的 GStreamer 语法构建高性能多媒体应用程序,同时享受底层的硬件加速的性能。
设置 GStreamer 和 IM SDK
现在我们一起来使用 IM SDK 构建一些应用程序。
1️⃣安装 GStreamer、IM SDK 以及本例中需要的一些额外依赖项。在开发板上打开终端,或建立 SSH 会话,然后执行以下操作:
# Add the Qualcomm IoT PPA
sudo apt-add-repository -y ppa:ubuntu-qcom-iot/qcom-ppa
# Install GStreamer / IM SDK
sudo apt update
sudo apt install -y gstreamer1.0-tools gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-qcom-good gstreamer1.0-qcom-sample-apps
# Install Python bindings for GStreamer, and some build dependencies
sudo apt install -y v4l-utils libcairo2-dev pkg-config python3-dev libgirepository1.0-dev gir1.2-gstreamer-1.0
2️⃣克隆示例 repo,创建虚拟环境(venv),并安装其依赖项:
# Clone repo
git clone https://github.com/edgeimpulse/qc-ai-docs-examples-imsdk.git
cd qc-ai-docs-examples-imsdk/tutorial
# Create a new venv
python3 -m venv .venv
source .venv/bin/activate
# Install Python dependencies
pip3 install -r requirements.txt
3️⃣需要准备一个摄像头(魔方派 3内置)或一个 USB 网络摄像头。
如果您想使用 USB 网络摄像头:
查看设备 ID:
v4l2-ctl --list-devices
# msm_vidc_media (platform:aa00000.video-codec):
# /dev/media0
#
# msm_vidc_decoder (platform:msm_vidc_bus):
# /dev/video32
# /dev/video33
#
# C922 Pro Stream Webcam (usb-0000:01:00.0-2):
# /dev/video2 <-- So /dev/video2
# /dev/video3
# /dev/media3
4️⃣设置环境变量(我们将在示例中使用):
export IMSDK_VIDEO_SOURCE="v4l2src device=/dev/video2"
如果您使用的是 魔方派 3,并且想要使用内置摄像头:
export IMSDK_VIDEO_SOURCE="qtiqmmfsrc name=camsrc camera=0"