884浏览
查看: 884|回复: 0

[讨论交流] Maixpy 调用内置haar算子实现人脸(正脸)检测和瞳孔检测

[复制链接]
本帖最后由 为之 于 2021-4-4 01:31 编辑

Introduction

为什么会产生想写这部分的帖子,原因有两点:

第一点:在首次阅读Maxipy文档到机器视觉部分时看见这样一句话(Maixpy 的 Image)移植于OpenMV,与OpenMV功能相同。也就是说在K210上可以跑OpenMV的Image部分,那一刻就有被触动到,早已想玩耍这部分。

第二点:自己曾说过要写这部分帖子,言既出,则必行!
废话不多说,开始步入今天的主题。

Main Ideas

本帖子主要介绍如何调用Maixpy含OpenMV部分的固件中的haar算子,实现人脸检测(正脸)+ 瞳孔检测等

Code

# 调用内置前脸检测器查找脸部,而后查寻瞳孔

import sensor, time, image
import lcd

lcd.init()
sensor.reset()
sensor.set_contrast(1)
sensor.set_gainceiling(16)
#sensor.set_hmirror(1)   
#sensor.set_vflip(1)
sensor.set_framesize(sensor.QQVGA)
sensor.set_pixformat(sensor.RGB565)   

# load Haar Cascade
face_cascade = image.HaarCascade("frontalface", stages=25)        # face
eyes_cascade = image.HaarCascade("eye", stages=24)                # eye
'''
Note: 
# image.HaarCascade(path, stages=Auto)加载一个haar模型    (haar模型为二进制文件)
该模型若为自定义,则引号内为模型文件的路径;也可使用内置的haar模型---如“frontalface” 人脸模型、“eye”人眼模型;
stages值未传入时使用默认stages; 若stages值设置较小可加速匹配,但会降低识别正确率 !!!
'''
print(face_cascade, eyes_cascade) 

clock = time.clock()        # FPS clock
img = None                           # face IMAGE  --- RGB565
img1 =None                  # eye  IMAGE  --- Grayscale
while (True):
   clock.tick()
   img = sensor.snapshot()
   faces = img.find_features(face_cascade, threshold=1.1, scale=1.35)
   # threshold 大小需根据实际情况反复调试,此处仅作参考
   for f in faces:
       if f:
           # print("Found the face")
           img.draw_rectangle(f,color=(255,0,0))
           img1 = img.to_grayscale(copy=True)   
           # Note:瞳孔检测Image仅支持Grayscale格式
           eyes = img1.find_features(eyes_cascade, threshold=1.4, scale=1.2, roi=face)
           # 同上, threshold大小 需根据实际情况反复调试,此处仅作参考
           for e in eyes:
               if e:
                   # print("Found the eye")
                   iris = img1.find_eye(e)
                   img.draw_rectangle(e,color=(0,0,0))
                   iris = img1.draw_cross(iris[0], iris[1])
   lcd.display(img)
   print(clock.fps())

API

image.HaarCascade(path, stages=Auto)          
  • 该模型若为自定义,则引号内为模型文件的路径;也可使用内置的haar模型 ------ 如“frontalface” 人脸模型、“eye”人眼模型;
  • stages值未传入时使用默认stages; 若stages值设置较小可加速匹配,但会降低识别正确率 !!!
image.find_features(cascade[, threshold=0.5[, scale=1.5[, roi]]])
  • What's the Haar Cascade ?

Haar Cascade是一系列用来确定一个对象是否存在于图像中的对比检查. 这一系列的对比检查分成多个阶段,后一阶段的运行以先前阶段的完成为前提。大范围的检查在前期阶段首先进行,在后期进行更多更小的区域检查。

  • HOW to make Haar Cascade?

利用OpenCV训练,再将生成的XMl文件转换为cascade文件,这样就可以直接在Maixpy中通过SD加载调用。
这部分的东西就下次再出帖子介绍吧。

  • OpenCV 库自带的一些XML文件

            

Result

  • 演示一下利用内部haar算子实现的人脸检测+瞳孔识别

  • 说明:这里使用的Maixpy固件版本(支持OpenMV部分)为maixpy_v0.6.2_41_g02d12688e_openmv_kmodel_v4_with_ide_support.bin

Reference

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail