前言

  第一次使用该平台。想先找一个简单的识别,来走走流程。就想到了,前几年的送药小车的数字卡片识别。花了半天收集标记图片。在运行时要注意摄像头与数字卡片的高度。不过也有些不足,可能是收集某个数字的训练集的时候,拍摄高度,不一致(因为是手拍),导致最终在同一高度下有个别数字,的识别可能低一点。

  基于K210Bit开发板,MaixHub: AI 训练和分享平台和MaixPy IDE软件编译。网址: AI 训练和分享平台:https://maixhub.com/

具体参数文章介绍:https://maixhub.com/model/zoo/218

工程

百度网盘链接:https://pan.baidu.com/s/1lY2A0uyO8CRp8HmYK0ancw  提取码:bkt6

模型压缩包文件:1.main.py 2.model-54796.kmodel 3.report.json

三个文件夹,全丢SD卡里,在插上K210Bit,上电就能自动执行了。

代码

  因为我的板子屏幕要的屏幕要转动,完成串口发送和标签重命名,因为我之前的标签命名时以数字1之类来命名,但是在实际显示时汉字显示不出来就要重命名。为此我在原有的main.py的代码下增加下述修改。

原代码main.py

# generated by maixhub, tested on maixpy3 v0.4.8
# copy files to TF card and plug into board and power on
import sensor, image, lcd, time
import KPU as kpu
import gc, sysinput_size = (224, 224)
labels = ['数字1', '数字2', '数字3', '数字4', '数字5', '数字6', '数字7', '数字8']
anchors = [0.84, 1.22, 1.66, 2.34, 1.31, 1.75, 1.88, 2.59, 1.47, 2.09]def lcd_show_except(e):import uioerr_str = uio.StringIO()sys.print_exception(e, err_str)err_str = err_str.getvalue()img = image.Image(size=input_size)img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))lcd.display(img)def main(anchors, labels = None, model_addr="/sd/m.kmodel", sensor_window=input_size, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.set_windowing(sensor_window)sensor.set_hmirror(sensor_hmirror)sensor.set_vflip(sensor_vflip)sensor.run(1)lcd.init(type=1)lcd.rotation(lcd_rotation)lcd.clear(lcd.WHITE)if not labels:with open('labels.txt','r') as f:exec(f.read())if not labels:print("no labels.txt")img = image.Image(size=(320, 240))img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)lcd.display(img)return 1try:img = image.Image("startup.jpg")lcd.display(img)except Exception:img = image.Image(size=(320, 240))img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)lcd.display(img)try:task = Nonetask = kpu.load(model_addr)kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]while(True):img = sensor.snapshot()t = time.ticks_ms()objects = kpu.run_yolo2(task, img)t = time.ticks_ms() - tif objects:for obj in objects:pos = obj.rect()img.draw_rectangle(pos)img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))lcd.display(img)except Exception as e:raise efinally:if not task is None:kpu.deinit(task)if __name__ == "__main__":try:# main(anchors = anchors, labels=labels, model_addr=0x300000, lcd_rotation=0)main(anchors = anchors, labels=labels, model_addr="/sd/model-54796.kmodel")except Exception as e:sys.print_exception(e)lcd_show_except(e)finally:gc.collect()

修改后main.py

修改行数及作用

  • 第8行,显示标签重命名
  • 第28行,屏幕显示旋转
  • 第64~66行,识别数字后简单的串口打印
# generated by maixhub, tested on maixpy3 v0.4.8
# copy files to TF card and plug into board and power on
import sensor, image, lcd, time
import KPU as kpu
import gc, sysinput_size = (224, 224)
labels = ['1', '2', '3', '4', '5', '6', '7', '8']
anchors = [0.84, 1.22, 1.66, 2.34, 1.31, 1.75, 1.88, 2.59, 1.47, 2.09]def lcd_show_except(e):import uioerr_str = uio.StringIO()sys.print_exception(e, err_str)err_str = err_str.getvalue()img = image.Image(size=input_size)img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))lcd.display(img)def main(anchors, labels = None, model_addr="/sd/m.kmodel", sensor_window=input_size, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.set_windowing(sensor_window)sensor.set_hmirror(sensor_hmirror)sensor.set_vflip(sensor_vflip)sensor.run(1)sensor.set_vflip(1)        #屏幕垂直翻转lcd.init(type=1)lcd.rotation(lcd_rotation)lcd.clear(lcd.WHITE)if not labels:with open('labels.txt','r') as f:exec(f.read())if not labels:print("no labels.txt")img = image.Image(size=(320, 240))img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)lcd.display(img)return 1try:img = image.Image("startup.jpg")lcd.display(img)except Exception:img = image.Image(size=(320, 240))img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)lcd.display(img)try:task = Nonetask = kpu.load(model_addr)kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]while(True):img = sensor.snapshot()t = time.ticks_ms()objects = kpu.run_yolo2(task, img)t = time.ticks_ms() - tif objects:for obj in objects:pos = obj.rect()img.draw_rectangle(pos)OutNum=labels[obj.classid()]img.draw_string(pos[0], pos[1], "%s : %.2f" %(OutNum, obj.value()), scale=2, color=(255, 0, 0))print(OutNum)img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))lcd.display(img)except Exception as e:raise efinally:if not task is None:kpu.deinit(task)if __name__ == "__main__":try:# main(anchors = anchors, labels=labels, model_addr=0x300000, lcd_rotation=0)main(anchors = anchors, labels=labels, model_addr="/sd/model-54796.kmodel")except Exception as e:sys.print_exception(e)lcd_show_except(e)finally:gc.collect()

代码现象

K210图像检测(1~8)数字卡片识别相关推荐

  1. 【Python5】图像操作,数字验证码识别,图像拼接/保存器

    文章目录 1.安装 2.画图 3.几何变换 3.1 位计算 3.2 遮挡 3.3 通道切分合并 3.4 金字塔 3.5 缩放 3.6 平移 3.7 旋转 3.8 仿射变换 3.9 透视变换 4.形态学 ...

  2. bmp 格式图像印刷体数字的识别

    一.实验目的 初步了解模板匹配算法,理解bmp 图像在内存中的存储形式,实现bmp 格式图像印刷体数字的识别. 二.算法概要 由于实验要求是对标准印刷体数字进行识别,本实验采用模板匹配中最简单的像素点 ...

  3. 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测

    1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...

  4. Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

    Windows下Java+Tesseract-OCR对图像进行字符识别,亲测可行 1. 下载tesseract-ocr.中文语言包并安装 2. 命令行对图片进行识别及效果图 3. Java调用Tess ...

  5. CVPR 2020文本图像检测与识别论文/代码

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx CVPR 2020 共收录 1470篇文章,算法主要领域:图像与视频处理,图像分类&检 ...

  6. 基于K210的MNIST手写数字识别

    基于K210的MNIST手写数字识别 项目已开源链接: Github. 硬件平台 采用Maixduino开发板 在sipeed官方有售 软件平台 使用MaixPy环境进行单片机的编程 官方资源可在这里 ...

  7. JavaCV进阶opencv图像检测识别:摄像头图像人脸检测

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  8. 用CNN识别CT图像检测肺癌

    用CNN识别CT图像检测肺癌 原文:2nd place solution for the 2017 national datascience bowl 翻译参考:知乎用户王小新 Kaggle百万美元大 ...

  9. JavaCV进阶opencv图像检测识别:ffmpeg视频图像画面人脸检测

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

最新文章

  1. 无法使用xcode打出ipa包的解决方法
  2. 将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc
  3. linux shell判断文件、目录是否存在并移动到指定位置
  4. 躁动的小Z 最短路+路径记录
  5. 5/100. Single Number
  6. (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
  7. ffmpeg播放器 android,Android使用FFmpeg(六)--ffmpeg实现音视频同步播放
  8. vue 页面引入多个内部js_.html多页页面引入vue.js怎么开发?
  9. 学python后到底能干什么-普通小白学会Python到底具体能做什么呢?
  10. 离散数学蕴含等值式前件为假时命题为真的理解
  11. 7z解压后重命名文件的方法
  12. 某医院门诊预约系统/医院预约挂号系统
  13. 妻子,情人,玫瑰花,刺木花(转载)
  14. 使用七牛云存储解决app部署问题,免申请https认证
  15. 自建具备全文搜索能力的git server
  16. OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13
  17. 如何在小米9 se(安卓9)安装Xposed框架?
  18. 如果哥白尼也玩“虚拟化”和“超融合”
  19. 燕云台的滑铁卢——豆瓣的营销推广价值
  20. 让java程序在后台一直执行

热门文章

  1. python描述性统计工作日上班时代码_数据的描述性统计以及用Python代码实现
  2. Source Insight 支持AUTOSAR风格的代码解析
  3. python自动发送163邮箱,带附件与不带附件
  4. C语言 字符串数组 的输入 总结
  5. excel下拉时间分钟递增_下拉小时和分钟
  6. F1梅赛德斯奔驰车队为什么不如红牛车队
  7. GeForce MX150相对应的NVIDIA CUDA版本_MX150显卡满血版和MX150显卡非满血版有什么区别?...
  8. 奇妙的毛巾折叠术,生活中的美好随处可在,只要用心去寻找
  9. 速写初习(七)---农村瓦舍
  10. 虚拟人物视频一键生成,不想上镜?就用它|Mixlab智能产品