第三章 CanMV簡介
1)實驗平臺:正點原子DNK210開發板
2) 章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0
3)購買連結:https://detail.tmall.com/item.htm?&id=782801398750
4)全套實驗原始碼+手冊+影片下載地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html
5)正點原子官方B站:https://space.bilibili.com/394620890
6)正點原子K210技術交流企鵝群:605557868
本章將對CanMV進行簡單介紹
本章分為如下幾個小節:
3.1 初識CanMV
3.2 CanMV的應用開發方式
3.1 初識CanMV
CanMV是嘉楠科技針對AIOT程式設計的獨立開源專案,其原始碼在GitHub上開源(https://github.com/kendryte/canmv.git),可在例如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的應用程式可以快速地對影像進行各種包括但不限於元素繪製、影像濾波、特徵檢測、色塊追蹤、影像對比和碼識別的處理。