M5StickV瞳孔检测-Arduino中文社区 - Powered by Discuz! Archiver

vany5921 发表于 2019-12-23 17:03

M5StickV瞳孔检测

转自Openmv的基础案例,为了尽可能的提高画面帧率,将分辨率设定为QQVGA,LCD显示设定为160x120大小以获得较好体验。

import sensor, time, image, lcd

# Reset sensor
sensor.reset()

# Sensor settings
sensor.set_contrast(3) #图像对比度(-3~+3)
sensor.set_gainceiling(16)#设置图像增益2, 4, 8, 16, 32, 64, 128
# Set resolution to QVGA.
sensor.set_framesize(sensor.QQVGA)

sensor.set_windowing((160, 120))#窗口大小可修改但必须为8的倍数,不合适的长宽比会花屏

sensor.set_pixformat(sensor.GRAYSCALE)#采集灰度

lcd.init()
lcd.rotation(2) #屏幕旋转
# Load Haar Cascade
# 默认情况下,这将使用所有阶段,较低的阶段更快但不太准确。
# 加载眼睛的haar算子
eyes_cascade = image.HaarCascade("eye", stages=24)#stages值设置的小一些可以加速匹配,但会降低准确率print(eyes_cascade)

# FPS clock
clock = time.clock()

while (True):
    clock.tick()
    # Capture snapshot
    img = sensor.snapshot()
    # Find eyes !
    # Note: Lower scale factor scales-down the image more and detects smaller objects.
    # Higher threshold results in a higher detection rate, with more false positives.
    eyes = img.find_features(eyes_cascade, threshold=0.5, scale=1.5)
    #先利用find_features函数识别人眼。image.find_features(cascade, threshold=0.5, scale=1.5),thresholds越大,匹配速度越快,错误率也会上升。scale可以缩放被匹配特征的大小。

    # Find iris
    #在识别到的人眼中寻找瞳孔。
    lcd.display(img)
    for e in eyes:
      iris = img.find_eye(e)
      #image.find_eye((x, y, w, h)),find_eye的参数是一个矩形区域,左上顶点为
      #(x,y),宽w,高h,注意(x,y,w,h)是一个元组,不要漏掉括号()。上行代码中
      #的e即代表识别到的眼睛的矩形区域。
      #find_eye的原理是找到区域中颜色最深处的中心。
      img.draw_rectangle(e)
      img.draw_cross(iris, iris)
      lcd.display(img)
      #用矩形标记人眼,用十字形标记瞳孔。

    # Print FPS.
    # Note: Actual FPS is higher, streaming the FB makes it slower.
    lcd.draw_string(0,0,str(clock.fps()),lcd.GREEN,lcd.BLACK)


页: [1]
查看完整版本: M5StickV瞳孔检测