基于OpenCV-Python实现的人脸识别

在初步学习了数字图像处理的相关知识并在Matlab进行了初步的模拟后,我将学习的中重点转向了Python环境下的OpenCV库的学习,以此博客记录一下学习的进程,本文章代码主要参考OpenCV库源代码、刘波译的《OpenCV3计算机视觉Pythond实现》中第五章的主要内容。

目录

一、静态人脸识别

一、加载Haar相关文件

二、静态人脸识别

三、代码分析


一、静态人脸识别

一、加载Haar相关文件

        我们可以使用OpenCV自带的源代码副本实现静态下的人脸识别,使用命令符 windows+R输入cmd打开操作命令符,输入pip show opencv-python找到opencv的相应位置,将文件夹date中的harrcascades的全部xml文件复制进项目的子文件中。        基于OpenCV-Python实现的人脸识别_第1张图片

        粗略阅读文件名可知该xml文件主要应用的识别范围,本文章主要应用frontface_default和eye进行后续操作。

二、静态人脸识别

        在pycharm中项目文件下创建脚本,实现静态下的人脸检测,此时我已将待检测图片OIP-C放在项目文件下。

import cv2

filename = 'OIP-C.jpg'
pathface = 'B:\\Python\Practic\Face recogntion\cascades\haarcascade_frontalface_default.xml'

def detect( filename ):
    
    face_cascade = cv2.CascadeClassifier( pathface )

    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('Face recogntion')
    cv2.imshow('Face recongtion', img)
    cv2.imwrite('./Try.jpg', img)
    cv2.waitKey(0)

detect(filename)

基于OpenCV-Python实现的人脸识别_第2张图片

 

 注:在测试过程中,若不指定xml文件的具体路径有可能导致出错

三、代码分析

        

filename = 'OIP-C.jpg'
pathface = 'B:\\Python\Practic\Face recogntion\cascades\haarcascade_frontalface_default.xml'

         在import cv2后进行的预准备代码,指定图片和所用对象的路径。


def detect( filename ):
    
    face_cascade = cv2.CascadeClassifier( pathface )

    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('Face recogntion')
    cv2.imshow('Face recongtion', img)
    cv2.imwrite('./Try.jpg', img)
    cv2.waitKey(0)

        定义识别函数,新建对象face_cascade,后续将用此对象调用函数完成图像识别,读入图像,将其转为灰度图像,使用face_cascade.detectMultiScale(gray, 1.3, 5)方法对图像进行识别,其中1.3为每次迭代时图像的压缩率,5为每个人脸矩阵保留临近数目的最小值,

        

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

        用该函数访问识别后的数组,使用rectang方法对其进行框选,(255,0,0)表示BGR中的B通道开启,其余两通道关闭,2为线的大小。

你可能感兴趣的:(Computer,Vision,python,计算机视觉,opencv)