跳到主要内容

CanMV AI开发框架

前言

在前面的章节中,我们已经学习了如何在CanMV下使用OpenMV库的一些方法来实现码类识别、颜色追踪、边缘检测等功能。这些功能的本质是将摄像头获取的图像通过OpenMV库中的特定函数进行简单的图像数学运算,最后对计算结果进行处理,从而实现相关功能。从本章开始,我们将介绍更加复杂的AI应用开发,这里主要介绍图像识别类的AI应用,因为AI应用比较复杂,需要运算的数据非常多,单靠CPU性能无法很好的满足我们的需求,这时候就需要用到K230D内部集成的KPU模块,KPU可以简单理解为计算机的显卡,能够并发的进行简单的数学运算,非常适合进行AI推理,K230D的KPU功能也十分强大,它支持INT8和INT16,典型网络下实测推理能力可达K210的13.7倍,MAC利用率超70%。 功能越强大的东西使用起来往往会更加繁琐,为此,CanMV官方针对K230D专门搭建了AI开发框架,并通过MicroPython编程方式实现AI功能的开发,这大大简化了AI开发流程并降低了AI开发难度,本章介绍如何使用CanMV AI视觉开发框架和MicroPython编程实现各种AI功能。通过本章的学习,读者将掌握如何在CanMV下使用CanMV AI视觉开发框架和MicroPython编程方法实现AI功能的开发。

AI开发框架介绍

为了帮助用户简化AI部分的开发,基于K230D_CanMV提供的API接口,我们搭建了配套的AI开发框架。框架结构如下图所示:

00

根据框架图可知,Sensor默认输出两路图像:一路图像格式为YUV420SP(Sensor.YUV420SP),直接提供给Display显示;另一路图像格式为RGBP888(Sensor.RGBP888),则用于AI部分进行处理。AI主要负责任务的前处理、推理和后处理流程。处理完成后,结果将绘制在OSD图像实例上,并发送给Display进行叠加,最后在LCD和IDE缓冲区显示识别结果。

API描述

在AI例程中,我们主要介绍图像识别相关的例程。图像识别类的AI程序较为复杂,需要使用K230D CanMV平台的多个硬件模块,如AI2D、KPU、Camera和Display等。此外,还需要使用多个软件接口协同工作。AI视觉开发框架的主要API接口包括:PineLine、Ai2d和AIBase。

接口介绍

AI视觉识别的开发过程包括图像预处理、模型推理和输出后处理。我们将整个过程封装在Ai2D类和AIBase类中。要完成整个开发过程,主要使用以下四个类,这四个类分别提供了AI视觉识别开发过程中不同部分所需的功能。由于这四个类涉及的内容较多,这里不再展开详细讲述,详细介绍请参考对应链接。

  • PineLine:由sensor模块、display模块二次封装的接口,用于设置摄像头图像采集、输出对应格式图像到AI处理和显示等。点击查看详细介绍

  • Ai2D:图像预处理接口,提供crop/shift/pad/resize/affine等预处理方法。点击查看详细介绍

  • AIBase:模型推理主要接口,也是进行AI开发主要关注的部分。点击查看详细介绍

  • ScopedTiming:测量代码块执行时间的上下文管理器。点击查看详细介绍