本文作者:AMD 工程师 Chen Shaoyi
Vitis 视频分析 SDK 是在 AMD 平台上构建 AI 驱动的智能视频分析解决方案的完整软件栈。它从 USB/MIPI 摄像头、视频文件或者 RTSP 流中获取输入,并使用 Vitis AI 实现各种基于人工智能的应用,如智能城市、行人检测、健康监测、智慧零售、缺陷检测等等。
对于开发者,VVAS 以基础插件、软件加速库的形式提供了一个框架,并为用户开发自己的插件以控制定制的硬件加速器提供了简化接口。有了这个框架,用户可以轻松地将他们的定制加速器/内核集成到 Vitis Video Analytics SDK 中。它建立在 XRT、Vitis 和 Vitis AI 之上,并对这些复杂的接口进行了抽象化,使开发人员更容易构建视频分析应用。
用户通过 Core API 可以完成软硬件的调度。这四个 API 是:
xlnx_kernel_init()
xlnx_kernel_deinit()
xlnx_kernel_start()
xlnx_kernel_done()
我们首先介绍如何将软件应用集合到 VVAS 框架中。软件应用指的是只在 CPU 上执行,不使用 FPGA 部分的自定义插件。我们以 smartcam 应用中的 AI Rendering 插件作为例子。相关代码可以从参考链接中找到。
AI Rendering 插件的主要功能是绘制检测到的物体。当 DPU 推理结果(如检测到的人脸的坐标)传递给 AI Rendering 插件后,该插件负责在原始帧中的物体周围绘制边界框。
xlnx_kernel_init() API 只在插件初始化的时候被 VVAS 调用一次。软件应用可以在这个函数中执行一次性初始化操作。
xlnx_kernel_start() API 在处理输入缓冲区中的每个帧调用这个 API,以便进一步处理。软件应用可以执行每帧操作,如更新状态机,读/写 IP 的寄存器,然后指示 kernel 处理输入。
xlnx_kernel_done() VVAS 基础插件会调用这个 API 来确认 kernel 是否已经完成处理缓冲区中的帧。加速应用可以在这个函数中实现逻辑,以通过这个 API 了解 kernel 的状态。
xlnx_kernel_deinit() 这个 API 在 kernel 结束运行时被 VVAS 基础插件调用。加速应用必须执行任何清理、去初始化任务,如释放私有句柄和内部内存分配。
以上代码编译后成为 vvas 插件的一部分,并放置在 /opt/xilinx/kv260-smartcam/lib/ 目录下。
在 smartcam 的 GStreamer 应用中,调用 drawresult 的相关代码为:
其中 drawresult.json 中需要指明使用的库文件名为 libvvas_airender.so:
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !