2021-09-17 python软件设计 练习2

引言

Python之父Guido

他的个人页面:Guido's Personal Home Page


本次课开始学习利用OpenCV、Dlib、Face-Recognition进行人脸识别

三步:定位,对齐,识别

1.使用OpenCV定位多个人脸

import cv2
import os
import matplotlib.pyplot as plt

os.chdir('D:\python\Lib\site-packages\cv2') #改变当前工作目录到指定的路径(分类器文件夹位置)


def detect(filename):
    face_cascade = cv2.CascadeClassifier('D:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    
    img = cv2.imread(filename) #图片放在和.py一个文件夹里,即cv2文件夹
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将BGR图片转换为灰度图像再用已有的分类器模型识别人脸
    
    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)
    plt.imshow(img)
    plt.axis('off')
    plt.show()

detect('face.jpg')

①关于os.getcwd()和os.chdir()

os.getcwd()   获得当前的路径

需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。

>>>import  os

>>>print  os.getcwd()

D:\Program Files\Python27 

这里的目录即是python的安装目录。若把上面的两行语句保存为getcwd.py,保存于E:\python\盘,运行后显示是E:\python

os.chdir()    修改当前工作目录到指定的路径

os.chdir( path ) 

path – 要切换到的新路径

②生成结果

2021-09-17 python软件设计 练习2

 

 

 

 


2.使用Face-recognition提高精确度

face_recognition依赖于dlib,dlib依赖于openCV

安装包下载链接: https://pypi.org/project

 

Built using dlib’s state-of-the-art face recognition built with deep learning. The model has an accuracy of 99.38% on the Labeled Faces in the Wild benchmark.

Labeled Faces in the Wild

import face_recognition

image=face_recognition.load_image_file("photo.jpg")
face_locations=face_recognition.face_locations(image)

face_num2=len(face_locations)
print(face_num2)#The number of faces
org=cv2.imread("photo.jpg")

for i in range(0,face_num2):
    top=face_locations[i][0]
    right=face_locations[i][1]
    bottom=face_locations[i][2]
    left=face_locations[i][3]
    
    start=(left,top)
    end=(right,bottom)
    color=(255,0,0)
    thickness=5
    img=cv2.rectangle(org,start,end,color,thickness)   # opencv 里面画矩形的函数
    plt.imshow(img)
    plt.axis('off')
plt.show()

生成结果

2021-09-17 python软件设计 练习2

 

 


3.使用深度学习更加精确的CNN(卷积神经网络)

人脸检测模型默认使用HOG算法,也可以使用CNN。

hog在cpu上的准确性较低,但速度更快。cnn是一个更精确的深度学习模型。

import face_recognition
import cv2
import matplotlib.pyplot as plt

image = face_recognition.load_image_file("photo.jpg")
face_locations_useCNN = face_recognition.face_locations(image,model='cnn')

face_num1=len(face_locations_useCNN)
print(face_num1)       # The number of faces
org = cv2.imread("photo.jpg")

for i in range(0,face_num1):
    top = face_locations_useCNN[i][0]
    right = face_locations_useCNN[i][1]
    bottom = face_locations_useCNN[i][2]
    left = face_locations_useCNN[i][3]

    start = (left, top)
    end = (right, bottom)

    color = (0,255,255)
    thickness = 2
    img=cv2.rectangle(org, start, end, color, thickness)
    plt.imshow(img)
    plt.axis('off') 
plt.show()

①理解HOG和CNN

HOG是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。在一副图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好地描述。

CNN(卷积神经网络)是所有深度学习课程、书籍必教的模型,CNN在影像识别方面的为例特别强大,许多影像识别的模型也都是以CNN的架构为基础去做延伸。

②生成结果

2021-09-17 python软件设计 练习2

 

 


 

上一篇:超级黑科技代码!Python打造电脑人脸屏幕解锁神器附带接头暗号


下一篇:scipy库(2)