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]