前言
接触MaixPy 已经快一年了,k210芯片在视觉运算能力上是可圈可点的。经过一年多的发展,接触MaixPy的人也越来越多。本人是做少儿编程的老师,看了MaixPy的wiki 里面有些知识点对于一些初学者可能不太友好(有些人可能想看一下K210所实现的效果,奈何卡在了程序运行上面。果断放弃)。本次教程就针对官方教程中的1000物体分类进行详细的说明。
准备阶段
1、用 kflash_gui
刷入 maixpy_v0.6.2_46_geafab8cfd_minimum.bin 固件
2、刷入mobilenet_0x300000.kfpkg模型文件
3、用uPyLoader上传程序
3.1 选择串口并点击 Connect
按钮来连接板子
3.2 第一次运行该软件需要初始化, 点击 File->Init transfer files
来完成初始化,
然后它在板子里创建两个文件,分别是 __upload.py
和 __download.py
。
3.3 我们将main.py和labels.txt上传到板子上。
程序设计
因为这个模型有4.2MiB,比较大,所以使用了minimum的固件,同时保证GC使用的内存不要太大,可以通过以下方式设置小一点,把内存留给模型使用
from Maix import utils
import machine
utils.gc_heap_size(256*1024)
machine.reset()
用uPyLoader对我们的main.py进行修改后保存,执行点击执行(Execute)即可.
第二步:
# 导入相关库
import sensor, image, lcd, time
import KPU as kpu
# 液晶屏初始化
lcd.init()
#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.run(1)
# 开机加载模型的labels
lcd.clear()
lcd.draw_string(100,96,"MobileNet Demo")
lcd.draw_string(100,112,"Loading labels...")
# 这里打开的是flash里的labels.txt,如果我们选择打开sd卡中的文件,路径为:“labels.txt”
f=open('labels.txt','r')
labels=f.readlines()
f.close()
# 加载1000中物体分类模型
task = kpu.load(0x300000)
clock = time.clock()
while(True):
img = sensor.snapshot()
clock.tick()
fmap = kpu.forward(task, img)
fps=clock.fps()
# 这里把运行的结果转换成了一个list对象,然后找到了最大值的下标,
plist=fmap[:]
pmax=max(plist)
max_index=plist.index(pmax)
a = lcd.display(img, oft=(0,0))
# 通过这个下标我们就知道标签名是什么了(labels[max_index])
lcd.draw_string(0, 0, "%.2f:%s "%(pmax, labels[max_index].strip()))
print(fps)
a = kpu.deinit(task)
实验效果:
总结
好了,这样子我们就可以轻松搞定1000种物体检测了。由于模型的种类太多:识别的效果没有20种好。上述的模型文件及程序代码我已经放置在附件中,供尝试练习。更多MaixPY教程欢迎浏览个人博客:www.hockel.club