AI视觉处理代码结构

AI视觉处理代码结构概论导入模块自定义检测类执行当前例程结束当前例程主进程

概论

本节我们来大致介绍一下K230后续AI相关例程的通用的前置知识以及代码结构

image-20250206101556697

我们以最简单的人脸识别Face_detection为例

例程代码位于【源码汇总 / 07.Face / 01.face_detection】

注:下述代码是为了演示AIDemo的代码结构,并非全部来自人脸检测,因为人脸检测并不需要用到完整的代码结构。直接复制下面的代码并不能成功运行。完整的可执行的代码已放置在【源码汇总】目录中

导入模块

下面是FaceDection的导入列表

 

自定义检测类

我们可以基于 AIBase 类自定义一个检测类,类中一般包含了如下几种方法:

  1. init 初始化函数,用于配置AI任务的基本信息

  2. config_preprocess 配置图像处理信息和一些预处理操作

  3. PreProcess 图像的前处理

  4. run 进行AI推理的核心步骤。对于无预处理的AI任务,需要在子类中重写该函数

  5. PostProcess 对AI识别的结果做后处理

  6. DrawResult 将结果绘制到画面上

并非所有AIBase的方法都需要重写。我们可以将任务分为如下四类:单模型任务、多模型任务,自定义预处理任务、无预处理任务。不同任务需要编写不同的代码实现,具体如下图所示:

image-20250206102802517

 

 

执行当前例程

我们定义了exce_demo(pl)方法来执行当前的AI例程

传入的参数pl是一个Pipeline实例

这样设计是为了可以让这个AI例程被外部调用。Pipeline管理了K230全局的摄像头和显示输出,所以在一次程序运行中,只能存在一个Pipeline实例

这部分的代码流程基本上是一致的,我们还是以人脸检测的例程为例

执行流程图如下:

image-20250206112820116

 

 

在Pipeline的定义中,Camera 默认输出两路图像:一路格式为 YUV420SP (Sensor.YUV420SP),直接提供给 Display 显示;另一路格式为 RGBP888 (Sensor.RGBP888),则用于 AI 部分进行处理。AI 主要负责任务的前处理、推理和后处理流程。处理完成后,结果将绘制在 OSD 图像实例上,并发送给 Display 进行叠加显示。

 

结束当前例程

结束例程部分非常简单,只需要释放掉我们创建的实例即可。以人脸识别为例

 

主进程

当我们想要在其他程序中调用例程时,我们需要导入该例程后,创建该例程的对象并且调用exce_demo()方法,并传入Pipeline实例

而如果我们是想直接在K230中运行这个例程,我们就需要在主函数中创建Pipeline实例

代码如下所示