- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我目前正在尝试使用我存档的图像训练 DNN(OCR 上下文......每个类的输入图像是数千个固定大小的小图像的聚合图像)。 我有一些代码可以打开聚合图像并将其正确分割为小型 OpenCV cv::M
我正在尝试将 dlib 安装到 cloud9 上,但我一直收到此错误。 c++: internal compiler error: Killed (program cc1plus) Please su
我目前正在尝试构建和使用旨在将 dlib 移植到 Android 的 dlib-android 库。搭建成功;但是在相应的演示项目dlib-android-app中使用编译后的共享C++库时,应用程序
我需要一个 dlib::matrix 的 std::vector,但我在编译时不知道矩阵大小;文档告诉我: // (Note that if you don't know the dimensiona
我试图在 dlib 中移动几步的尝试在尝试复制此代码的某些部分时突然停止 http://dlib.net/face_landmark_detection_ex.cpp.html 这就是我目前所得到的
我使用 dlib 的 hog 检测器,因为它发现人脸比 opencv haarcascades 好得多。但它无法检测脸上的情绪(或者可以???)。我需要从带有面部的 dlib::rectangle 中
我在启用了 CUDA 9.1 的 Ubuntu 16.04 上使用 cmake 3.11.0 编译了 dlib 19.10。一切顺利,没有遇到任何问题! 这里是运行 cmake .. 的输出 -- T
我正在尝试为我的 django python 环境安装 dlib(机器学习库)。但是,我无法安装它。有错误并卡住。 根据这个指令,这就是我所做的 https://www.pyimagesearch.c
我无法运行Streamlight应用程序并遇到错误。我卸载了dlib并安装了cmake,然后再次安装dlib,仍然得到相同的错误
前言 人脸识别在lwf(labeled faces in the wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,但是真实的环境中的准确率有多少呢?我没有这方面的数据,
我想绘制脸颊的轮廓,如下图所示: 我正在使用 OpenCV 和 Dlib 来检测界标,而且我不知道如何操作Dlib点。有谁知道我可以在脸颊上绘制轮廓吗? 这是我的代码: import cv2 impo
使用 dlib 库如何进行元素特定操作?例如 A = [1 2 3; 4 5 6] 我可以让它对矩阵的元素进行平方,而不是 A*A,这样答案就是 ans = [1 4 9; 16 25 36] 在 m
我刚开始尝试 dlib 库。我已经完成了编译说明,但问题仍然存在。我正在使用命令行进行编译和执行。我使用了以下命令并给了我错误。 g++ -O3 -I.. ../dlib/all/source.cpp
我正在使用 dlib 做机器学习,但我发现所有代码只能处理一维标签。 我的数据集是这样的:样本是 m 长度的 vector ,标签是 n 长度的 vector 。 (m>n) dlib 是否可以针对此
我正在为 object detection 使用 dlib ,标注和训练数据集是使用HOG+SVM完成的,能够检测到物体,但是现在 我需要从图像中提取芯片 我想在 win_overlay 上的检测区域
我想从低亮度图像中检测人脸。我正在使用 dlib 从图像中检测人脸。但是 dlib 检测器根本检测不到人脸。我有以下代码来检测图像中的人脸。 detector=dlib.get_frontal_fac
我正在使用 D-lib 提取面部的某些区域。我正在使用 opencv 裁剪使用 dlib 地标点检测器检测到的区域。但是,裁剪后的图像是蓝色的。知道为什么要改变吗?而且我发现一些图像跳过了这段代码。因
我遇到了一个奇怪的错误——每当我包含 #include 时到我的项目并声明一个变量(例如 dlib::image_window win )出现以下错误: 'DLIB_NO_GUI_SUPPORT i
我正在编写一个 dlib 代码来进行一对一的人脸识别。 我遵循 dlib samples 中的代码示例并执行了以下操作: std::vector> faces; for (auto face : de
我正在寻找使用 dlib 库来优化近似误差...假设我有点 (x,y) 和一个值 vector ,它们用于查找最小值并在本地拟合误差,所以我实现了此类: #include #include #in
我是一名优秀的程序员,十分优秀!