Python-opencv图像识别学习日记(1)——人脸检测

一、前言

  • 第一次写博客,直接用的编辑器的模板,记录一下图像识别的学习过程…。之前一直对人脸识别、机器视觉等方面很感兴趣,利用课余时间学习一下,暂时不指望做出成型的项目,做点小东西(人脸门禁之类的)练练手。如有纰漏望指出…

二、准备阶段

  1. 一台安装了python3电脑(废话);
  2. 一只摄像头(电脑自带);
  3. 互联网(用于下载插件包);
  4. 一颗爱学习的心哈哈哈哈;

三、 安装OpenCV

  1. 这一步参照了基于Python3.7和opencv的人脸识别(含数据收集,模型训练)使用PIP进行安装
  2. 首先找到Python根目录下的\Python\Lib\site-packages\pip文件夹
  3. 在文件夹目录下右键-在此处打开命令窗口(如果右键没有的话参考度娘教程)
  4. 输入pip.exe启动pip,出现以下命令界面就算启动成功了
    (以下的命令可以复制,然后到cmd光标处右键即可粘贴)
  5. 启动成功后,我们先更新pip到最新版本(因为之前没用最新版本好像安装的numpy会出错,也不知啥原因,望大佬解释。)
    更新命令:python -m pip install --upgrade pip
  6. 然后当然是安装OpenCV的包pip install opencv-python(这一步可能会等很久也可能很快。。如果出现一大坨红色错误,一般重新输一遍安装就好)安装完以后会重新出现刚刚输入命令的光标

四、人脸检测

参照了基于Python3.7和opencv的人脸识别(含数据收集,模型训练)的代码

import numpy as np
import cv2 #导入OpenCV的包
 
# 人脸识别分类器(用于检测脸)
faceCascade = cv2.CascadeClassifier(r'C:\Python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')

# 识别眼睛的分类器(用来检测脸上面的眼睛)
eyeCascade = cv2.CascadeClassifier(r'C:\Python\Lib\site-packages\cv2\data\haarcascade_eye.xml')
 # ↑↑上面的目录记得换成自己Python的目录↑↑

# 开启摄像头    这里的0可以改成1、2等,具体看摄像头
cap = cv2.VideoCapture(0)  
ok = True 
#这里的ok不知道啥意思..望大佬解释
while ok:
    
    #从摄像头获取图片保存到img变量中
    ok, img = cap.read()
   
    # 将摄像头读取到的图片转换成灰度图像储存在gray变量中
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 使用人脸分类器检测图中人脸并将人脸位置、大小储存到faces变量中
    faces = faceCascade.detectMultiScale(
        gray,     
        scaleFactor=1.2, #缩放因子,对图片进行缩放,默认为1.1
        minNeighbors=5, #最小邻居数,默认为3,这我也不知道是啥。。
        minSize=(32, 32) # 最小尺寸,检测出的人脸最小尺寸
    )

    
    for (x, y, w, h) in faces: # 这里x,y,w,h的定义看下面的图片
        fac_gray = gray[y: (y+h), x: (x+w)] # 将整张图片裁剪到脸的大小 方便检测眼睛
        
        result = [] 
        # 在检测人脸的基础上用眼睛分类器检测眼睛并将眼睛位置、大小储存到eyes变量中
        eyes = eyeCascade.detectMultiScale(fac_gray, 1.3, 2)

        # 眼睛坐标的换算,将相对位置换成绝对位置
        for (ex, ey, ew, eh) in eyes:
            result.append((x+ex, y+ey, ew, eh))

    # 画蓝色矩形框住脸
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
	
	# 画绿色矩形框住眼睛
    for (ex, ey, ew, eh) in result:
        cv2.rectangle(img, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
 
 	# 通过窗口显示
    cv2.imshow('video', img)

    k = cv2.waitKey(1)
    if k == 27:    # 按下 'ESC' 退出界面
        break
 
cap.release()
cv2.destroyAllWindows()

opencv图像识别实验 opencv图像识别训练_OpenCV

图片引用自用树莓派实现实时的人脸检测

五、完成

  • 如果不出意外,当你按下F5以后会蹦出一个窗口,然后你的脸就会被蓝色框框框住,眼睛被两个绿色框框框住。
  • 完成了人脸检测,下一步打算研究一下人脸识别。