K210上手和训练数据集加串口输出

K210是一款 64 位双核带硬件 FPU、卷积加速器、FFT、Sha256 的 RISC-V CPU 。
因此,它在硬件上集成了机器视觉和机器听觉能力, 是一款定位 AI 和 AIOT 市场的 SoC,同时也是一颗性能强劲的同时却有着极低的价格的 MCU 。
基于 K210 的系列MAIX板子到底能做什么?
支持 MCU 常规操作, 集成了机器视觉和麦克风阵列, 通过Micropython 编程以快速开发具有极低成本和体积实用的 AIOT 领域智能应用。

基本外设

 基本端口


第一列为板载IO口,Maix Bit 引出来了36个引脚,另外的12各引脚分配给了LCD、摄像头。
第三行是缺省功能,为原始固件上电默认功能。在此也可以看出,0-3号引脚上是JTAG;4、5号引脚为默认串口;12-14号是RGB灯;16号引脚是BOOT键,接了10kΩ的上拉电阻;18-20号引脚接的是麦克风;26-28号引脚是用SPI协议实现的的读写TF card功能。
第五行为IO电压,IO引脚都是3.3V,Reset引脚电压为1.8V

上手步骤一

安装驱动ch340:

正式使用 Dock板之前,我们需要先安装好串口驱动,才可进行下一步的开发与使用;
因为板子是通过 USB 转串口设备与电脑连接(K210 没有 USB 硬件支持功能)。
根据板子的 USB 转串口芯片型号装驱动。
Maix Dock板需要装 CH340(WIN10可能自动安装),如果没有就在网上搜索 CH340 驱动 下载安装即可,
然后可以在 设备管理器 中看到串口设备(COMXX)。
下载驱动链接

链接:https://pan.baidu.com/s/1Vql2qkjVgqHJmy-fYh4U9g 
提取码:0lpm 
--来自百度网盘超级会员V3的分享

上手步骤二

安装刷固件软件

下载链接:https://pan.baidu.com/s/1y79rxnqfDbi5djyvuTCd_A 
提取码:duw4 
--来自百度网盘超级会员V3的分享

 下载固件

更新固件,相当于给手机装个系统,对于Maix Bit这款产品,当我们用到不同功能的时候,也许就得另装一个固件。可以说是客制版K210,我们在spieed 下载站可以找到所有版本各类固件,

这里我随便选了第一个

 进入画面

 安装这个表来下载固件

 上图框选内容为readme.txt,与上面表格类似,但较之丰富,相当于说明书,解答了上面不同固件之间的区别与各自支持什么功能。当然也提到了如何定制自己的固件等等。
下载好之后,接着打开 kflash_gui 应用,然后选择固件、设置选项, 点击下载即可。
使用时注意串口不能被其它软件占用,选择正确的开发板和串口号,可以适当降低波特率和使用低速模式来提高下载成功率。

 点击下载,之后就可看到屏幕上面、串口打印显示出对应版本号。

上手步骤三安装编译环境MaixPy IDE

下载链接:https://pan.baidu.com/s/1xfbzMDdpzbY5RhYu_oBx9g 
提取码:gzzz 
--来自百度网盘超级会员V3的分享 

1.首先需要弄清: MaixPy 使用 Micropython 脚本语法,所以不像 C 语言 一样需要编译,其实不用 IDE 也能愉快使用: 使用串口终端工具,前面已经安装了

2.使用 IDE 则会方便在电脑上实时编辑脚本并上传到开发板以及直接在开发板上执行脚本,以及在电脑上实时查看摄像头图像、保存文件到开发板等

3.当然, 使用 IDE 因为压缩、传输需要耗费一部分资源,所以性能会有所降低,而且如果MaixPy宕机也没有串口终端好发现问题

4.要使用 MaixPy IDE , 固件必须是 v0.3.1 版本以上, 否则MaixPyIDE 上会连接不上, 使用前尽量检查固件版本和 IDE 版本,都更新到最新版以保障能正常使用
 

Maix Py IDE 使用

连接成功之后,链接按钮会由绿变红;连接按钮下方是运行按钮,会执行当前编辑区的py文件;再次点击运行按钮(红色), 停止运行当前代码。

 常见问题及解决方法

1.MaixPy IDE 无法成功连接开发板
现象:
​开发板到手之后,一直无法连接 MaixPy IDE,首先检查:
检查固件是否支持 IDE, 早期的固件以及名字带minimum的固件都不支持;
检查串口是否被占用(其它软件也打开了串口);
点击连接后,不用和终端工具同时使用,否则会出现串口占用无法打开;

如果一直无法成功连接成功,再检查:
开发板型号是否选择错误;
观察开发板屏幕是否有变化,如果没有反应可能是串口选择错误;
尝试升级到最新的 master 分支固件, 以及最新的 MaixPy IDE 软件;
MaixPy 版本号低于 0.5.0_v0 不支持连接 MaixPy IDE。

2.Micro SD 卡读取不到

Micro SD 读取不到现象及解决方法:
确认 SD 能否在电脑上正常使用,如果不能即 SD 已损坏,电脑能够正常使用,读取 SD,但 MaixPy 开发板无法使用:
1.SD 卡未格式化为 MBR 分区 FAT32 格式。
2.电脑能够正常使用 SD 卡,也确认 SD 卡的磁盘格式为 FAT32,但 MaixPy 开发板依旧无法使用。
可能存在的原因:部分 SD 出厂时,sd 中没有磁盘分区表,或者磁盘分区表类型不是 MBR
解决的方法:使用第三方磁盘管理软件,将 sd 分区表类型转换为 MBR, 并且将 sd 格式格式化为 FAT32

上手步骤四数据识别串口输出

1.训练数据集

2.分类

3.训练模型传入开发板

4.加入串口通讯

下载标注软件

一、下载与安装Anaconda3

1.下载Anaconda3

Anaconda | The World's Most Popular Data Science Platform

下载好之后点击安装,出现如下界面
(尽管版本不同,但是安装形式仍然符合) 

如果第一步已有python环境变量,
只需要点第一个勾 Add Anaconda to …path
这一步操作是将anaconda添加路径,就不用自己手动配置。

如果第一步没有python环境变量,两个勾都要点上
因为anaconda本身就有python环境(图中版本3.7,不同版本显示不同的数字),它会把这个python版本加到电脑路径里面,替换掉原来的python版本。

这时候有朋友问了,如果自己本身已有python环境亮两个勾都点上了,会出现什么情况?
当然是以前的python版本被顶替掉了。你之前依赖之前版本的程序有部分可能无法在此版本下运行。

上面两步选根据实际情况选完之后,打开cmd
输入python检测环境变量出现相关版本
再输入 conda

二、检测python环境变量

搜索框输入anaconda回车输入python

出现上图所示,python 3.8.5说明电脑python环境已有,且是3.8.5版本。

如果没有,则显示no such file 相关字样

不管有还是没有都无伤大雅,重点是影响安装anaconda后面一步。

三、安装labelimg

1.下载labelImg

链接:https://pan.baidu.com/s/1Xz5jsUZWY2ZQVAvRkevrFg 
提取码:1111 
--来自百度网盘超级会员V3的分享

2.安装

将下载的包解压到一个路径,随便都好。

 点击上方搜索框输入cmd按下回车,出现以下界面

这样一下子就进入到了labelImg这个路径,不用cd命令行一步一步实现。
在此基础上输入 conda install pyqt=5
等待1到2s会出现一大堆东西,最后一行为【Y/N】
再输入一个y就好。如果没有出现,最后会自动安装完成。

 因为我已安装,所有会出现,all requested packages already installed。说明这一步已经安装好了。
安装完成后,再输入:pyrcc5 -o resources.py resources.qrc
这个执行完成是没有任何返回结果的
最后输入:python labelImg.py

 出现应用

 之后的打开方式

都需打开这个文件夹按照上面的方式在搜索框输入cmd

后输入python labelImg.py回车

 三、图片处理压缩

链接:https://pan.baidu.com/s/1_IpXMO1CA6ygfh31dml7bg 
提取码:tir0 
--来自百度网盘超级会员V3的分享

压缩后将out外的文件夹删除,后再将out的文件夹中的—out删掉

 安装好后用手机拍照一个物体或者多个物体最少40张,为什么要这个软件是因为k210只使用244的照片所以要压缩,或者直接k210使用脚本拍照。之后便是标注数据集

 四、图片标注

打开刚才的标注软件

设制调整为自动保存,快捷键w标注,d下一张

标注的文件夹格式

 images是图片xml是标注出来的数据集

之后压缩zip格式,一定要把压缩前的路径全删了,不然不成功。

其格式

 上传数据集进行训练

到这训练   Sipeed MaixHub – sipeed AI 模型平台

  • 选择训练类型

  • 填写邮箱地址, 用于接收结果, 包括成功(模型等文件) 和 失败 (失败原因)结果

  • 如果要求填写机器码(不要求则跳过此步骤):

    • 警告: 由于需要进行模型加密,运行key_gen.bin 将永远关闭 JTAG端口,并写入一次性 AES KEY,请确认对自己开发没有影响再进行烧录。(如果不使用JTAG调试开发或者仅使用MaixPy开发不影响)

  • 训练前要获取板子的机器码

  • Maixhub 模型训练平台使用说明

在官网的教程下进行

之后训练出的模型直接放入sd卡,板子重新擦除固件,烧录刚才我推荐的固件然后插入sd卡就可以进行识别物体

 串口通讯

串口通信方法

头文件

from machine import UART    #导入UART模块
1
设置串口通信引脚(这里我设置10为TX,11为RX)

fm.register(10, fm.fpioa.UART1_TX, force=True) #10为tx接rx
fm.register(11, fm.fpioa.UART1_RX, force=True) #11为rx接tx

设置串口的波特率,数据位,停止位,奇偶校验位

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

串口发送数据(这里我发送的识别物体名称)

 uart_A.write(classes[i.classid()]+'\r\n')

将以上代码加入到你的代码里,就可以实现串口通信了
 

代码

import sensor,image,lcd,time  #导入sensor、image、lcd、time模块
import KPU as kpu
from machine import UART
from fpioa_manager import fm

lcd.init(freq=15000000) #初始化LCD

sensor.reset()   #初始化单目摄像头
sensor.set_pixformat(sensor.RGB565) #设置帧格式
sensor.set_framesize(sensor.QVGA)   #设置帧大小
sensor.set_hmirror(0)
sensor.run(1)
task = kpu.load("/sd/yolov2.kmodel")
f=open("anchors.txt","r")
anchor_txt=f.read()
L=[]
for i in anchor_txt.split(","):
    L.append(float(i))
anchor=tuple(L)
f.close()
f=open("classes.txt","r")
lable_txt=f.read()
lable = lable_txt.split(",")
f.close()
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(11, fm.fpioa.UART1_RX, force=True)

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

anchor = (0.32,0.68,0.7,0.73,0.75,0.75,0.8,0.96,1.1,1.63)

sensor.set_windowing((224, 224))
#初始化yolo2网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
classes=["apple","banana","oranges" ] #标签名称要和你训练时的标签名称顺序相同

while(True):

     img = sensor.snapshot()    #使用摄像头拍摄一张照片
     #lcd.display(img) #在液晶屏上显示一张 image

     code = kpu.run_yolo2(task, img)  #task为 kpu_load 返回的 kpu_net 对象
                                      #img为从sensor 采集到的图像
                                      #run_yolo2返回的值为kpu_yolo2_find 的列表

     if code:
         for i in code:
             a=img.draw_rectangle(i.rect()) #在图像上绘制一个矩形。此处为作为元组传递回坐标框出矩形
                                            #传回的是检测到的图像的四个坐标
             a = lcd.display(img) #在液晶屏上显示被框框框起来的image

             for i in code:
                 lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)

                 lcd.draw_string(i.x(), i.y()+12, '%f'%i.value(), lcd.RED, lcd.WHITE)

                 lcd.draw_string(50, 200,str(b), lcd.RED, lcd.WHITE)

                 lcd.draw_string(110, 200,str(c), lcd.RED, lcd.WHITE)

                 uart_A.write(classes[i.classid()]+'\r\n')

     else:
         a = lcd.display(img) #如果没有识别出物体,则继续呈现图像
uart_A.deinit()
del uart_A
a = kpu.deinit(task) #反初始化。kpu_load 返回 kpu_net 对象

就可以啦!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

池子tt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值