下面是详细的“python使用dlib进行人脸检测和关键点的示例”的攻略。
准备工作
为了使用dlib完成人脸检测和关键点检测,我们需要安装dlib、numpy和opencv-python等依赖库。可以使用如下命令进行安装:
pip install dlib
pip install numpy
pip install opencv-python
示例1
我们将使用上文所述的依赖库及其功能,对一张包含人脸的图片进行人脸检测和关键点检测。
代码如下:
import dlib
import cv2
import numpy as np
# 加载dlib的人脸检测模型和关键点检测模型
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 读取图片
img = cv2.imread("face.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = detector(gray, 1)
# 针对每个人脸,进行关键点检测
for (i, face) in enumerate(faces):
shape = predictor(gray, face)
shape = np.asarray([(p.x, p.y) for p in shape.parts()])
# 绘制关键点
for (x, y) in shape:
cv2.circle(img, (x, y), 2, (0, 255, 0), -1)
# 显示图片
cv2.imshow("Output", img)
cv2.waitKey(0)
说明:
- 代码中首先加载了dlib的人脸检测模型和关键点检测模型,需要先下载这两个模型,这里使用的是已经训练好的68个关键点模型
shape_predictor_68_face_landmarks.dat
。 - 针对每个图片,我们通过dlib的人脸检测模型识别出图片中的人脸,并将其用一个矩形框进行标注。
- 对于每个人脸,我们再应用关键点检测模型识别出68个关键点的坐标,并用一个圆点进行标注。
示例2
下面我们将使用摄像头来进行实时人脸检测和关键点检测,以达到实时识别人脸的目的。
代码如下:
import dlib
import cv2
import numpy as np
# 加载dlib的人脸检测模型和关键点检测模型
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 打开默认的摄像头,并设置分辨率
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, frame = cap.read()
# 将视频帧转化为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = detector(gray, 1)
# 针对每个人脸,进行关键点检测
for (i, face) in enumerate(faces):
shape = predictor(gray, face)
shape = np.asarray([(p.x, p.y) for p in shape.parts()])
# 绘制关键点
for (x, y) in shape:
cv2.circle(frame, (x, y), 2, (0, 255, 0), -1)
# 显示视频帧
cv2.imshow("Frame", frame)
# 按下q退出窗口
if cv2.waitKey(1) == ord("q"):
break
# 关闭打开的摄像头和窗口
cap.release()
cv2.destroyAllWindows()
说明:
- 在代码中,我们首先加载了dlib的人脸检测模型和关键点检测模型。
- 通过cv2.VideoCapture(0)打开摄像头,可以用
cap.set(3, 640)
、cap.set(4, 480)
指定分辨率。获取实时图像。 - 针对每个视频帧,我们先将其转化为灰度图像,然后通过dlib的人脸检测模型识别出图像中的人脸,并画出矩形框。
- 对于每个人脸,我们再应用关键点检测模型识别出68个关键点的坐标,并用一个圆点进行标注。
- 最后使用cv2.imshow()将处理后的图像进行显示,按下q退出循环,释放打开的摄像头和窗口。
这样我们就能够完成实时人脸检测和关键点检测了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用dlib进行人脸检测和关键点的示例 - Python技术站