例程讲解25-tf_person_detection_search_just_center TensorFlow图像中央人检测

注意:4.3.3及以后固件删除此例程,使用FOMO替代, 效果更好。 见 FOMO人检测 https://book.openmv.cc/example/25-Machine-Learning/tf-object-detection.html

见视频教程42 - 神经网络目标检测:https://singtown.com/learn/50918/


# TensorFlow Lite 人检测例程
#
# Google的“人检测模型”会检测到是否有人。
#
# 在此示例中,我们将探测器窗口滑到图像上方,并获取激活列表。
# 请注意,使用带有滑动窗口的CNN计算极为复杂,因此对于详尽搜索,不要期望CNN是实时的。

import sensor, image, time, os, tf

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((240, 240))       # 设置240x240窗口。
sensor.skip_frames(time=2000)          # 等待一段时间,让相机设置生效。

# 加载内置的人检测神经网络模型(该网络位于OpenMV Cam的固件中)。
net = tf.load('person_detection')
labels = ['unsure', 'person', 'no_person']

clock = time.clock()
while(True):
    clock.tick()

    img = sensor.snapshot()

    # net.classify()将在图像的roi上运行网络(如果没有指定roi,则在整个图像上运行)
    # 将为每个位置生成一个分类得分输出向量。
    # 在每个比例下,检测窗口都以x_overlap(0-1)和y_overlap(0-1)为指导在ROI中移动。
    # 如果将重叠设置为0.5,那么每个检测窗口将与前一个窗口重叠50%。
    # 请注意,重叠越多,计算工作量就越大。
    # 最后,对于在网络沿x/y方向滑动后的多尺度匹配,检测窗口将由scale_mul(0-1)缩小到min_scale(0-1)。
    # 下降到min_scale(0-1)。例如,如果scale_mul为0.5,则检测窗口将缩小50%。
    # 请注意,如果x_overlap和y_overlap较小,则在较小的比例下可以搜索更多区域...

    # 设置x_overlap=-1可以使窗口始终保持在ROI的中心位置。
    # 如果y_overlap不是-1,该方法将在所有垂直位置进行搜索。

    # 设置y_overlap=-1可以使窗口始终保持在ROI的中心位置。
    # 如果x_overlap不是-1,该方法将在所有水平位置进行搜索。

    # 默认设置只是进行一次检测...更改它们以搜索图像...
    for obj in net.classify(img, min_scale=0.5, scale_mul=0.5, x_overlap=-1, y_overlap=-1):
        print("**********\nDetections at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
        for i in range(len(obj.output())):
            print("%s = %f" % (labels[i], obj.output()[i]))
        img.draw_rectangle(obj.rect())
        img.draw_string(obj.x()+3, obj.y()-1, labels[obj.output().index(max(obj.output()))], mono_space = False)
    print(clock.fps(), "fps")

results matching ""

    No results matching ""