- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python3利用Dlib19.7实现人脸68个特征点标定由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
0.引言 。
利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号; 。
实现的68个特征点标定功能如下图所示:
图1 人脸68个特征点的标定 。
1.开发环境 。
python:3.6.3 。
dlib:19.7 。
OpenCv, numpy 。
需要调用的库: 。
1
2
3
|
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.源码 。
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# 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()函数中的 半径、线宽 等参数使得输出满足需求方便查看; 。
结果:
图2 测试结果1 。
图3 测试结果2 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/AdaminXie/p/8137580.html 。
最后此篇关于python3利用Dlib19.7实现人脸68个特征点标定的文章就讲到这里了,如果你想了解更多关于python3利用Dlib19.7实现人脸68个特征点标定的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!