OpenMV:18数字识别

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库被删除了,我们只能自己去训练神经网络了

把它想象成理解。

[En]

Think of it as understanding.


import sensor, image, time, os, nn

sensor.reset()

sensor.set_contrast(3)
sensor.set_pixformat(sensor.GRAYSCALE)

sensor.set_framesize(sensor.QVGA)

sensor.set_windowing((128, 128))

sensor.skip_frames(time=100)

sensor.set_auto_gain(False)
sensor.set_auto_exposure(False)

net = nn.load('/lenet.network')
labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

clock = time.clock()
while(True):
    clock.tick()
    img = sensor.snapshot()
    out = net.forward(img.copy().binary([(150, 255)], invert=True))

    max_idx = out.index(max(out))

    score = int(out[max_idx]*100)

    if (score < 70):
        score_str = "??:??%"
    else:
        score_str = "%s:%d%% "%(labels[max_idx], score)

    img.draw_string(0, 0, score_str)

    print(clock.fps())

Original: https://blog.csdn.net/m0_59466249/article/details/125286603
Author: Lionetxx
Title: OpenMV:18数字识别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/7730/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部