小方舟基础教程¶
小方舟是为普及STEAM创客教育、人工智能教育、编程教育研发的开源人工智能硬件,即可当作AI视觉传感器,也可以是AI开发板。它集成K210高性能64位双核芯片,内置AI硬件加速单元,可实现各类场景的本地视觉算法跟语音识别。
视觉识别可实现功能:人脸检测、色块识别、形状识别、物体分类、二维码、语音识别等。
参数介绍¶
基本操作¶
开关机: |
---|
小方舟的电源口插上电源线,拨动开关,等待几秒后,屏幕亮起,出现摄像头捕捉的画面,即代表开机成功(开机可能比较慢,请耐心等待)。
电路连接: |
---|
新手建议使用配套杜邦线,它的一端是4P接口,接在小方舟上,另一端是两个3p口组成,接在扩展板的P0、P1引脚。
扩展板以IOX为例,接在IOX的P0、P1,线的颜色与IOX的颜色对应好,插上即可。
烧录程序: |
---|
小方舟可使用mpython、mpythonX、mind+等软件进行编程,这里以mpython为例(后面涉及的程序都在是mpython软件完成的)。 mpython软件下载连接:https://www.labplus.cn/software 打开mpython软件,点击扩展部分的添加,添加“N+”模块即可。
用数据线将掌控板与电脑连接,在电路连接以及掌控板通电后,小方舟可不用额外供电。
当软件上方的“未连接”变为“已连接”,说明连接成功。点击上方的“刷入”,即可将程序烧入到掌控板中。
AB键操作: |
---|
面向屏幕,左边的是A键,右边的是B键。
按下A键可切换模式,系统内置了4种模式:COLOR、QR CODE、CLASS和FACE,对应是的颜色识别、二维码识别、物体识别以及人脸识别,这四种识别方式是不需要插TF卡即可实现的。
按下B键可以学习方框内的目标,长按B键可以将已学习的数据清除,然后可进行重新学习。
颜色识别¶
学习与识别: |
---|
要进行颜色的识别,首先需要用程序将模式设置成颜色识别模式,或者按一下A键,可进行模式切换。
将小方舟摄像头对准目标颜色块,自动框会自动选目标颜色块。调整小方舟与颜色块的角度和距离,让黑色方框尽量框住整个目标色块。按下B键开始第一次学习,松开则结束学习,如果学习成功,则会出现ID号;将方框对准其他颜色块,按下B键开始第二次学习;长按B键,取消学习成果,重新学习。
学习了多种颜色后,屏幕上会根据应颜色显示该颜色的 ID,边框的大小随颜色块的面积一起变化,边框会自动跟踪色块。 小方舟显示的颜色 ID 与学习颜色的先后顺序是一致的,也就是:ID号会按顺序依次标注为“ID0”,“ID1”,“ID2”,以此类推,不同颜色对应的边框颜色也不同。
小案例: |
---|
学习两种颜色,识别到颜色时,掌控板的屏幕显示对应ID号。先让小方舟学习两种不同的颜色,颜色最好差异大些,然后开始编写程序,
图形化: |
---|
代码: |
---|
from nplus import *
from mpython import *
ai = K210_AI()
ai.mode_change(0)
ai.lcd_senser_rotation()
while True:
if ai.get_id_data(0):
oled.fill(0)
oled.DispChar('ID0', 0, 0, 1)
oled.fill(0)
if ai.get_id_data(1):
oled.fill(0)
oled.DispChar('ID1', 0, 0, 1)
oled.fill(0)
二维码识别¶
学习与识别: |
---|
将模式切换为二维码识别,同样按下B键进行学习,当小方舟检测到二维码时,屏幕上会用白色方框框选出检测到的二维码。
学习成功后,小方舟的屏幕右下角会显示二维码的信息,不会显示ID号,但是系统依旧会按照学习顺序表标上ID号。
小案例: |
---|
小方舟学习一个二维码,如果检测到学习的二维码,则小方舟上的RGB灯亮红灯,否则亮绿灯。
图形化: |
---|
代码: |
---|
from nplus import *
from mpython import *
ai = K210_AI()
ai.mode_change(1)
while True:
if ai.get_id_data(0):
ai.set_ws2812_rgb(0, 255, 0, 0)
ai.set_ws2812_rgb(1, 255, 0, 0)
else:
ai.set_ws2812_rgb(0, 0, 255, 0)
ai.set_ws2812_rgb(1, 0, 255, 0)
20类物体识别¶
小方舟的物体识别功能,目前可以识别20类物体,分别为:飞机、自行车、鸟、船、瓶子、巴士、汽车、猫、椅子、牛、餐桌、狗、马、摩托车、人、盆栽植物、羊、沙发、火车、电视。对应的英文名称分别为:aeroplane,bicycle,bird,boat,bottle,bus,car,cat,chair,cow,dining table,dog,horse,motorbike,person,pottedplant,sheep,sofa,train,tvmonitor。
学习与识别: |
---|
将模式切换为物体识别,按下B键进行学习。
学习之后,在方框的右上角会以英文方式显示学习的物体对象属于哪一类别。遇到相似的物体时,屏幕上会有白色方框自动框选出物体,并显示该物体的类别。
小案例: |
---|
识别三类物体,不同物体在掌控板上显示不同的颜色。
图形化: |
---|
代码: |
---|
from nplus import *
from mpython import *
import time
ai = K210_AI()
ai.mode_change(3)
while True:
if ai.get_id_data(0):
rgb.fill((int(255), int(0), int(0)))
rgb.write()
time.sleep_ms(1)
if ai.get_id_data(1):
rgb.fill((int(255), int(204), int(102)))
rgb.write()
time.sleep_ms(1)
if ai.get_id_data(2):
rgb.fill((int(0), int(204), int(204)))
rgb.write()
time.sleep_ms(1)
人脸识别¶
学习与识别: |
---|
将模式切换为人脸识别。在我们平时使用人脸检测时将小方舟屏幕中央对准目标人物的脸部,自动框会自动框选目标人物的脸部。
小案例: |
---|
在掌控板上用圆表示人脸所在位置。
1.获取人脸坐标 小方舟上的屏幕可以看作是一个坐标轴,左上角是坐标原点,横向是x轴,纵向是y轴,最右边是256,最下边是192。
获取人脸坐标后将会出现以下四个数据:
掌控板上的四个数据,第一个是人脸中心的X轴坐标,第二个是y轴坐标,第三个是白色边框的宽,第四个是白色边框的长。
2.人脸位置在掌控板上显示 在掌控板上以圆点的形式,将人脸的位置表现出来。使用映射进行表示。
图形化: |
---|
代码: |
---|
from nplus import *
from mpython import *
import time
ai = K210_AI()
ai.mode_change(2)
while True:
if ai.get_id_data(0):
my_list = ai.get_center_coord()
oled.fill(0)
oled.fill_circle(((128 - 0) / (256 - 0)) * (my_list[0] - 0) + 0, ((64 - 0) / (192 - 0)) * (my_list[1] - 0) + 0, 3, 1)
oled.show()
time.sleep(0.5)
拍照与录像¶
拍照与录像是保存在内存卡上,因此必须插上。内存卡最好在16G以内,最大不要超过32G,内存卡推荐主流品牌,否则会有不识别的现象。
小案例1-拍照: |
---|
按下掌控板A键,开始拍照。
拍照成功后,小方舟屏幕左下角会出现Save Picture:1.0(或2.0、3.0等等),1.0、2.0、3.0表示图片的序号。
图形化: |
---|
代码: |
---|
from nplus import *
from mpython import *
import time
ai = K210_AI()
def on_button_a_down(_):
time.sleep_ms(10)
if button_a.value() == 1: return
ai.picture_capture(1)
button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)
小案例2-录像: |
---|
按下掌控板A键,开始录像。
开始录像时,左上角会出现红色字体“record…..”;当录像结束后左下角会出现绿色字体“video capture over,save”,表示录像完成,正在保存。
拍照与录像无法同时进行,如果在录像的时候,让它拍照,那么它会等录像结束后,再进行拍照。
图形化: |
---|
代码: |
---|
from nplus import *
from mpython import *
import time
ai = K210_AI()
def on_button_a_down(_):
time.sleep_ms(10)
if button_a.value() == 1: return
ai.video_capture(10)
button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)