Maixpy 调用内置haar算子实现人脸(正脸)检测和瞳孔检测
本帖最后由 为之 于 2021-4-4 01:31 编辑## Introduction
为什么会产生想写这部分的帖子,原因有两点:
第一点:在首次阅读Maxipy文档到机器视觉部分时看见这样一句话**(Maixpy 的 Image)移植于OpenMV,与OpenMV功能相同**。也就是说在K210上可以跑OpenMV的Image部分,那一刻就有被触动到,早已想玩耍这部分。
第二点:自己曾说过要写这部分帖子,言既出,则必行!
废话不多说,开始步入今天的主题。
## Main Ideas
本帖子主要介绍如何调用Maixpy含OpenMV部分的固件中的haar算子,实现人脸检测(正脸)+ 瞳孔检测等
## Code
```python
# 调用内置前脸检测器查找脸部,而后查寻瞳孔
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 # eyeIMAGE--- 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, iris)
lcd.display(img)
print(clock.fps())
```
## API
```python
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
- https://maixpy.sipeed.com/zh/api_reference/machine_vision/image/image.html#haarcascade-%E7%B1%BB-%E2%80%93-%E7%89%B9%E5%BE%81%E6%8F%8F%E8%BF%B0%E7%AC%A6
- https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html
页:
[1]