简单人脸检测

1.1 Haar特征分类器介绍

Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。

Haar特征分类器存放目录:

D:\wsbSoft\Anaconda3\envs\tensorflow\Library\etc\haarcascades,根据命名就可以很快知道各个分类器的用途

1.2 detectMultiScale函数详解

cvHaarDetectObjects是opencv1中的函数,opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用:

void detectMultiScale(
    const Mat& image,	
    CV_OUT vector<Rect>& objects,	
    double scaleFactor = 1.1,	
    int minNeighbors = 3, 	
    int flags = 0,	
    Size minSize = Size(),	
    Size maxSize = Size()
);

函数介绍:

参数1:image--待检测图片,一般为灰度图像加快检测速度;

参数2:objects--被检测物体的矩形框向量组;

参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;

参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0,则函数不做任何操作就返回所有的被检候选矩形框, 这种设定值一般用在用户自定义对检测结果的组合程序上;

参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域;

参数6、7:minSize和maxSize用来限制得到的目标区域的范围。

1.3 实例应用

1.3.1 图片人脸检测
 

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 人脸分类器 D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml
# 人脸分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml')
# 人眼分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_eye.xml')
# hfa文件就是haarcascade_frontalface_alt_tree.xml的当前路径

#图片人脸检测
def face_image():
    face = cv2.CascadeClassifier('hfa.xml')
    img = cv2.imread('girl.jpg',cv2.IMREAD_UNCHANGED)
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    faces = face.detectMultiScale(gray)
    print(faces)
    for x,y,w,h in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        cv2.imshow('face_image',img)
    cv2.waitKey()
    cv2.destroyAllWindows()

face_image()        #调用图像人脸检测函数

1.3.2 摄像头人脸检测

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 人脸分类器 D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml
# 人脸分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml')
# 人眼分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_eye.xml')
# hfa文件就是haarcascade_frontalface_alt_tree.xml的当前路径


#摄像头人脸检测
def face_came():
    face = cv2.CascadeClassifier('hfa.xml')
    capture = cv2.VideoCapture(0)
    while(True):
        ret,frame = capture.read()
        if ret is False:
            break
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        faces = face.detectMultiScale(gray,1.1,3,0,(100,100))
        for(x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            cv2.imshow('face_came',frame)
        c = cv2.waitKey(10)
        if c == 27:
            break
    capture.release()
    cv2.destroyAllWindows()

face_came()        #摄像头人脸检测
摄像头人脸检测
摄像头人脸检测

1.3.3 视频人脸检测

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 人脸分类器 D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml
# 人脸分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_frontalface_alt_tree.xml')
# 人眼分类器 face = cv2.CascadeClassifier('D:\\wsbSoft\\Anaconda3\\envs\\tensorflow\\Library\\etc\\haarcascades\\haarcascade_eye.xml')
# hfa文件就是haarcascade_frontalface_alt_tree.xml的当前路径


#视频人脸检测
def face_video():
    face_detector = cv2.CascadeClassifier('hfa.xml')
    capture = cv2.VideoCapture('001.avi')
    while(True):
        ret,frame = capture.read()
        if ret is False:
            break
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        faces = face_detector.detectMultiScale(gray,1.1,3,0,(100,100))
        for x,y,w,h in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
            cv2.imshow('face_video',frame)
        c = cv2.waitKey(10)
        if c==27:
            break
    capture.release()
    cv2.destroyAllWindows()

face_video()        #视频人脸检测
视频人脸检测
视频人脸检测

 

如果要识别人体的其它部位,只需将上面的haarcascade_frontalface_alt2.xml分类器替换即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算机视觉通常是指计算机通过控制和应用传感器等设备对周围的环境进行获取的过程,然后对获取的视觉信息进行后期加工,包括表示、压缩、分析、处理、储存等,进而实现人类视觉所具有的“看”的功能。近年来计算机技术、光电技术和自动化技术的飞速发展,促成了计算机视觉系统的出现,同时随着人类生产生活需求的不断提高,视觉化、智能化的解决方案也越来越广泛的应用于工业生产、医疗和军事等领域,计算机视觉技术已经成为各国研究者关注和研究的热点。对计算机视觉系统的研究无论是在理论研究还是实际应用方面都有巨大的价值和意义。 基于图像的人体检测跟踪和人脸识别是当今计算机视觉和模式识别领域的热点研究问题,它在图像处理、智能监控、智能汽车等领域有着广泛的应用前景。本文针对人体检测跟踪和人脸识别中的一些关键问题进行研究,并取得了一定的进展,具体有如下四个方面:在人体检测方面,图像中复杂背景的变化对人体检测产生了负面的影响,比如产生空洞或者噪声,针对此类问题本文提出了基于二次连通域处理的人体检测方法,算法采用三帧差法提取运动目标,在得到二值图像后,运用数学形态学方法对二值图像进行膨胀腐蚀处理,接着利用四方向连接法和连通域三次扫描标记法去除空洞并连接断开的区域,最后利用HOG特征训练分类器来识别运动目标是否是人体。与传统方法不同的是,本文采用的四方向连接和连通域三次扫描标记法对于运动目标存在的空洞弥补效果更好,可以更加准确的连接断开区域,该方法对运动物体所在的环境没有约束,计算量较小,准确性高。实验结果表明,该方法是一种对于背景有一定鲁棒性的人体检测方法。 在人体跟踪方面,经典的Meanshift算法被广泛的用于计算机视觉和模式识别领域,但是当背景扰动的时候会使跟踪的准确性降低,针对此类问题本文提出了基于改进Meanshift的人体跟踪方法,算法通过判别跟踪区域是背景区域或前景区域来设置权重系数,进而实现定位更加准确的运动人体跟踪。与现有的方法相比,该方法减少了背景区域的计算量,同时将跟踪区域精确到运动人体,结合卡尔曼滤波器来预测运动人体下一步的方向,使得跟踪效果更好。实验结果表明,改进的方法相比传统Meanshift算法在准确度上要更加出色. 在光照预处理方面,由于光照对于人脸识别有重要的影响,比如高光、低光、单侧光等都会导致人脸识别率降低、误识率升高等一系列问题,所以本文提出了一种改进的高斯差分滤波光照预处理方法,通过改变高斯差分滤波器的水平方向和垂直方向的参
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值