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

2022-06-01 14:20:04 浏览数 (1)

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

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

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

一、人脸检测

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

代码语言:javascript复制
#人脸分类器
detector = dlib.get_frontal_face_detector()
# 获取人脸检测器
predictor = dlib.shape_predictor(
    "./face_recognition/shape_predictor_68_face_landmarks.dat"
)

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

代码语言:javascript复制
    ./face_recognition/shape_predictor_68_face_landmarks.dat

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

代码语言:javascript复制
#coding=utf-8
import cv2
import dlib

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

下面是全部代码:

代码语言:javascript复制
#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()

请看运行结果:

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

二、人脸识别

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

代码如下:

代码语言:javascript复制
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中集成好的人脸识别检测器,可以拿来直接使用:

代码语言:javascript复制
face_cascade =cv2.CascadeClassifier("./cascades/haarcascade_frontalfa

运行效果如下:

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

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

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

0 人点赞