更新时间:2023-09-07 GMT+08:00
分享

样例介绍

在创建工程时选择“vehicle_detection”工程模板将会创建视频车辆检测样例工程,该样例是一个视频类的ModelBox应用样例,通过读取视频,经过目标检测的模型得到视频中车辆的位置。该样例中“src”目录下预置了视频车辆检测的具体实现,它包含“flowunit”“graph”两个目录,分别代表功能单元和图。

在基于ModelBox框架的AI应用开发中,AI应用是由图构成的。其中,功能单元可以理解为一段相对独立的数据处理功能,所有功能单元编排连线后构成图,代表一个AI应用。图在ModelBox中的呈现形式为toml文件,在该样例中位于如下路径:

src/graph/vehicle_detection.toml
图1 AI应用样例

该toml文件代表的数据处理流程如下:

图2 数据处理流程

该图从上到下代表了对输入视频的每一步数据处理。“video_input”是功能单元接收的输入视频流,往下分别经过“videodemuxer”“videodecoder”功能单元,“videodecoder”功能单元输出“image”“image”经过前处理,包含“resize”“normalize”之后,送给模型(“vehicle_inference”是一个yolov3模型),模型将推理得到的bbox结果传入后续的后处理功能单元进行处理(vehicle_bbox_post),可得到最终的bbox框,将bbox框和“videodecoder”出来的“image”一同送入“draw_bbox”中,将绘制完bbox的image传入“videoencoder”,即得到带有检测框的视频流输出。

流程图中的各个功能单元的实现,一部分是直接使用ModelBox框架预置的功能单元,预置功能单元位于“/usr/local/lib64/”目录下,以二进制so文件的形式提供;另一部分是自己开发的功能单元,位于“src/flowunit”目录下。

图3 功能单元

每一个功能单元中即为该单元模块的实现代码,功能单元有三种类型,分别为“cpp”“python”“infer”,即c++功能单元、python功能单元以及推理功能单元。图4为一个c++功能单元的样例,Process函数为数据处理主函数。

图4 C++功能单元样例
分享:

    相关文档

    相关产品