python实战篇(一)----人脸检测与识别

    从本篇文章开始,我们将同大家一起来学习python实战篇的内容,为了能够尽快的的能够掌握python编程语言,python实战篇与python提升篇将会不定期的进行交叉更新,顾名思义,实战的内容,将会从具体的项目和要求出发,提升篇的内容将会从Python基础之上进一步加强,也许是一个题目,也许是一个小的设计,总之,我们最后的目的就是:让大家在实战中掌握python,在提升中理解python的灵活运用。另外,由于在以后的内容中,代码的量可能越来越大,对于代码量少的,我们可以直接粘贴进入公众号,对于多的,我们仅仅附上key point(关键部分),比如具体函数啊,逻辑思路等等,同时Python提供了打包功能,如果大家觉得代码运行来不及或者来不及配置环境等等,请记得私聊我们,我们可以将代码打包成可执行文件,你拿到后就像普通软件一样,直接运行就好,期待,后面的内容能够激发大家的学习兴趣!

    言归正传,进入今天的主题---人脸检测与识别,人脸检测就是将人脸的特征点进行提取,识别就是在提取特征点的基础上,根据每个人特征点的不同,进行不同的识别出那幅人脸属于张三,那幅人脸属于李四,等等。。

    在后面的项目中,我们可能时常用到一个叫opencv的函数库,里面包含了图像处理,计算机视觉的很多函数在里面,它的存在,让我们减少了很多的代码量,便于快速集成我们的应用,便利之及啊.....


一、人脸检测


    本次人脸检测和识别,主要用到下面的代码:


#人脸分类器
detector = dlib.get_frontal_face_detector()
# 获取人脸检测器
predictor = dlib.shape_predictor(
"./face_recognition/shape_predictor_68_face_landmarks.dat"
)

    

    该文件为检测人脸68个特征点的文件

    ./face_recognition/shape_predictor_68_face_landmarks.dat


    读入一张图片进行人脸检测:


#coding=utf-8
import cv2
import dlib

path = "person2.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


下面是全部代码:

#coding=utf-8
import cv2
import dlib

path = "person2.jpg"
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#人脸分类器
detector = dlib.get_frontal_face_detector()
# 获取人脸检测器
predictor = dlib.shape_predictor(
"./face_recognition/shape_predictor_68_face_landmarks.dat"
)
dets = detector(gray, 1)
for face in dets:
shape = predictor(img, face) # 寻找人脸的68个标定点
# 遍历所有点,打印出其坐标,并圈出来
for pt in shape.parts():
pt_pos = (pt.x, pt.y)
cv2.circle(img, pt_pos, 2, (0, 255, 0), 1)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


请看运行结果:

python实战篇(一)----人脸检测与识别


    图中人物脸上得到的绿色特征点就是通过代码检测出来的。


二、人脸识别

    人脸识别的最终目的是将不同的人识别出来,然后用方框框选出来。


代码如下:

    

import cv2
filename = "../person2.jpg"
def detect(filename):
face_cascade =cv2.CascadeClassifier("./\cascades/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("xxx")
cv2.imshow("xxx",img)
cv2.imwrite("2.jpg",img)
cv2.waitKey(0)
detect(filename)


代码中这一句为opencv中集成好的人脸识别检测器,可以拿来直接使用:


face_cascade =cv2.CascadeClassifier("./\cascades/haarcascade_frontalfa


运行效果如下:

python实战篇(一)----人脸检测与识别

    可以明显的观察到,图中的人脸已经被框选出来,效果良好。

备注:文中图片来源于网络,如有侵权,请联系删除。



小结:今天的内容分享结束了,我们从人脸检测出发,再到人脸识别,分享了一个较为简单的例子,旨在对python的进一步学习,后面,我们会再以实际的例子进行分享,我们,下期再会。