第三章 CanMV简介
本章将对CanMV进行简单介绍
本章分为如下几个小节:
3.1 初识CanMV
3.2 CanMV的应用开发方式
3.1 初识CanMV
CanMV是嘉楠科技针对AIOT编程的独立开源项目,其源代码在GitHub上开源(github.com/kendryte/ca…),可在例如Kendryte K210等强大的嵌入式AI SoC上运行,CanMV提供了基于MicroPython语法的应用开发方式,但同时也支持使用基于C语言和FreeRTOS的应用开发方式。
3.2 CanMV的应用开发方式
CanMV提供了基于C语言和FreeRTOS的应用开发方式和基于MicroPython语法的应用开发方式。
当使用CanMV提供的基于C语言和FreeRTOS的方式进行应用开发时,开发过程使用C或C++语言进行开发,与使用裸机SDK的裸机开发方式一样,这种开发方式要求开发者了解目标芯片的各种参数信息和特性,但相较于使用裸机SDK的裸机开发方式,CanMV提供了移植好的FreeRTOS操作系统,以便开发者能够完成更加复杂多任务应用的开发。
虽然使用C语言的裸机或操作系统的开发方式往往能使应用具有较高的运行效率和性能,但需涉及目标芯片底层寄存器的配置并同时对开发者的嵌入式开发能力有一定要求,但如果是为了初步了解目标芯片的功能、快速地进行一些功能验证或是完成一些相对简单的功能开发,那CanMV提供的基于MicroPython语法的开发方式就是再合适不过的选择了。使用CanMV提供的基于MicroPython语法的应用开发方式,开发者可以快速且便捷地完成应用开发,以下是两个基于MicroPython语法的简单应用示例:
寻找I2C设备示例:
from machine import I2C
i2c = I2C ( I2C . I2C0 , freq**=100000 , scl=28 , sda=**29 )
devices = i2c . scan ()
print ( devices )
拍照示例:
import sensor
import image
import lcd
lcd . init ()
sensor . reset ()
sensor . set_pixformat ( sensor . RGB565 )
sensor . set_framesize ( sensor . QVGA )
while True :
img = sensor . snapshot ()
lcd . display ( img )
AI人脸检测示例:
import sensor
import image
import lcd
from maix import KPU
lcd . init ()
sensor . reset ()
sensor . set_pixformat ( sensor . RGB565 )
sensor . set_framesize ( sensor . QVGA )
anchor = (
0.1075 , 0.126875 , 0.126875 , 0.175 , 0.1465625 , 0.2246875 ,
0.1953125 , 0.25375 , 0.2440625 , 0.351875 , 0.341875 , 0.4721875 ,
0.5078125 , 0.6696875 , 0.8984375 , 1.099687 , 2.129062 , 2.425937
)
face_detecter = KPU ()
face_detecter . load_kmodel ( '/sd/face_detect_320x240.kmodel' )
face_detecter . init_yolo2 (
anchor , anchor_num**=**9 ,
img_w**=320 , img_h=**240 ,
net_w**=320 , net_h=**240 ,
layer_w**=10 , layer_h=**8 ,
threshold**=0.5 , nms_value=0.2 , classes=**1
)
while True :
img = sensor . snapshot ()
face_detecter . run_with_output ( img )
faces = face_detecter . regionlayer_yolo2 ()
for face in faces :
img . draw_rectangle ( face [ 0 ], face [ 1 ], face [ 2 ], face [ 3 ], color**=(** 0 , 255 , 0 ))
可以看到,使用CanMV提供的基于MicroPython语法的开发方式,仅需少量的几行代码便可实现一些简单的功能。
CanMV的源码本质上是一套基于C的软件开发框架,CanMV可谓是站在巨人的肩膀上实现的一套软件框架,为什么这么说呢?这是因为CanMV集成了许多现成的软件库,例如裸机SDK、FreeRTOS、MicroPython、OpenMV的图像处理库等一系列软件库,其中裸机SDK提供了CanMV驱动Kendryte K210底层硬件的能力,FreeRTOS为CanMV实现多核多任务的任务调度以及移植MicroPython成为可能,MicroPython让CanMV的应用可以以类似Python脚本的方式进行开发,OpenMV的图像处理库让CanMV的应用程序可以快速地对图像进行各种包括但不限于元素绘制、图像滤波、特征检测、色块追踪、图像对比和码识别的处理。