(2018年7月9日 航空航天和国防

OpenCV在VxWorks上实现边缘智能

作者:Ka Kay Achacoso

KaKay-photo

当风力涡轮机收集有关其周围环境的传感器数据,或海上石油钻井平台将其读数记录到其记录中,这些数据可以被分析为决策因素:发动机噪音的突然变化是否表明磨损?有没有飞向危险区域的飞行物?引擎设置是否适合当前天气模式?

为了做出这样的决定而需要处理的大量数据将淹没数据管道,而往返通信中的延迟可能意味着控制命令在到达预定目标时就过时了。通过将智能推向边缘,允许边缘设备分析数据并过滤流出的信息,一个网络化系统可以减轻其网络的负载,并产生更紧密的控制回路。

VxWorks,在许多控制器和边缘设备中都存在的安全的实时操作系统,通过其对OpenCV库的支持实现数据分析。OpenCV是一个专门面向计算机视觉的开源库。在VxWorks上,这些库基于c++。

OpenCV有几个计算机视觉模块。对象检测模块提供了OpenCV在VxWorks上的一个特别可视化的演示,所以我将使用这个模块作为示例。该模块使用基于Haar特征的级联分类器,通过一系列边缘和线模式来识别对象。Cascade Classifier最酷的地方是,我可以为该模块提供样本图像,并训练该模块识别目标物体。培训的结果是经过培训的可跨各种平台使用的级联XML文件。

1 objdetectdiagram

图1所示。OpenCV级联训练和目标检测过程。

人脸识别训练有素的级联XML文件样本很容易用于测试该功能。VxWorks上的OpenCV可以很容易地识别被USB摄像机捕捉到的各种人脸。一个有趣的项目是收集一只手的图像,并通过OpenCV级联训练工具来训练模块识别张开的手掌。更有趣的是,当我拿着相机要求拍下他们的手时,我从同事那里得到了怀疑的眼神。对于培训过程中的用户交互活动,我在Linux桌面中使用OpenCV级联培训工具,生成了用于打开手掌的级联XML文件。

在运行时,VxWorks应用程序打开XML文件,并将其提供给OpenCV模块来识别手。OpenCV 3.3版本包括一个基于检测的跟踪器,它使用了一个检测算法与一个更有效的跟踪算法的结合。如下面的示例代码所示,经过训练的级联XML文件用于创建检测器和跟踪程序,并将其组合为带有默认参数的基于检测的跟踪程序。检测器的方法process()和getObjects()给出了被检测对象的坐标。

向量<矩形>的手;简历:Ptr <简历:CascadeClassifier >级联;简历:Ptr < DetectionBasedTracker: IDetector > MainDetector;简历:Ptr < DetectionBasedTracker: IDetector >追踪;std::string cascadeHandFilename = "cascade-palm.xml";/*通过读取经过训练的级联XML文件来创建检测器。*/ Cascade = makePtr(cascadeHandFilename);MainDetector = makePtr(Cascade);级联= makePtr <简历:CascadeClassifier > (cascadeHandFilename);Tracker = makePtr(Cascade); DetectionBasedTracker::Parameters params; Detector(MainDetector, Tracker, params); /* After obtaining the grayscale image in GrayFrame, execute the object detection algorithm. */ Detector.process(GrayFrame); Detector.getObjects(Hands); /* Hands is now a vector of Rect objects indicating the locations of the detected hands. */

如果你安装了VxWorks,你可以在你的VxWorks source Build (VSB)项目3pp/OPENCV/ OPENCV -3.3.1/vxworks_examples下看到完整的源代码。

2 detected-hands

图2:使用OpenCV库,VxWorks从USB摄像头输入识别手掌。

虽然OpenCV非常关注计算机视觉,但它也包含一些矩阵库和傅立叶变换库,这些库可以在计算量大的通用应用程序中提高性能。这些库利用了多处理器功能。

风河公司继续投资于VxWorks平台,以实现与OpenCV等物联网(IoT)技术集成的安全设备。您可以找到关于VxWorks的更多信息在这里

以前的边缘计算开启未来
下一个VxWorks:过去和未来