例程讲解25-Machine-Learning->nn_lenet_search_just_center区域中心数字识别

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

运行此例程前,请先在OpenMV IDE->工具->机器视觉->CNN网络库 中,将相应的神经网络文件保存到OpenMV的SD内存卡中哦。

神经网络是一个非常新的功能,目前还处于测试阶段。截至目前2018-08-15,OpenMV IDE中内置的lenet.network网络模型在OpenMV3 M7会超出内存,建议自己训练小一点的lenet模型使用。

# nn_lenet_search_just_center区域中心数字识别例程
# LeNet是一个卷积网络,旨在将其视野分类为数字0-9。
#
# 在此示例中,我们将LeNet检测器窗口滑动到图像上,并获取可能存在对象的激活列表。 
# 请注意,使用带有滑动窗口的CNN非常昂贵,因此对于穷举搜索而言,不要期望CNN是实时的。

import sensor, image, time, os, nn

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

sensor.set_pixformat(sensor.GRAYSCALE) # Set pixel format to RGB565 (or GRAYSCALE)
#设置图像色彩格式,有RGB565色彩图和GRAYSCALE灰度图两种

sensor.set_framesize(sensor.QVGA)      # 将图像大小设置为QVGA (320x240)

sensor.set_windowing((128, 128))       # 设置128 x128窗口。
sensor.skip_frames(time=750)           # 不要让自动增益运行太长时间。
sensor.set_auto_gain(False)            # 关掉自动增益。
sensor.set_auto_exposure(False)        # 关掉自动曝光。

# 加载lenet神经网络模型(可以从OpenMV IDE获得神经网络模型)。
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()
    tmp_img = img.copy().binary([(150, 255)], invert=True)

    # net.search()将在图像中搜索网络中的roi(如果未指定roi,则搜索整个图像)。 
    # 如果其中一个分类器输出大于阈值,则在每个位置查看图像,位置和标签将存储在对象列表中并返回。 
    # 在每个比例下,使用x_overlap(0-1)和y_overlap(0-1)作为指导,在ROI中移动检测窗口。 
    # 如果将overlap设置为0.5,则每个检测窗口将与前一个检测窗口重叠50%。 
    # 请注意,计算工作重叠越多,负载越多。 
    # 最后,对于在x/y维度上滑动网络之后的多尺度匹配,检测窗口将通过scale_mul(0-1)缩小到min_scale(0-1)。 
    # 例如,如果scale_mul为0.5,则检测窗口将缩小50%。 
    # 请注意,在较低比例下,如果x_overlap和y_overlap较小,则搜索区域会更多... 
    # contrast_threshold会跳过平坦区域。

    # 设置x_overlap = -1会强制窗口始终保持在x方向的ROI中心。 
    # 如果y_overlap不为-1,则该方法将搜索所有垂直位置。

    # 设置y_overlap = -1会强制窗口始终在y方向的ROI中居中。 
    # 如果x_overlap不是-1,则该方法将在所有水平位置搜索。

    for obj in net.search(tmp_img, threshold=0.8, min_scale=0.4, scale_mul=0.8, \
            x_overlap=-1, y_overlap=-1, contrast_threshold=0.5):
        print("Detected %s - Confidence %f%%" % (labels[obj.index()], obj.value()))
        img.draw_rectangle(obj.rect())
    print(clock.fps())

星瞳科技OpenMV官方中文文档函数讲解:

results matching ""

    No results matching ""