python3利用Dlib19.7实现人脸68个特征点标定

作者:TimeStamp 时间:2021-05-05 19:13:06 

0.引言

利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号;

实现的68个特征点标定功能如下图所示:

python3利用Dlib19.7实现人脸68个特征点标定

图1 人脸68个特征点的标定 

1.开发环境

python:3.6.3

dlib:19.7

OpenCv, numpy

需要调用的库:


import dlib #人脸识别的库dlib
import numpy as np #数据处理的库numpy
import cv2 #图像处理的库OpenCv

2.设计流程

工作内容主要以下两大块:68点标定OpenCv绘点

68点标定:

借助官方的Demo(face_landmark_detection.py,在之前另一篇博客里面介绍过学习Python3 Dlib19.7进行人脸面部识别)实现;

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

3.源码


# 68-points
# 2017-12-28
# By TimeStamp
# #cnblogs: http://www.cnblogs.com/AdaminXie/
import dlib      #人脸识别的库dlib
import numpy as np    #数据处理的库numpy
import cv2      #图像处理的库OpenCv

# dlib预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

path="********************"

# cv2读取图像
img=cv2.imread(path+"test.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])

# 利用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)

note:OpenCv的画图函数

         1. 画圆 cv2.circle( img, (p1,p2), r, (255,255,255) )

参数1:img-      图片对象;

参数2:(p1,p2)-        圆心坐标;

参数3:r-    半径;

参数4:(255,255,255)- 颜色数组; 

 2. 输出字符 cv2.putText( img,"test", (p1,p2), font, 4, (255,255,255), 2, cv2, LINE_AA )

参数1:img-图像对象;

参数2:"test"- 需要打印的字符text(数字的话可以利用str()转成字符);

参数3:(p1,p2)-  坐标textOrg;

参数4:font-字体fontFace(注意这里 font = cv2.FONT_HERSHEY_SIMPLEX);

参数5:4-字号fontScale;

参数6:(255,255,255)-  颜色数组;

参数7:2- 线宽thickness;

参数8:LINE_AA-   线条种类line_type;

*关于 颜色数组:

(255,255,255), (蓝色,绿色,红色),每个值都是0-255;

比如:蓝色(255,0,0),紫色(255,0,255)

可以调整cv2.circle()函数和cv2.putText()函数中的 半径、线宽 等参数使得输出满足需求方便查看;

结果:

python3利用Dlib19.7实现人脸68个特征点标定

图2 测试结果1 

python3利用Dlib19.7实现人脸68个特征点标定

图3 测试结果2

来源:http://www.cnblogs.com/AdaminXie/p/8137580.html

标签:python3,Dlib19.7,人脸特征
0
投稿

猜你喜欢

  • 简要介绍SQL Server 2008新的事件处理系统

    2009-12-22 08:15:00
  • Python实现的质因式分解算法示例

    2021-12-16 23:10:05
  • mysql5.7及mysql 8.0版本修改root密码的方法小结

    2024-01-28 17:09:31
  • python面向对象多线程爬虫爬取搜狐页面的实例代码

    2021-11-27 21:49:39
  • python爬虫之百度API调用方法

    2021-11-18 17:17:13
  • Javascript 颜色渐变效果的实现代码

    2024-05-05 09:15:50
  • python实现桌面气泡提示功能

    2023-07-13 06:37:13
  • python查找指定具有相同内容文件的方法

    2023-08-14 17:20:04
  • ORACLE中的的HINT详解

    2024-01-26 23:29:53
  • PHP crypt()函数的用法讲解

    2023-06-13 03:08:05
  • Python-for循环的内部机制

    2023-02-02 20:47:18
  • python实现录音功能(可随时停止录音)

    2023-07-29 05:15:06
  • MySQL数据库之UPDATE更新语句精解

    2009-03-20 15:21:00
  • opencv基于Haar人脸检测和眼睛检测

    2022-02-10 13:43:59
  • 详解Go开发Struct转换成map两种方式比较

    2024-04-26 17:32:12
  • Python之re操作方法(详解)

    2022-05-15 18:38:15
  • sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)

    2024-01-12 18:52:11
  • python itchat实现调用微信接口的第三方模块方法

    2023-03-24 07:12:53
  • 解析scratch3.0二次开发之scratch-blocks免编译修改问题

    2022-10-18 22:36:57
  • python 列表,集合和字典的增删改查

    2021-06-20 04:31:37
  • asp之家 网络编程 m.aspxhome.com