Lenet是一种卷积神经网络,可以用来识别打印的、手写的数字
我们之前就有讲到过利用OpenMV的NCC模板匹配算法来进行数字识别,模板匹配需要我们实现保存需要匹配的数字或者字母的模板图片
比如你要识别0、1、2、…、8、9,那么你就需要保存十张图片来进行数字识别,并且模板匹配对于模板图片的大小和角度是有一定要求的:如果我们的数字大小稍微有所变化或角度稍微有所变化,那么我们的模板图片也需要相应地更改,这也是模板匹配的一定局限性
而Lenet数字识别:我们只需要提前保存Lenet数字识别的神经网络模型文件到我们OpenMV内置的flash中,运行例程即可直接进行数字识别,对于数字大小和角度并没有太大的要求(就算数字的大小或者角度改变了,Lenet仍然可以识别出来)
【tensorflow|OpenMV(18数字识别)】需要注意的是:无论是NCC模板匹配还是Lenet神经网络数字识别,我们的OpenMV只能够识别相对大一点的数字,像身份证上的的身份证号码这么小的数字OpenMV是无法实现识别的
3.6.5及以后固件删除此例程,OpenMV4 Plus使用TensorFlow Lite替代
nn库被删除了,我们只能自己去训练神经网络了
就当作了解吧
# LetNet数字识别例程
import sensor, image, time, os, nnsensor.reset()# 复位并初始化传感器。sensor.set_contrast(3)
sensor.set_pixformat(sensor.GRAYSCALE) #设置图像色彩格式,有RGB565色彩图和GRAYSCALE灰度图两种
# 数字识别没有必要用到彩图RGB565,因此改为灰度图GRAYSCALEsensor.set_framesize(sensor.QVGA)# 将图像大小设置为QVGA (320x240)sensor.set_windowing((128, 128))# 设置128 x128窗口。摄像头只扫描镜头中的128*128的区域,相当于把图像放大来看sensor.skip_frames(time=100)# 等待100ms使系统设置生效sensor.set_auto_gain(False)# 关闭自动增益
sensor.set_auto_exposure(False)# 关闭曝光# 加载lenet神经网络模型
net = nn.load('/lenet.network')
labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']clock = time.clock()# 创建一个时钟对象来跟踪FPS帧率。
while(True):
clock.tick()# 更新FPS帧率时钟。
img = sensor.snapshot()# 拍一张照片并返回图像。
out = net.forward(img.copy().binary([(150, 255)], invert=True))
# net.forward()是在图像roi上运行网络(必要时自动缩放),并返回神经网络分类结果的浮点值列表(即返回我们的图像和神经网络中每一个数字的相似度)#print(out)# 我们打印out的值,会发现out有10个输出max_idx = out.index(max(out))
# max(out)——>取得out浮点值列表中最大的一个数
# max_idx = index(x)——>取得x所对应的索引(out[1]、out[2]...),赋值给max_idxscore = int(out[max_idx]*100)# 计算相似度,用百分数表示并忽略小数部分if (score < 70):# 如果相似度小于70%
score_str = "??:??%"
else:# 如果相似度大于等于70%
score_str = "%s:%d%% "%(labels[max_idx], score) # 是哪个数,相似度为多少img.draw_string(0, 0, score_str)# 在图像的(x,y)位置显示字符串score_strprint(clock.fps())
# 注意: 当连接电脑后,OpenMV会变成一半的速度。当不连接电脑,帧率会增加。
#打印当前的帧率。
推荐阅读
- opencv|OpenCV(01图片&视频的加载显示)
- alot物联网工程师|四.OpenCv图像的基本变换
- python|(2022.4)Win10最新Anaconda安装Pytorch GPU环境(CUDA)教程(极其适合初学者)
- 程序员|【python教程入门学习】普通人学python有意义吗
- 数据|Python爬取AES加密的m3u8视频流的小视频并转换成mp4
- python|python爬虫---破解m3u8 加密
- NLP|用python进行精细中文分句(基于正则表达式),HarvestText(文本挖掘和预处理工具)
- web安全|[CTF的PASSBY]浅谈FLASK-jinja2 SSTI 的绕过
- 爬虫|使用Python下载本地的m3u8文件