分享一个使用 Python 提取人脸特征点的例子
一. 先看结果
原图如下
图片来自网络,如有侵权请联系作者删除
二. 主要使用了dlib 库
- 安装 dlib 库,直接使用编译好的 dlib 库。也可以从源码编译,比较麻烦。安装命令
sudo pip install dlib --verbose
- 人脸特征点提取代码如下,代码量也很少
import sys
import os
import dlib
import glob
import cv2
import time
if len(sys.argv) != 3:
print(
"第一个参数为模型路径\n"
"第二个参数为图片路径\n"
"使用方法如下:\n"
"python ./face_landmark_detection.py shape_predictor_68_face_landmarks.dat ./test.jpg\n"
"可以从以下网址下载训练好的模型:\n"
"http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2")
exit()
#模型路径
predictor_path = sys.argv[1]
#图片路径
face_path = sys.argv[2]
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)
print("正在处理的图片: {}".format(face_path))
img = cv2.imread(face_path)
dets = detector(img, 1)
print("检测到的人脸个数: {}".format(len(dets)))
for k, d in enumerate(dets):
#提取出体征点
shape = predictor(img, d)
for pt in shape.parts():
pt_pos = (pt.x, pt.y)
#将特征点绘制到图片
cv2.circle(img, pt_pos, 2, (203, 192, 255), -1)
#显示图片
cv2.imshow("image", img)
nowTime = time.localtime()
filename = "result_" + str(nowTime.tm_mday)+str(nowTime.tm_hour)+str(nowTime.tm_min)+str(nowTime.tm_sec)+".jpg"
cv2.imwrite(filename, img)
#在选中当前图片窗口下,等待任意键被按下
key = cv2.waitKey(0)
cv2.destroyAllWindows()
- 执行命令
python ./face_landmark_detection.py ./shape_predictor_68_face_landmarks.dat ./test.jpg
face_landmark_detection.py 为 Python 程序脚本文件,shape_predictor_68_face_landmarks.dat 为训练好的模型,可以从 模型地址 下载;test.jpg 为要提取特征点的图片
显示图片后,如果要关掉窗口,要选中图片窗口,按任意键退出,不是在控制台输入任意键。如果无法退出,按 ctr + z 组合键强制退出,或者在程序坞鼠标右键选中强制退出。
三 . 小结
这次分享了使用 Python 提取人脸特征点的一个例子,主要用到了 Dlib。关于 Dlib 可以在 Dlib 官网 和 Dlib github 仓库,获取更多相关信息
欢迎扫码关注公众号,一起讨论交流