Python人脸识别(1)——人脸检测(静态照片)

文章目录

  • 前言
  • 1 环境配置
  • 2 准备素材
  • 3 编写程序
  • 3 效果检测
  • 4 总结

前言

  接下来开始学习使用python+opencv进行人脸识别功能,但今天先不做人脸识别,先做人脸检测,要实现给你一张照片要准确的再照片上找到人脸,并将人脸框起来。

1 环境配置

  要使用opencv我们得先安装相关库。命令行输入“pip install opencv-python”回车执行进行安装

2 准备素材

  接下来准备几张需要检测人脸的照片,照片命名尽量言简意赅,方便调用。

例:我准备了三张照片,分别是大一,大二,大三的照片,本打算做人脸识别,判断这三张照片是不是同一人,但今天先拿来做人脸检测实验。
Python人脸识别(1)——人脸检测(静态照片)_第1张图片

3 编写程序

其实人脸检测程序只有一个,但要检测三张照片,后面的代码基本相同,所以就直接复制了。
首先导入三张照片,再用人脸级联分类器进行人脸检测,这里顺便加了一个人眼检测,不仅要检测到人脸还要检测到人眼。最后将人脸和人眼用不同颜色的线条框起来

import cv2  # 导入相关库
img1 = cv2.imread(r'C:\Users\DELL\Desktop\face_test\image\1.jpg',1)  # 导入照片
img2 = cv2.imread(r'C:\Users\DELL\Desktop\face_test\image\2.jpg',1)  # 导入照片
img3 = cv2.imread(r'C:\Users\DELL\Desktop\face_test\image\3.jpg',1)  # 导入照片
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')  # 人脸检测
eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_eye.xml')  # 人眼检测
# 照片1处理
face1 = face_engine.detectMultiScale(img1,scaleFactor=1.3,minNeighbors=5)  # 参数可调,有利于分辨
for (x1,y1,w1,h1)in face1:
    img1 = cv2.rectangle(img1,(x1,y1),(x1+w1,y1+h1),(255,0,0),2)  # 脸部框图绘制
    face_area1 = img1[y1:y1+h1,x1:x1+w1]  # 将眼部检测区域范围缩小,减少检测时间
    eye1 = eye_engine.detectMultiScale(face_area1,1.3,10)
    for (ex1,ey1,ew1,eh1) in eye1:
        cv2.rectangle(face_area1,(ex1,ey1),(ex1+ew1,ey1+eh1),(0,255,0),1)  # 眼部框图绘制
# 照片2处理
face2 = face_engine.detectMultiScale(img2,scaleFactor=1.2,minNeighbors=2)  # 参数可调,有利于分辨
for (x2,y2,w2,h2)in face2:
    img2 = cv2.rectangle(img2,(x2,y2),(x2+w2,y2+h2),(255,0,0),2)  # 脸部框图绘制
    face_area2 = img2[y2:y2+h2,x2:x2+w2]  # 将眼部检测区域范围缩小,减少检测时间
    eye2 = eye_engine.detectMultiScale(face_area2,1.3,10)
    for (ex2,ey2,ew2,eh2) in eye2:
        cv2.rectangle(face_area2,(ex2,ey2),(ex2+ew2,ey2+eh2),(0,255,0),1)  # 眼部框图绘制
# 照片3处理
face3 = face_engine.detectMultiScale(img3,scaleFactor=1.3,minNeighbors=5)  # 参数可调,有利于分辨
for (x3,y3,w3,h3)in face3:
    img3 = cv2.rectangle(img3,(x3,y3),(x3+w3,y3+h3),(255,0,0),2)  # 脸部框图绘制
    face_area3 = img3[y3:y3+h3,x3:x3+w3]  # 将眼部检测区域范围缩小,减少检测时间
    eye3 = eye_engine.detectMultiScale(face_area3,1.3,10)
    for (ex3,ey3,ew3,eh3) in eye3:
        cv2.rectangle(face_area3,(ex3,ey3),(ex3+ew3,ey3+eh3),(0,255,0),1)  # 眼部框图绘制
cv2.imshow('1', img1)  # 大一照片人脸检测展示
cv2.imshow("2", img2)  # 大二照片人脸检测展示
cv2.imshow("3", img3)  # 大三照片人脸检测展示
cv2.waitKey(0)  # 循环
cv2.destroyAllWindows()

到这里代码就全部结束了,接下来看看展示效果。

3 效果检测


这里特别注意,在检测第二张图片时,我将检测的精准度调小了,因为第二张是偏侧脸,精准度太高的话,会识别不到脸。

Python人脸识别(1)——人脸检测(静态照片)_第2张图片

4 总结

  今天先做静态照片的人脸检测,接下来做动态的人脸检测,之后再做静态和动态的人脸识别,一步一步来,这样更容易掌握人脸识别。

你可能感兴趣的:(python学习)