当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]构建能够自主跟踪物体的摄像头系统通常意味着需要分别编写用于 AI 推理、硬件加速和消息传递的自定义代码,再将它们拼接在一起。这种架构容易出现脆弱性,难以搭建、调优和维护。高通智能多媒体(QIM)SDK 通过将设备端的 AI 推理、硬件加速视频处理甚至下游消息传递暴露为原生 GStreamer 插件,使整个感知流水线可表达为单一、声明式的标准元素图,而非定制化的集成代码。本项目采用这一方法来解决一个常见问题:在无需人工干预的情况下,可靠地保持移动目标在画面中,通过 QIM SDK 的 GStreamer 组件在设备端运行推理,并将检测结果转换为相机的实际运动轨迹,所有操作都集成在一个可组合的管道中完成。

构建能够自主跟踪物体的摄像头系统通常意味着需要分别编写用于 AI 推理、硬件加速和消息传递的自定义代码,再将它们拼接在一起。这种架构容易出现脆弱性,难以搭建、调优和维护。高通智能多媒体(QIM)SDK 通过将设备端的 AI 推理、硬件加速视频处理甚至下游消息传递暴露为原生 GStreamer 插件,使整个感知流水线可表达为单一、声明式的标准元素图,而非定制化的集成代码。本项目采用这一方法来解决一个常见问题:在无需人工干预的情况下,可靠地保持移动目标在画面中,通过 QIM SDK 的 GStreamer 组件在设备端运行推理,并将检测结果转换为相机的实际运动轨迹,所有操作都集成在一个可组合的管道中完成。

硬件

我们正在使用搭载专用NPU的高通Dragonwing IQ-9075 EVK设备进行本地AI处理(最高可达100 TOPS AI性能)。

我们采用reCamera Gimbal 2002w,该设备配备双轴电机支架,由两个无刷电机驱动,支持360度横移和180度俯仰运动。reCamera可通过RTSP、HTTP、WebSocket以及TCP/UDP等标准协议传输图像数据。此外,它还支持MQTT协议,可与其他物联网设备连接。

设置Dragonwing IQ-9075 EVK

我们使用高通Launcher将Ubuntu 24.04系统刷入IQ-9075 EVK设备。

高通Launcher支持网络设置配置及SSH访问功能。

以下是QIM SDK的安装步骤。

1.添加高通PPA

2.安装 GStreamer 核心组件

3.安装高通硬件加速的 GStreamer 插件

4.安装AI运行时和推理组件

安装后,请确认已安装适用于高通的GStreamer插件。

设置reCamera云台

请参考reCamera云台入门指南,了解组装和设置方法。设备出厂时已预装操作系统,并可通过reCamera的IP地址访问Node-RED仪表板。Node-RED是一个基于流程的可视化编程环境,旨在简化硬件、API和网络服务的集成。我们已将reCamera从默认的接入点模式切换为通过仪表板的网络设置加入IQ-9075网络。

数据采集

开始之前,我们先在 Edge Impulse Studio 上注册了一个账户并创建了一个新项目。接着,我们进入数据采集页面,点击“连接设备”链接,选择“连接到电脑”以使用笔记本电脑摄像头。通过这一设置,我们在不同距离和光照条件下采集了 1,222 张图像,随后在“标注队列”标签页中对这些图像进行了标注。

模型训练

在模型开发中,我们需要创建一个脉冲(Impulse),即集成图像处理与机器学习模型的自定义流程。请前往“脉冲设计 > 创建脉冲”页面,选择“添加处理模块”,并选择“图像预处理和归一化图像数据”。在同一页面上,选择“添加学习模块”,并选择“目标检测(图像)”。我们使用320x320的图像尺寸。然后点击“保存脉冲”按钮。

对于特征生成,请进入“脉冲 > 图像”页面,将颜色深度参数设置为RGB,然后点击“保存参数”按钮,该按钮会跳转到另一个页面,在那里点击“生成特征”按钮即可。

要训练模型,请前往 Impulse > ObjectDetection 页面。下方将显示我们选择的对象检测设置。

在高级训练设置中,我们选择了基础的空间和颜色空间增强功能。

我们选用了最新的 YOLO-Pro 模型,该模型能够有效检测不同尺寸的手部,因为手与摄像头的距离各不相同,并且可在 IQ-9075 的 NPU 上高效运行。点击“保存并训练”按钮开始训练。

训练完成后,训练性能结果如下所示。

模型部署

为了在 IQ-9075 的 NPU 上运行推理,我们选择了 Qualcomm IM SDK GStreamer 插件(AARCH64,QNN)作为部署目标。

我们为模型优化选择了量化(int8)选项。

点击“构建”按钮,以编译并下载 Edge Impulse GStreamer 插件库包。

应用开发

我们替换掉了 reCamera 控制面板上默认的 Node-RED 流,将设备初始化、视频流传输和云台控制整合到一个图中。启动时,注入节点会执行一次 LED 初始化,将车载 LED 设置为已知的初始状态。摄像头节点以1280x720分辨率和30fps的帧率捕获视频,并将数据传输至专用的流节点,该节点通过RTSP协议对外发布视频流供外部设备使用。同时,一个MQTT订阅节点监听“cmd”主题,接收由IQ-9075 EVK上运行的跟踪系统发布的偏航角(yaw)和俯仰角(pitch)指令。

每个接收到的指令首先会经过一个验证函数节点,该节点在允许指令影响云台运动前检查消息的有效性。下方是所使用的验证代码,可直接添加到编辑对话框中。

经验证后,指令被分为两个分支:其中一个分支将偏航角和俯仰角值直接发送至“设置电机俯仰/偏航”节点,用于物理调整云台位置;另一个分支则触发一个250毫秒的脉冲,使车载LED灯闪烁,作为视觉心跳信号,确认已成功接收并执行有效指令。完整流程如下所示。

请将下载的Edge Impulse GStreamer插件库包直接解压到IQ-9075 EVK的应用程序目录中。该包包含lib文件夹内的共享库以及应用程序运行所需的config.json配置文件。

我们实现了一个GStreamer管道,用于通过RTSP拉取视频,以硬件方式解码,裁剪并缩小至320×320的方形尺寸,运行Edge Impulse的手部检测模型,绘制检测结果,并将结果重新编码为JPEG格式,供任何访问appsink的应用程序使用。GStreamer管道的描述如下。

GStreamer MQTT元素独立于该链路运行,每当接收到应用程序发出的信号时,便会独立发布消息。高层管道结构在下方可视化图中展示。

运行在高通IQ-9075上的跟踪系统由一个Python脚本实现,该脚本结合了高通IM SDK插件和Edge Impulse自身的GStreamer组件来构建GStreamer管道。edgeimpulsevideoinfer插件执行推理任务,利用IQ-9075的NPU进行快速、硬件加速的检测。检测结果通过edgeimpulseoverlay插件叠加到视频上,并以结构化JSON消息的形式通过管道自身的GStreamer总线传输,从而避免了对原始推理缓冲区进行手动解析。

GStreamer总线处理器读取这些消息,根据置信度过滤检测结果,并选择距离先前跟踪位置最近的手,以确保系统即使在帧中出现多个手时仍能锁定单一目标。所选目标相对于帧中心的像素偏移量经过平滑处理,并利用相机的视野角度转换为角度误差,随后通过独立的PID控制器对偏航和俯仰轴进行控制,从而实现平稳、无振荡的云台运动。这些角度指令通过IM SDK的qtimsgpub插件,使用MQTT协议发布回reCamera,从而完成检测与执行之间的闭环。

除了驱动云台外,标注后的视频还作为实时MJPEG流通过HTTP提供,使用户能够通过浏览器实时查看检测结果。完整的追踪器代码如下所示。

实时演示

实时演示展示了应用程序实时追踪手部的动作。尽管帧中仍可见一定程度的振荡,表明PID增益需要进一步调优,但系统在当前状态下仍可正常使用。

结论

该项目表明,将NPU加速的推理与基于PID的控制回路结合,可实现平滑、实时的重相机云台跟踪。主要优势包括:通过可复用的GStreamer组件加快开发速度、设备端NPU推理降低延迟,以及易于维护且便于扩展的流水线结构。未来的发展方向包括:利用Edge Impulse输出中未使用的物体追踪字段实现持续多目标跟踪、将流水线重新适配用于其他检测类别,以及增加更多执行器以支持更复杂的相机行为。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭