使用VVAS开发软件应用

描述

本文作者:AMD 工程师 Chen Shaoyi

Vitis 视频分析 SDK 是在 AMD 平台上构建 AI 驱动的智能视频分析解决方案的完整软件栈。它从 USB/MIPI 摄像头、视频文件或者 RTSP 流中获取输入,并使用 Vitis AI 实现各种基于人工智能的应用,如智能城市、行人检测、健康监测、智慧零售、缺陷检测等等。

对于开发者,VVAS 以基础插件、软件加速库的形式提供了一个框架,并为用户开发自己的插件以控制定制的硬件加速器提供了简化接口。有了这个框架,用户可以轻松地将他们的定制加速器/内核集成到 Vitis Video Analytics SDK 中。它建立在 XRT、Vitis 和 Vitis AI 之上,并对这些复杂的接口进行了抽象化,使开发人员更容易构建视频分析应用。

Video

用户通过 Core API 可以完成软硬件的调度。这四个 API 是:

xlnx_kernel_init()

xlnx_kernel_deinit()

xlnx_kernel_start()

xlnx_kernel_done()

我们首先介绍如何将软件应用集合到 VVAS 框架中。软件应用指的是只在 CPU 上执行,不使用 FPGA 部分的自定义插件。我们以 smartcam 应用中的 AI Rendering 插件作为例子。相关代码可以从参考链接中找到。

Video

AI Rendering 插件的主要功能是绘制检测到的物体。当 DPU 推理结果(如检测到的人脸的坐标)传递给 AI Rendering 插件后,该插件负责在原始帧中的物体周围绘制边界框。

xlnx_kernel_init() API 只在插件初始化的时候被 VVAS 调用一次。软件应用可以在这个函数中执行一次性初始化操作。

Video

xlnx_kernel_start() API 在处理输入缓冲区中的每个帧调用这个 API,以便进一步处理。软件应用可以执行每帧操作,如更新状态机,读/写 IP 的寄存器,然后指示 kernel 处理输入。

Video

xlnx_kernel_done() VVAS 基础插件会调用这个 API 来确认 kernel 是否已经完成处理缓冲区中的帧。加速应用可以在这个函数中实现逻辑,以通过这个 API 了解 kernel 的状态。

Video

xlnx_kernel_deinit() 这个 API 在 kernel 结束运行时被 VVAS 基础插件调用。加速应用必须执行任何清理、去初始化任务,如释放私有句柄和内部内存分配。

Video

以上代码编译后成为 vvas 插件的一部分,并放置在 /opt/xilinx/kv260-smartcam/lib/ 目录下。

Video

在 smartcam 的 GStreamer 应用中,调用 drawresult 的相关代码为:

Video


其中 drawresult.json 中需要指明使用的库文件名为 libvvas_airender.so:

Video

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分