python人脸照片分类_10行Python代码实现人脸检测 |理论解读+Python代码

1理论知识的解读 0fa467e5a697f08cd5fdeeff6cf271ba.png

      OpenCV是计算机视觉(Computer Vision)领域最受欢迎的库之一,该库最初使用C和C++实现,如今也已提供了对应的Python包——opencv-python

   OpenCV使用机器学习算法来实现对图片中人脸的搜索,但人脸搜索是一个十分复杂的事情,如正脸、侧脸、化妆、口罩等等因素让图片中的人脸呈现出的模式十分复杂,难以依靠单一的人脸检测算法识别人脸。实际上,OpenCV将面部识别任务拆分成成千上万个易于解决的小任务,每一个小任务也被称为一个分类器(Classfier)。

      面对一张图片,我们该如何进行面部识别?最易想到的是从图片的左上方开始划定一小块区域,用算法检测人脸,不断移动块直至图片检测完成。通常在一个人脸识别任务中需要6000或更多的分类器,加上一个高分辨率图片块的不断迭代,每一张图片的检测需要进行数百万次计算。

    OpenCV使用层级(cascade)的方式解决此类问题,即将面部识别分为多个阶段,对每个块先进行粗略快速的检测,通过后再进行详细检测,进而实现实时的面部识别,而不是耗费数小时的数百万次计算。层级本身只是一堆XML文件,其中包含用于检测对象的数据。

2Python实践讲解 0fa467e5a697f08cd5fdeeff6cf271ba.png

    首先,我们需要安装OpenCV的Python包——opencv-python,安装命令为pip install opencv-python。若pip服务下载速度慢,建议换成国内镜像服务器,如将以上代码改写为pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/。

   需要提醒的是,安装opencv-python包之后,其自带的人脸层级检测器模板文件的存储位置为 .\site-packages\cv2\ data\haarcascade_ frontalface_ default.xml.

#【1】安装OpenCV库:pip install opencv-python#【2】导入cv2import cv2#【3】创建Cascade分类器
   #CascadeClassifier的参数为人脸层级检测器模板文件路径
faceCascade=cv2.CascadeClassifier(cv2.data.haarcascades
    + "haarcascade_frontalface_default.xml")
"images/test.png")

     至此,我们用4行代码完成人脸检测的准备和初始化工作,其中传入的照片如下图所示:

python人脸照片分类_10行Python代码实现人脸检测 |理论解读+Python代码_第1张图片

# 调用detectMultiScale功能检测图像中的人脸
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, 
                                     minSize=(30,30), flags=cv2.CASCADE_SCALE_IMAGE)
# 将检测到的人脸用矩形标识
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 将矩阵标识后的图像输出保存
cv2.imwrite("test_fr.png",image)

  其中,detectMultiScale( )函数的5个参数及其含义如下:

  • 第一个参数gray:为传入灰度图像;

  • 第二个参数scaleFactor:由于通常越靠近相机的人脸会越大,scaleFactor比例因子对人脸大小进行补偿,在处理远近大小差别很大的人脸图像时需要进行具体调整;

  • 第三个参数minNeighbors:该算法使用移动窗口来检测对象,minNeighbors设置在当前对象窗口需要检测多少个窗口

  • 第四个参数minSize:设置每个窗口的大小;

  • 第五个参数flags:返回检测到人脸的坐标矩阵列表。

    最终结果如下图所示:

python人脸照片分类_10行Python代码实现人脸检测 |理论解读+Python代码_第2张图片

3结语   

     至此,我们共用10行代码实现了一个基于OpenCV的简单人脸检测功能。当然OpenCV能够提供给我们的远不止这些,这里仅用一个小例子展现OpenCV功能的强大,您也可以传入自己喜欢的照片来重现这篇文章,并在这个过程中发现问题、解决问题,最终更加深入的了解、学习和应用相关知识。

    真正的有效学习从使用开始......

备注

  本文设计、撰写、排版和校对:师兵范、朝乐门

  版权所有,转载请注明出处

你可能感兴趣的:(python人脸照片分类)