ELF K210 AI 主控板
1 简要概述
ELF K210 AI主控板是WEEEMAKE开发的一款针对人工智能领域的全功能开发板套件。主控采用双核心设计,以K210为主,ESP32为辅,既可以实现机器视觉,机器听觉,同时也实现wifi物联网功能。板上提供了丰富的接口,方便接入各种传感器模块,方便二次开发和学习,降低了学习AI视觉的门槛。
2 主控芯片介绍
①K210芯片。勘智K210是集成机器视觉与机器听觉能力的系统级芯片,它使用了超低功耗的28纳米先进制程,具有64位处理器,总算力可达1TOPS,内置多种硬件加速单元(KUP、FPU、FFT等),主频400MHz。K210模组内置8M的SRAM。
②ESP32模组。本主控采用了ESP32-WROOM-32D通用型WiFi+BT+BLE MCU模组。模组集成了传统蓝牙、低功耗蓝牙和WIFI,时钟频率可以在80MHz到240MHz之间调节。
3 开发板介绍
(开发板正面)
(开发板背面)
主控板硬件特点:
l RJ11座:4个
l 电机接口:4个
l 功能按键:1个
l 复位按键:1个
l 电源开关:1个
l BOOT按键:1个
l MEMS麦克风:1个
l TF卡槽:1个(max128G)
l 显示屏:1个(2.4英寸TFT,240*320)
l 摄像头:1个(OV2640像素200W)
l 喇叭:1个(8R1W)
l 排母座:20组IO引脚+2组I2C引脚
其中电源输入电压在DC6-12V之间,4路电机接口可以直接驱动电机,最大输出电源电压,每路最大电流2A。4个RJ11接口,可以连接weeemake大量丰富的传感器模块,接口电压DC5V,输出电流3A。
22组排母座与arduino uno的针脚类似,0-13为数字管脚,0、1同时为串口,加上I2C管脚,共16排管脚,这些管脚从K210模组中引出,电源电压可以在3.3V和5V之间切换。此外还有A0-A5这6个模拟口,这些端口从ESP32中引出,电源固定3.3V。电机、按键和PORT口的IO控制管脚均来自K210,和排母上的IO复用。
功能模块对应IO管脚
功能 |
具体模块 |
Arduino |
K210 |
电机 |
M1 |
D12/D13 |
IO10/IO3 |
M2 |
D10/D11 |
IO12/IO11 |
|
M3 |
D8/D9 |
IO14/IO13 |
|
M4 |
D6/D7 |
IO32/IO15 |
|
PORT口 |
PORTA |
D5 |
IO24 |
PORTB |
D2 |
IO21 |
|
PORTC |
D3 |
IO22 |
|
PORTD |
D4 |
IO23 |
|
按键 |
|
D6 |
IO32 |
注:由于按键和电机M4公用一个IO管脚,所以当按下按键时会对M4造成干扰,尽量避免同时使用这2个功能。
RET和BOOT按键用于控制K210,串口指示灯也是用于指示电脑和K210的通信情况。K210和ESP32通过串口相连,两者都通过SPI连接SD卡槽。
主控板会固定在一块亚力克上,这样方便固定安装和保护主板。另外还有一个旋转摄像头支架,摄像头既可以固定在主控板上,也可以配合延长线固定在旋转支架上,这样就可以随意转动摄像头(0-180°)到需要的角度。摄像头和屏幕都采用FPC座连接,这样方便更换不同的摄像头和屏幕。
由于主控板上有2块主控芯片,所有连接电脑串口时,也会出现2个挨着的com口,一般来说第一个(数字小的比如com2)是K210芯片的com口,第二个(数字大的比如com3)是ESP32芯片的com口。这2个com口可以分别对K210和ESP32下载程序和打印串口信息。
TF卡槽可以插小于128G的TF卡,这个卡主要用于存放算法模型和音视频文件,稍微复杂一点的人工智能算法必须插入TF卡,才能正常使用。
4 功能介绍
本主控板定义为人工智能开发板,重点在于离线的快速运算能力,用户自己开发挖掘的潜力大,快速实现人工智能应用。本主控并不适合算法模型训练,那需要更高的硬件条件,但可以加载算法和模型,使用机器视觉和听觉得到的结果,再加上丰富的输入输出传感器设备,可以做出丰富的案例和场景。现介绍几个常用的功能:
①颜色识别——用于寻找指定颜色,用户指定一个颜色区间,主控就会反馈视野中符合要求颜色的大小、方位等信息,通过大小就可以判定远近(需要事先知道需要找的物体实际大小),就可以实现抓取特定物体的功能。同时也可以反馈指定区域内颜色情况。
②巡线追踪——可以追踪指定颜色的线条,做路径预测。用机器视觉相比巡线传感器。可以获取线条在画面中的位置偏移、方向角度等更多数据,实现平滑的巡线。
③标签识别——可以识别AprilTag标签、二维码、条形码。特别是AprilTag标签,可以反馈标签的位置信息及三位变换数据,实现空间定位,其它2种可以获取内容和位置信息。
④人脸识别和追踪——可以分辨视野中是否有人脸,并获取人脸在画面中的位置、大小等数据实现人脸追踪,还可以分别是谁的脸,实现人脸识别。
⑤图像识别——可以学习不同物体的多张照片,然后使用特定的机器学习算法进行训练,训练完成后就可以识别训练过的图标,同一物体的照片越多,学的越多,识别越好。可以实现垃圾分类,交通卡片识别等应用。
⑥物体分类——已有现成的识别模型,可以识别大约20种不同的物体,包括:飞机、自行车、鸟、猫、狗、盆栽等,可以输出位置、大小等数据。
⑦语音识别——加载特定的固件和模型,就可以通过汉语拼音来识别语音。
⑧wifi物联网——通过和ESP32通信,可以访问互联网,或者自己组建网络来传递图片、控制指令等信息,实现远程监控。
⑨音视频播放——板载有1W的喇叭,可以播放程序里或者SD卡上的音视频。
此外还可以实现游戏模拟器等功能。
5 编程软件介绍
主控板目前支持图形化、Python、C/C++编程。图形化编程使用weeecode软件,Python编程使用weeecode软件中内嵌的MaixPy IDE,C/C++编程使用arduino IDE。其中功能最全的是Python编程,其次是weeecode图形化软件和arduino IDE编程。入门和体验可以从图形化开始,深入学习图像处理和语音处理建议使用Python编程。
5.1 WEEECODE软件界面介绍
在WEEEMAKE官网上下载最新的WeeeCode软件,打开后界面如下:
1号区域第一个是选择主控板,此时应该选择WEEEMAKE K210;第二个位置是否打开对应图形化的Python代码,默认不打开,为舞台界面,打开后才能看到2号和3号界面;第三个为恢复固件,目前没有使用。
2号区域用于显示Python代码,其中点击“用IDE打开”,就会跳转到MaixPy IDE软件中,此按键可以使MaixPy IDE软件中的Python代码跟图形化语句同步。目前只能图形化转Python。
3号区域是程序下载和串口信息,点击第一个串口图标,软件会自动连接主控板上的K210COM口,后面的“调试”相当于在线运行,“上传”是下载当前的程序,相当于离线,“中断”用于停止在线运行,“复位”用于复位主控板,“清空”是清空下面窗口的打印信息。
4号区域是积木块区,选择不同的主控板,界面左下角“机器人”项目里的积木块会自动变化。
5号区域是图形化编程区。
5.2 WEEECODE软件相关积木块介绍
由于人工智能内容非常丰富,所以涉及的积木块也特别多。相比于之前的编程,K210人工智能积木块具有种类多、参数多、不容易理解等特点。这里只做一个简单的介绍,详细的请参考相关教程。
点击机器人大类选项后,旁边一栏顶端会变成如下:
点击其中的积木块选择器,会出现一个菜单。
这个菜单主要是用于选取需要用到的weeemake的传感器模块,K210主控板资源及人工智能模块,一些Python语言的选择(一些复杂的程序需要用到Python语言)。只有选取了对应的功能后,才会出现相应的积木块。这个功能主要是解决积木块过多,难以寻找的问题。
5.3 一个简单的示例程序
拖出如下的积木块,这个程序的作用是把摄像头拍摄的图像实时的显示在主板的屏上。不用修改积木块中参数,直接就可以使用(参数的具体作用我们有配套的教材可以使用),这个程序一般是用来检测主控板的摄像头和屏还有串口是否正常工作。
编好程序后,连接串口,然后再点击调试,此时3号窗口会打印相关信息,几秒后,主控上的屏幕就会显示拍摄的画面了。
如果显示的画面翻转了或者不对应,可以参考以下几个积木块,自行调整。
这个是调整摄像头拍摄画面的,在电源的下拉框中可以选取水平镜像和垂直翻转。
这2个是调试LCD显示屏画面的,如果需要对拍摄图片做处理,优先使用摄像头调整。
5.4 MAIXPY软件介绍
6 基础实验例程
本例程只列举一些常用的基础程序,以及这些程序运行的简单介绍,至于每个积木块内参数的意义,如何使用请参考我们出的对应教材。
以下示例程序相关资料下载:(2021.07.10修复视觉巡线Bug)k210_samples.rar
6.1 播放音频
6.2 寻找色块
这个程序是寻找视野中颜色从(0,-70,0)到(80,-10,30)区间的物体。注意颜色体系是LAB,不是RGB,示例程序中的数值范围是寻找深绿色物体,当有深绿色物体出现时,会在LCD显示屏上框出来,并用十字标明中心点。除了程序中的可以获取中心位置外,还可以获取像素量,面积等很多参数,适用于寻找特点颜色物体的方位大小等。
6.3 标签识别
这个程序是识别AprilTag标记。AprilTag是一个视觉基准系统,通过AprilTag标签可以计算出精确的3D位置、反向和ID。AprilTag有很多种,目前本开发板只支持TAG36H11这个类型。
用户可以自己寻找相应网址打印TAG36H11,关于AprilTag标记详细的介绍可以参考如下网址。
6.4 视觉巡线
这是一个小车视觉巡线程序,程序分为4段,分别是巡线初始化、图像读取和分析、电机设定和主程序。这个巡线程序总的思想是,将拍摄的图片分成5份(主程序最上面的几条指令),在每个区间内寻找黑线块的中心位置,由近到远再乘以权重因子,最后得出小车运动方向。程序中设定M1为右轮,M2为左轮,LAB(0,50,0,0,0,0)为线的颜色范围。注意,本程序只是基本的视觉巡线程序,只能寻单条线,弯度不能太大,线条不能交叉。需要更好巡线效果,可以在此基础上修改。
巡线原理可以参考:https://book.openmv.cc/example/10-Color-Tracking/black-grayscale-line-following.html
6.5 人脸追踪
有别于人脸识别,人脸追踪只能分别是不是人脸,并把人脸的坐标等信息反馈回来,并不能分辨是谁的脸。此程序运行前需要加载人脸追踪模型“facedetect.kmodel”,将模型下载到SD卡中,然后插入主控板卡槽中再运行程序。此程序的结果是,在LCD屏幕上显示拍摄的图片,并用方框表示识别到的人脸。
6.6 语音识别
这是一个语音识别的示例程序,使用的是汉语拼音的形式识别,程序内部已经集成了识别算法,用户可以任意添加改动关键词。这个只能识别汉语普通话,如果是其他语言或者方言,可以使用进阶例程中的自学习语音识别。此程序运行的结果是,当说“前进”时,打印1,当说“右转”时,打样2。关键词后面数字0.3是判别阈值,值越高,识别率越低,但错误率也越低。
注意:需要将语音识别声学模型烧录在flash里面,示例中,该模型烧录在地址0x500000。
6.7 物体识别
此程序为物体分类识别,可以分别20种不同的物体,分别是飞机、自行车、鸟、船、瓶子、公交、汽车、猫、椅子、奶牛、餐桌、狗、马、摩托车、人、盆栽植物、羊、沙发、火车、显示器。此程序运行前需要加载20种物体识别模型“20class.kmodel”(模型下载地址),将模型下载早SD卡根目录中,然后插入主控板中再运行程序。此程序的结果是,在LCD屏幕上显示拍摄的图片,并用方框表示到的物体,并把名称显示在旁边。
注:当在weeecode软件中点击调试、上传、中断、复位时,没有信息反馈或者反馈一直是错误时,需要手动硬件复位,复位按钮(RST)在主控板的LCD屏和摄像头接口旁边。复位后,weeecode软件里会出现复位信息,前提是串口一直保持连接。
7 进阶实验介绍
由于K210内存有限,人工智能的内容很多,一个固件不能放下所有的功能,所以以下功能需要重新刷固件。刷固件的方法及固件地址参考论坛:【K210固件烧录】kflash_gui的使用
以下示例程序相关资料下载:k210_samples.rar
7.1 自学习语音识别
这是一个自学习语音识别,有别于之前的语音识别,这个识别程序需要先录入语音,要识别几个关键词,就需要录入几条语音,每条语音只录一遍。示例程序中需要识别3个关键词,关键词名称(例如红色、蓝色、绿色)可以和录入的语音无关,录入的语音可以是各种语言(如汉语、英语、俄语等等)、方言等,算法只负责对比录入的语音和现场的语音。开始运行示例程序后,软件会打印如下信息:
此时靠近麦克风说一段语音,主控板会自动监测,当检测到有说话时,会自动录入并进入下一段语音的检测,不过在检测前需要按一下主控板上的按键,以防止录入错误。注意每次录入语音时最好保持周围环境安静,否则录入的语音可能是无效的语音。当录入完成后会自动进入识别状态,并将识别到的关键词打印出来。
第一次录入语音需要完整的执行示例代码,当录入完成后,可以修改程序,去掉以下这条语句,其它不变。
这样就可以不需要每次开机都要录入语音了,因为语音信息已经保存到SD卡中。
注意这个自学习的语音识别相比于汉语拼音语音识别,错误率会高一点。
7.2 人脸识别
此程序为人脸识别程序,在识别前需要录入人脸,流程会比人脸追踪复杂一些。具体流程如下:需要先将程序中的3个.smodel文件(下载地址)下载到SD卡的根目录中,运行程序后,会打印如下信息。
同时,LCD显示实时拍摄的画面,当识别到人脸时,会框出并用5个小点代表眼睛、鼻子、嘴巴。旋转摄像头,找到能稳定识别人脸的方位,按下主控板上的按键,此时第一个人脸录入完成,接下来录第二个人脸,方法相同。当第二个人脸录入完成后,程序自动进入识别状态,并把识别到的信息反馈到电脑和LCD屏上。最后一条语句70为识别阈值,当超过70%的相似度时才会反馈结果到电脑,可以跟进情况适当调整。
这条语句为需要录入的人脸名称,需要录入几人,就添加几条。
第一次录入人脸需要完整的执行示例代码,当录入完成后,可以修改程序,去掉以下这条语句,其它不变。
这样就可以不需要每次开机都要录入人脸了,因为人脸信息已经保存到SD卡中。
7.3 特征学习
此程序为特征学习部分,程序可以学习用户指定的物体,实现自动辨认。流程是用户先从不同角度拍摄需要识别的物体,拍摄的图片数量由用户自己确定,一般是拍摄越多识别效果越好,需要有物体的不同侧面和远近,这样就可以做到多角度的识别。注意:特征学习过程是学习整张图片,并不能分辨图中的物体,所以物体的大小和背景都会影响识别效果。
此程序运行前需要加载特征学习模型“Feature_learning.kmodel”,将模型下载早SD卡根目录中,然后插入主控板中再运行程序。程序识别2个物体“f1”和“f2”(名称可以自行定义),学习次数为每个物体5次。当程序开始运行后,电脑串口端和LCD屏上都会提示开始采样图片,先从“f1”开始,模型照片+训练照片一共是6张,每次拍照都需要按一次主板上的按键。等2个模型共12张照片拍摄完毕后,程序会自动训练,学习模型的特征点。训练过程一般很快,12张照片会在1秒内训练完成。训练完成后会在LCD屏上显示“Train end!”。
此程序为特征学习后对比物体相似度的代码。执行代码后,LCD屏上会显示拍摄的图片,同时左上角会显示对比最相近的物体名称,如“f1”或“f2”,并在后面显示相似度。
注:此特征学习可以用于物体分类或卡片识别等,但不能输出识别物体的方位信息,不能用于定位功能。