python+OpenCv+dlib实现人脸68个关键点检测并标注
2018-02-10 12:13
1146 查看
寒假跟着老师做科技部的项目,主要做微表情的检测。刚开始一头雾水,在研究了两天之后,渐渐找到了一点感觉。 ——这里主要实现了利用python3.6 + OpenCV + dlib 实现人脸68个关键点检测并标注 。
python3.6下dlib的配置
利用提供的训练模型进行人脸检测
使用OpenCV进行标注
对应Anaconda的安装在这里不是重点,就不多说了。没有安装过的可以去找度娘。
pip install dlib==19.7.0
注意:直接输入安装dlib可能会出错,因为可能最新版无whl格式的安装包,所以建议安装19.7.0版本,可以跳过安装boost和Cmake。
等待安装成功!
实现的68个特征点标定功能如下图所示:
dlib中为我们提供了关于人脸检测标注训练好的文件可在http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2下载
(下载完成后解压到工程目录下)
2. 存入68个点坐标
3. 利用 cv2.circle 来画68个点
4. 利用 cv2.putText() 函数来画数字1-68
作者 @culeao
2018 年 02月 08日
python3.6下dlib的配置
利用提供的训练模型进行人脸检测
使用OpenCV进行标注
python3.6 下 dlib 的配置
dlib在python下的配置反反复复一直在折腾,一会说编码错误,一会又查资料说需要安装编译boost和Cmake等其他软件环境。反复查找资料后,这里给出一种简单快速地安装方法,不需要安装编译boost和Cmake等其他软件环境。对应Anaconda的安装在这里不是重点,就不多说了。没有安装过的可以去找度娘。
第一步
使用Anaconda创建一个Python版本为3.6的Python环境。第二步
在终端中打开环境。第三步
输入:pip install dlib==19.7.0
注意:直接输入安装dlib可能会出错,因为可能最新版无whl格式的安装包,所以建议安装19.7.0版本,可以跳过安装boost和Cmake。
等待安装成功!
人脸检测 + 标注
利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号;
实现的68个特征点标定功能如下图所示:
设计流程
工作内容主要以下两大块:68点标定 和 OpenCv绘点68点标定:
借助官方的训练模型实现;dlib中为我们提供了关于人脸检测标注训练好的文件可在http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2下载
(下载完成后解压到工程目录下)
OpenCv绘点:
介绍了用到的 画圆函数cv2.circle() 和 输出字符串函数 cv2.putText() ;流程:
1. 调用dlib库来进行人脸识别,调用预测器“shape_predictor_68_face_landmarks.dat”进行68点标定2. 存入68个点坐标
3. 利用 cv2.circle 来画68个点
4. 利用 cv2.putText() 函数来画数字1-68
程序展示
# _*_ coding:utf-8 _*_ import numpy as np import 8be8 cv2 import dlib detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') # cv2读取图像 img = cv2.imread("1.jpg") # 取灰度 img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 人脸数rects rects = detector(img_gray, 0) for i in range(len(rects)): landmarks = np.matrix([[p.x, p.y] for p in predictor(img,rects[i]).parts()]) for idx, point in enumerate(landmarks): # 68点的坐标 pos = (point[0, 0], point[0, 1]) print(idx,pos) # 利用cv2.circle给每个特征点画一个圈,共68个 cv2.circle(img, pos, 5, color=(0, 255, 0)) # 利用cv2.putText输出1-68 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, str(idx+1), pos, font, 0.8, (0, 0, 255), 1,cv2.LINE_AA) cv2.namedWindow("img", 2) cv2.imshow("img", img) cv2.waitKey(0)
结果展示
作者 @culeao
2018 年 02月 08日
相关文章推荐
- python下通过dlib和opencv实现人脸对齐(包括关键点检测和仿射变换)
- OpenCV+Dlib实现人脸68个特征点检测
- 用dlib和opencv进行不同角度人脸检测及68个关键点提取(Python)
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)
- python进阶之python-opencv实现人脸检测
- 基于python OpenCV实现动态人脸检测
- Python基于OpenCV实现视频的人脸检测
- python︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图
- python结合opencv实现人脸检测与跟踪
- python 调用摄像头,基于opencv 的人脸检测实现
- 25行 Python 代码实现人脸检测——OpenCV 技术教程
- python结合opencv实现人脸检测与跟踪
- Python基于OpenCV实现视频的人脸检测
- 基于OpenCV的人脸检测——C++和Python实现
- Python利用OpenCV实现人脸检测
- Dlib人脸检测及关键点描述的python实现
- python脚本实现给定标注bbox,landmark在原图中显示人脸框,人脸关键点
- 【OpenCV】简单的Python实现人脸检测
- python + opencv 实现人脸检测
- 结合OpenCV摄像头使用Dlib库进行人脸检测及标注特征点和提取人脸特征-Python