OpenCV+Python 人脸识别 | Haar级联(检测)& Eigenfaces算法(识别)

本文详细介绍了如何使用OpenCV3和Python进行人脸识别,涵盖了Haar级联分类器进行人脸检测,以及Eigenfaces算法实现人脸识别。文中包括静态图片和视频流的实时检测,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

访问请移步至(David’s Wikipedia) https://www.qingdujun.com/ ,这里有能“击穿”平行宇宙的乱序并行字节流…


本文包括两部分:人脸检测、人脸识别。其中人脸检测主要采用了Haar级联分类器,采用Eigenfaces算法实现了人脸识别。

注:环境为OpenCV3与Python3.6。


目录:

人脸检测

首先,看下Haar级联分类器,Haar特征都描述了相邻图像区域的对比模式。例如,边、顶点和细线都能生成具有判别性的特征。

  • 具有尺度不变性;
  • 不具有旋转不变性。

OpenCV3有个data/haarcascades文件夹,包含了所有OpenCV的人脸检测XML文件。

  • haarcascade_eye.xml
  • haarcascade_eye_tree_eyeglasses.xml
  • haarcascade_frontalcatface.xml
  • haarcascade_frontalcatface_extended.xml
  • haarcascade_frontalface_alt.xml
  • haarcascade_frontalface_alt_tree.xml
  • haarcascade_frontalface_alt2.xml
  • haarcascade_frontalface_default.xml
  • haarcascade_fullbody.xml
  • haarcascade_lefteye_2splits.xml
  • haarcascade_licence_plate_rus_16stages.xml
  • haarcascade_lowerbody.xml
  • haarcascade_profileface.xml
  • haarcascade_righteye_2splits.xml
  • haarcascade_russian_plate_number.xml
  • haarcascade_smile.xml
  • haarcascade_upperbody.xml

detectMultiScale(gray,
1.3, # scaleFactor图像的压缩率
5 # minNeighbors人脸矩形保留近邻数目的最小值
)

根据检测结果,可以看到,OpenCV人脸检测效果好像并不太好。

(青涩的胡歌)
这里写图片描述

静态图片检测

OpenCV自带的haarcascade_frontalface_default.xml,在cv2/data/目录下能找到,或者直接使用EveryThing类似的检索工具磁盘检索一下。

static_face_detect.py

# -*- coding: utf-8 -*-
import cv2

def detect(filename):
    face_cascade = cv2.CascadeClassifier(
            r'C:\AppInstall\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    
    img = cv2.imread(filename)
    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)
    
    cv2.namedWindow('Person Detected!')
    cv2.imshow('Person Detected!',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    detect(r'C:\Users\qingdujun\Desktop\huge.jpg')
    

视频流实时检测

视频流实时检测与静态图片技术差不多,只不过多了一个视频帧读取的过程。当然,以下也检测了一下眼睛的位置。

video_face_detect.py

# -*- coding: utf-8 -*-
import cv2

def detect():
    face_cascade = cv2.CascadeClassifier(
            r'C:\AppInstall\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier(
            r'C:\AppInstall\Anaconda3\Lib\site-packages\cv2\data\haarcascade_eye.xml')
    
    camera = cv2.VideoCapture(0
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值