K210图像检测(1~8)数字卡片识别
前言
第一次使用该平台。想先找一个简单的识别,来走走流程。就想到了,前几年的送药小车的数字卡片识别。花了半天收集标记图片。在运行时要注意摄像头与数字卡片的高度。不过也有些不足,可能是收集某个数字的训练集的时候,拍摄高度,不一致(因为是手拍),导致最终在同一高度下有个别数字,的识别可能低一点。
基于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)数字卡片识别相关推荐
- 【Python5】图像操作,数字验证码识别,图像拼接/保存器
文章目录 1.安装 2.画图 3.几何变换 3.1 位计算 3.2 遮挡 3.3 通道切分合并 3.4 金字塔 3.5 缩放 3.6 平移 3.7 旋转 3.8 仿射变换 3.9 透视变换 4.形态学 ...
- bmp 格式图像印刷体数字的识别
一.实验目的 初步了解模板匹配算法,理解bmp 图像在内存中的存储形式,实现bmp 格式图像印刷体数字的识别. 二.算法概要 由于实验要求是对标准印刷体数字进行识别,本实验采用模板匹配中最简单的像素点 ...
- 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测
1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...
- Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行
Windows下Java+Tesseract-OCR对图像进行字符识别,亲测可行 1. 下载tesseract-ocr.中文语言包并安装 2. 命令行对图片进行识别及效果图 3. Java调用Tess ...
- CVPR 2020文本图像检测与识别论文/代码
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx CVPR 2020 共收录 1470篇文章,算法主要领域:图像与视频处理,图像分类&检 ...
- 基于K210的MNIST手写数字识别
基于K210的MNIST手写数字识别 项目已开源链接: Github. 硬件平台 采用Maixduino开发板 在sipeed官方有售 软件平台 使用MaixPy环境进行单片机的编程 官方资源可在这里 ...
- JavaCV进阶opencv图像检测识别:摄像头图像人脸检测
JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...
- 用CNN识别CT图像检测肺癌
用CNN识别CT图像检测肺癌 原文:2nd place solution for the 2017 national datascience bowl 翻译参考:知乎用户王小新 Kaggle百万美元大 ...
- JavaCV进阶opencv图像检测识别:ffmpeg视频图像画面人脸检测
JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...
最新文章
- 无法使用xcode打出ipa包的解决方法
- 将一个n元一维向量向左旋转i个位置。例如,当n = 8且i = 3时,向量abcdefgh旋转为defghabc
- linux shell判断文件、目录是否存在并移动到指定位置
- 躁动的小Z 最短路+路径记录
- 5/100. Single Number
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- ffmpeg播放器 android,Android使用FFmpeg(六)--ffmpeg实现音视频同步播放
- vue 页面引入多个内部js_.html多页页面引入vue.js怎么开发?
- 学python后到底能干什么-普通小白学会Python到底具体能做什么呢?
- 离散数学蕴含等值式前件为假时命题为真的理解
- 7z解压后重命名文件的方法
- 某医院门诊预约系统/医院预约挂号系统
- 妻子,情人,玫瑰花,刺木花(转载)
- 使用七牛云存储解决app部署问题,免申请https认证
- 自建具备全文搜索能力的git server
- OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13
- 如何在小米9 se(安卓9)安装Xposed框架?
- 如果哥白尼也玩“虚拟化”和“超融合”
- 燕云台的滑铁卢——豆瓣的营销推广价值
- 让java程序在后台一直执行
热门文章
- python描述性统计工作日上班时代码_数据的描述性统计以及用Python代码实现
- Source Insight 支持AUTOSAR风格的代码解析
- python自动发送163邮箱,带附件与不带附件
- C语言 字符串数组 的输入 总结
- excel下拉时间分钟递增_下拉小时和分钟
- F1梅赛德斯奔驰车队为什么不如红牛车队
- GeForce MX150相对应的NVIDIA CUDA版本_MX150显卡满血版和MX150显卡非满血版有什么区别?...
- 奇妙的毛巾折叠术,生活中的美好随处可在,只要用心去寻找
- 速写初习(七)---农村瓦舍
- 虚拟人物视频一键生成,不想上镜?就用它|Mixlab智能产品