美文网首页
人脸检测

人脸检测

作者: 码农啊涛 | 来源:发表于2020-02-03 15:18 被阅读0次

    我们可以使用Haar 分类器进行面部检测。

    什么是Haar 分类器

    以 Haar 特征分类器为基础的对象检测技术是一种非常有效的对象检测

    技术。它是基于机器学习的,通过使用大量的正负样本图像训练得到一个

    cascade_function,最后再用它来做对象检测。

    开始时,算法需要大量的正样本图像(面部图像)和负样本图像(不含面部

    的图像)来训练分类器。我们需要从其中提取特征。下图中的Haar 特征会被

    使用。它们就像我们的卷积核。每一个特征是一个值,这个值等于黑色矩形

    中的像素值之后减去白色矩形中的像素值之和。      

    使用所有可能的核来计算足够多的特征。(想象一下这需要多少计算量?仅

    仅是一个24x24 的窗口就有 160000 个特征)。对于每一个特征的计算我们

    好需要计算白色和黑色矩形内的像素和。


    因为OpenCV 自带了训练器和检测器。如果你想自己训练一个分类器来检测

    汽车,飞机等的话,可以使用OpenCV 构建。

    现在我们来学习一下如何使用检测器。 OpenCV 已经包含了很多已经训练

    好的分类器,其中包括:面部,眼睛,微笑等。下面我们将使用 OpenCV 

    创建一个面部和眼部检测器。首先我们要加载需要的XML 分类器。然后以

    灰度格式加载输入图像或者是视频。

    # -*- coding: utf-8 -*-

    import numpy as np

    import cv2

    #加入脸部和眼部分类器xml

    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

    eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

    img = cv2.imread('face.jpg')

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    

    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:

            #框出面部

            img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

            roi_gray = gray[y:y+h, x:x+w]

            roi_color = img[y:y+h, x:x+w]

            eyes = eye_cascade.detectMultiScale(roi_gray)

            for (ex,ey,ew,eh) in eyes:

                    #框出眼睛

                    cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

    cv2.imshow('img',img)

    cv2.waitKey(0)

    cv2.destroyAllWindows() 

    相关文章

      网友评论

          本文标题:人脸检测

          本文链接:https://www.haomeiwen.com/subject/tophxhtx.html