人脸检测

主要利用Opencv中的API与其中封装好的Haar人脸特征数据(小数部分较多计算更复杂)以及LBP数据(多数为整数计算)来调用进行人脸识别的任务。

若下载安装了Opencv,则其文件中包含数据,或者可以取其github网站上下载文件。

Haar特征数据下载地址:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt_tree.xml

LBP特征数据下载地址:

https://github.com/opencv/opencv/blob/master/data/lbpcascades/lbpcascade_frontalcatface.xml

## 21,人脸识别
import cv2 as cv
import numpy as np

def face_Detect(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    #把下载好的Haar特征数据文件放在指定文件下,利用cv.CascadeClassifier类实例化读入
    face_detector = cv.CascadeClassifier("F:\jupytertf\haarcascade_frontalface_alt_tree.xml")
    #把下载好的LBP特征数据文件放在指定文件下,利用cv.CascadeClassifier类实例化读入
    #face_detector = cv.CascadeClassifier("F:\jupytertf\lbpcascade_frontalcatface.xml")
    #如果检测不出来人脸需要对函数detectMultiScale后面的两个参数进行调整
    #detectMultiScale该函数表示在多个尺度空间对其进行人脸检测,
    #参数2:1.01表示上下尺度为原图像的1.01倍。
    #参数3,表示一个人脸被框了几次才认为是人脸,如果过高有可能检测不出来人脸;过低,有可能检测出来不是人脸
    faces = face_detector.detectMultiScale(gray, 1.01, 1)
    for x, y, w, h in faces:
        #利用画矩形框的函数将人脸框出
        #(0, 0, 255)表示颜色,2表示线宽
        cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
        #显示检测结果
    cv.imshow("Face_Detect", image)
src = cv.imread(r'F:\OutputResult\SrcImage\lena.jpg')
#可选择性地将原图像缩放至规定尺寸
src=cv.resize(src,(512,512),cv.INTER_CUBIC)
cv.imshow("src",src)
face_Detect(src)
# #摄像头读取并检测人脸
# #实例化一个capture类
# capture=cv.VideoCapture(0)#参数为0表示从摄像头读取视频,为文件路径表示读取视频文件
# cv.namedWindow("Face_Detect", cv.WINDOW_AUTOSIZE)
# while(True):
#     ret, frame = capture.read()
#     frame = cv.flip(frame, 1)
#     face_Detect(frame)
#     c = cv.waitKey(40)
#     if c == 27: # ESC
#         break

cv.waitKey(0)
cv.destroyAllWindows()

函数:

cv.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]])

在输入图像中检测不同大小的对象。检测到的对象作为矩形列表返回。其中每个矩形包含检测到的对象,矩形可能部分位于原始图像之外。
image:包含检测到对象的图像的cv_8u类型的参数图像矩阵。

scaleFactor参数:指定在每个图像比例下图像大小减小的程度。

minneighbors参数:指定每个候选矩形应保留多少邻居。

flags:为与函数cvhaardetectobjects中相同的旧级联含义。它不用于新的级联。

minSize:最小可能对象大小。小于的对象将被忽略。

maxSize:最大可能对象大小。大于的对象将被忽略。如果“maxsize==minsize”,则模型将按单个比例进行计算。

 

检测结果:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐