- 作者:
- 分类:知识&开发->AI->edge_AI
- 阅读:18578
- 点赞:394
- 版权:CC BY-SA 4.0
- 创建:2021-11-05
- 更新:2021-11-06
原文链接(持续更新):https://neucrack.com/p/384
V831的效果:
K210的效果:
两个模型都有个缺点就是 1 容易识别成4, k210的模型识别远距离也不太行, v831的效果好些,总体比较粗糙了,但是也许你能用
k210的教程不在这里说了可以看这里: https://neucrack.com/p/325 ,
K210的模型这里自取: 链接: https://pan.baidu.com/s/1mhpn1sUlG9KGfaZ9xq3pIg 提取码: cimy ,
k210的模型文件使用:板子确保先烧录了固件,然后把所有文件放到SD 卡根目录,包括代码和模型都在里面了,上电就可以看到效果了
下面是 V831 的上手教程(注意不是k210的! k210的到这里就结束辣!!!!):
首先需要一个开发板
淘宝购买: https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-24053782153.4.21f952b1lCLyEk&id=635874427363
买全功能套餐, 有摄像头和屏幕
另外你需要一个 type-c 线(套餐应该有,问客服)
烧录镜像
按照文档烧录: https://wiki.sipeed.com/hardware/zh/maixII/M2/flash.html
文档内容主要是下载镜像: https://dl.sipeed.com/shareURL/MaixII/MaixII-Dock/SDK/release , 系统密码是123
,用户名是root
, 然后按照文档用读卡器+PhoenixCard 烧录就好了
启动系统
使用 type-c 线连接板子的 USB-UART 接口, 注意不是
USB-OTG
接口, 如上面封面图所示, 屏幕右下角的接口然后使用串口终端, 比如 putty , 选择串口连接, 输入串口号,串口号可以在资源管理器看到
- 修改 wifi SSID 和密码以连接wifi
手动修改
vim /etc/wpa_supplicant.conf
然后最简单的方法,直接重启生效
reboot
或者执行一键配置脚本:
maixpy3_config.py
然后可以看到板子的 ip 地址,比如192.168.0.37
ifconfig
下载模型文件
到maixhub下载模型(需要注册登录)
或者百度云:
链接: https://pan.baidu.com/s/1mhpn1sUlG9KGfaZ9xq3pIg 提取码: cimy
会得到两个文件, 一个number_awnn.param
和一个number_awnn.bin
下载源代码
使用如下源代码(复制后需要删掉后面的版权信息才能运行), 保存为文件run.py
注意, 复制代码要保证空格不要丢失,不然会无法运行, python 依靠缩进而不是大括号分段
from maix import nn
from PIL import Image, ImageDraw, ImageFont
from maix import display, camera
import time
from maix.nn import decoder
def draw_rectangle_with_title(draw, box, disp_str, bg_color=(255, 0, 0, 255), font_color=(255, 255, 255, 255)):
# draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
font_w, font_h = font.getsize(disp_str)
draw.rectangle((box[0], box[1], box[0] + box[2], box[1] + box[3]), fill=None, outline=bg_color, width=2)
draw.rectangle((box[0], box[1] - font_h, box[0] + font_w, box[1]), fill=bg_color)
draw.text((box[0], box[1] - font_h), disp_str, fill=font_color, font=font)
camera.config(size=(224, 224))
labels = ["1", "2", "3", "4", "5", "6", "7", "8"]
anchors = [2.44, 2.25, 5.03, 4.91, 3.5 , 3.53, 4.16, 3.94, 2.97, 2.84]
model = {
"param": "/root/number_awnn.param",
"bin": "/root/number_awnn.bin"
}
options = {
"model_type": "awnn",
"inputs": {
"input0": (224, 224, 3)
},
"outputs": {
"output0": (7, 7, (1+4+len(labels))*5)
},
"mean": [127.5, 127.5, 127.5],
"norm": [0.0078125, 0.0078125, 0.0078125],
}
print("-- load model:", model)
m = nn.load(model, opt=options)
print("-- load ok")
w = options["inputs"]["input0"][1]
h = options["inputs"]["input0"][0]
yolo2_decoder = decoder.Yolo2(len(labels), anchors, net_in_size=(w, h), net_out_size=(7, 7))
while 1:
t = time.time()
img = camera.capture()
if not img:
time.sleep(0.01)
continue
print("-- capture: ", time.time() - t )
t = time.time()
out = m.forward(img, quantize=True, layout="hwc")
print("-- forward: ", time.time() - t )
t = time.time()
boxes, probs = yolo2_decoder.run(out, nms=0.3, threshold=0.5, img_size=(240, 240))
print("-- decode: ", time.time() - t )
t = time.time()
for i, box in enumerate(boxes):
class_id = probs[i][0]
prob = probs[i][1][class_id]
disp_str = "{}:{:.2f}%".format(labels[class_id], prob*100)
draw_rectangle_with_title(display.get_draw(), box, disp_str)
print("-- draw: ", time.time() - t )
t = time.time()
display.show()
print("-- show: ", time.time() - t )
上传文件到开发板内的文件系统
系统密码是123
,用户名是root
(密码默认可能没有)
linux
直接使用 scp
命令拷贝;windows
需要使用winscp传输文件, 不会使用请自行搜索
将上面的三个文件传输到/root/
目录下
执行识别程序
cd /root
python run.py
就可以看到屏幕显示图像, 摄像头对准卡片就可以识别到卡片了
开机自启
vim /etc/init.d/S02app
在start)
部分添加
case "$1" in
start)
echo "Starting app..."
(cd /root && python run.py > /dev/null 2>&1 &)
;;
自定义程序
修改/root/run.py
即可
如果需要使用串口输出信息,参考这里: https://wiki.sipeed.com/soft/maixpy3/zh/usage/hardware/UART.html
这个串口示例的硬件接口是板子上的G6
和G7