Lenet是一种卷积神经网络,可以用来识别打印的、手写的数字

我们之前就有讲到过利用OpenMV的NCC模板匹配算法来进行数字识别,模板匹配需要我们实现保存需要匹配的数字或者字母的模板图片

比如你要识别0、1、2、…、8、9,那么你就需要保存十张图片来进行数字识别,并且模板匹配对于模板图片的大小和角度是有一定要求的:如果我们的数字大小稍微有所变化或角度稍微有所变化,那么我们的模板图片也需要相应地更改,这也是模板匹配的一定局限性

Lenet数字识别:我们只需要提前保存Lenet数字识别的神经网络模型文件到我们OpenMV内置的flash中,运行例程即可直接进行数字识别,对于数字大小和角度并没有太大的要求(就算数字的大小或者角度改变了,Lenet仍然可以识别出来)

需要注意的是:无论是NCC模板匹配还是Lenet神经网络数字识别,我们的OpenMV只能够识别相对大一点的数字,像身份证上的的身份证号码这么小的数字OpenMV是无法实现识别的

3.6.5及以后固件删除此例程,OpenMV4 Plus使用TensorFlow Lite替代

nn库被删除了,我们只能自己去训练神经网络了

就当作了解吧🥀

# LetNet数字识别例程
import sensor, image, time, os, nn

sensor.reset()                         # 复位并初始化传感器。

sensor.set_contrast(3)
sensor.set_pixformat(sensor.GRAYSCALE) #设置图像色彩格式,有RGB565色彩图和GRAYSCALE灰度图两种
# 数字识别没有必要用到彩图RGB565,因此改为灰度图GRAYSCALE

sensor.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_idx
        
    score = 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_str

    print(clock.fps())             
    # 注意: 当连接电脑后,OpenMV会变成一半的速度。当不连接电脑,帧率会增加。
    #打印当前的帧率。

来源:Lionetxx

物联沃分享整理
物联沃-IOTWORD物联网 » OpenMV:18数字识别

发表评论