python 人脸轮廓提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
以前写过一篇关于实现人脸识别的文章,里面用到的技术是经过调用百度 API 实现的,本次将借助于 dlib 程序包实现人脸区域检测、特征点提取等功能,html
dlib 封装了许多优秀的机器学习算法, 可实现人脸识别、检测、识别,视频目标追逐等功能,是由由 C++开发的一个开源程序库,目前也提供了 Python 接口,可供咱们直接调用。web
1,dilb 安装
dlib 程序包的安装方式也是用 pip 来进行安装的,但不一样于其它程序包的是,在输入算法
pip install dlib
以前,须要安装 Cmake 程序包,该工具主要是对 dlib 进行编译,安装命令与其余包相似微信
pip install Cmake
2,实现人脸识别
利用 dlib 实现人脸识别功能时,先定义一个检测器和一个 图片预览窗口:机器学习
detector = dlib.get_frontal_face_detector()
win = win = dlib.image_window()
以后利用 load_rgb_image() 函数读取图像:函数
img = dlib.load_rgb_image(f)
接下来进行核心功能人脸检测的实现,这里须要借助于上面定义获得的检测器工具
dets,score,idx = detector.run(img,1,-1)
img 就是咱们读取后的图像,第二个参数 1 表明的是图片上采样倍数,值越大,最终识别获得的结果越好,-1 表明的是调整分割阈值,负值表示将返回更多检测结果学习
返回的 dets 返回的是一我的脸区域矩形,分别表示左,上、右、下边界,是 tuple 形式,若是检测出一我的脸,则为一个 tuple, 若是是多我的脸,将会把多个 tuple 放置在一个列表中;有个这个矩形坐标就能够作如下事情:spa
人脸区域裁剪,进行区域提取;.net
人脸区域线条标记
score 表示的是人脸识结果检测几率,越大表明识别出来的结果越好;若是一幅图有多我的脸,则返回多个检测几率以列表形式储存;idx 是用于在一副图检测出多我的脸是用的索引,能够对其进行索引
win.clear_overlay()
win.set_image(img)
win.add_overlay(dets)
dlib.hit_enter_to_continue
最后咱们利用 前面定义的 win 窗口,进行图像预览,结果以下,
Snipaste_2020-06-01_23-43-59.png
固然也能够用 OpenCV 进行轮廓勾勒,OpenCV 勾勒结果以下( 有色差的缘由是OpenCV 读取的是 BGR 通道顺序 );
Snipaste_2020-06-01_23-46-03.png
3,dlib 提取人脸68个特征点
OpenCV 也能够用于人脸识别,但效果不如 dlib ,除了上面提到的线框检测以外,dlib 还能够直接提取人脸上的 68 个特征点,做为坐标形式来返回;
有了这 68 个特征点的坐标,能够很方便地帮助咱们实现人脸对齐、融合等应用,先看一下用 dlib 勾勒出来的效果
Snipaste_2020-06-02_14-48-24.png
与人脸识别不同的是,这里须要加上一个形状检测器,形状检测器这里须要官网提供的文件、里面放置已经训练好的权重信息,能够直接使用,上面功能实现代码以下:
import dlib
import os
import cv2
predictor_path = "E:/shape_predictor_68_face_landmarks.dat"#权重文件路径
png_path = "E:/ceshi.png"
detector = dlib.get_frontal_face_detector()
#相撞
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img = dlib.load_rgb_image(png_path)
win.clear_overlay()
win.set_image(img1)
for k,d in enumerate(dets):
print("Detection {} left:{} Top: {} Right {} Bottom {}".format(
k,d.left(),d.top(),d.right(),d.bottom()
shape = predicator(img,d)
#Get the landmarks/parts for face in box d
print("Part 0:{},Part 1 :{}".format(shape.part(0),shape.part(1)))
win.add_overlay(shape)
win.add_overlay(dets)
dlib.hit_enter_to_continue()
坐标点的获取能够经过 part(index) 函数获取
上面的坐标点,也能够经过 OpenCV 在原图上勾勒出来,并注释上文字,效果以下:
Snipaste_2020-06-02_15-02-38.png
附上完整代码:
import dlib
import os
import cv2
predictor_path = "E:/shape_predictor_68_face_landmarks.dat"
png_path = "E:/ceshi.png"
detector = dlib.get_frontal_face_detector()
#相撞
predicator = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
img1 = cv2.imread(png_path)
dets = detector(img1,1)
print("Number of faces detected : {}".format(len(dets)))
for k,d in enumerate(dets):
print("Detection {} left:{} Top: {} Right {} Bottom {}".format(
k,d.left(),d.top(),d.right(),d.bottom()
))
lanmarks = [[p.x,p.y] for p in predicator(img1,d).parts()]
for idx,point in enumerate(lanmarks):
point = (point[0],point[1])
cv2.circle(img1,point,5,color=(0,0,255))
font = cv2.FONT_HERSHEY_COMPLEX_SMALL
cv2.putText(img1,str(idx),point,font,0.5,(0,255,0),1,cv2.LINE_AA)
#对标记点进行递归;
cv2.namedWindow("img",cv2.WINDOW_NORMAL)
cv2.imshow("img",img1)
cv2.waitKey(0)
4,小总结
以上就是对 dlib 程序包的简单介绍,在人脸识别应用方面上 dlib 的表现至关不错的,有兴趣的同窗能够去官网看关于 dlib 的详细介绍,本身闲余时间动手跟着敲一下。
下篇文章将介绍利用 OpenCV 实现人脸融合技术,里面会用到本篇提到的人脸 68 个特征点坐标,算是本篇文章的延申,感兴趣的小伙伴能够提早关注一波。
文中提到的权重文件获取方式,在公众号后台回复关键字:dlib 便可获取
参考连接:
1,http://dlib.net/face_landmark_detection.py.html
2,https://blog.csdn.net/qq_39438636/article/details/79304130
3,http://dlib.net/
python 人脸轮廓提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...相关推荐
- python提取个十百千位数字_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
之前写过一篇关于实现人脸识别的文章, Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的, ...
- python人脸特征提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
之前写过一篇关于实现人脸识别的文章,Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的,本 ...
- 狗脸识别python_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
之前写过一篇关于实现人脸识别的文章,里面用到的技术是通过调用百度 API 实现的,本次将借助于 dlib 程序包实现人脸区域检测.特征点提取等功能, dlib 封装了许多优秀的机器学习算法, 可实现 ...
- java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...
因此,父类构造函数是在Java中调用的,而在Python中则不是.如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Pa ...
- python需要的基础_推荐收藏!小白不要怕!一周学全Python面试基础(2)
Python是一个广泛的领域,因此有必要保持最新状态.通过列出30个python面试问题和答案,本文涵盖在Python面试中经常问到的问题.如果您是该行业的新手,本基础篇将极大地帮助您.我们衷心希望这 ...
- python面板数据分析代码_对于大面板数据,回归就绪格式的Excel到Python?
试图从Excel中获取一些大面板数据到python中,所以我可以做一些GMM /横截面面板数据回归分析(想想sci-kit软件包).我把我的数据从excel移到了Python,但是回归分析的格式不正确 ...
- python 5的倍数_查找所有低于1000的数字的和,这是Python中3或5的倍数
python 5的倍数 Sometimes, we need to find the sum of all integers or numbers that are completely divisi ...
- python 与或非_“2020”假看完本文若不能让你学通“Python”,我将永远退出IT界!...
0基础小白怎么学Python? 今天给大家分享一些学习Python的基本概念图,入门书籍.视频教程以及学习路上最有效的方法.Python基本概念最全图1.Python 解释器: 2.Python数据结 ...
- python计算矩形周长_一边学编程,一边学语数外,用python编程学三年级周长计算...
原标题:一边学编程,一边学语数外,用python编程学三年级周长计算 编程并不神秘 编程只是解决问题的一共方法 python是一门编程语言 python是一种解决问题的编程工具 在小学阶段,学习编程的 ...
最新文章
- C++Builder及VC的库相互调用
- Exchange2007中创建和访问公用文件夹
- java 基础知识九 类与对象
- 《Python机器学习——预测分析核心算法》——2.3 对“岩石vs.水雷”数据集属性的可视化展示...
- Maven 引入 ojdbc:ojdbc14-10.2.0.4.0.jar
- @requestParam与@Param区别
- Raspberry PI 编译WLan驱动模块, 并配置登录WIFI
- 人工神经网络模型定义,人工智能神经网络模型
- 劲爆!开源芯片死结打开了?道翰天琼认知智能机器人平台API接口大脑为您揭秘
- 台灯a级和aa级和aaa级哪个好?2022最新护眼台灯推荐
- 微型计算机原理与接口课后习题,求《微型计算机原理与接口技术》的课后习题答案。...
- codevs 2627 村村通
- 逆向工程MBG(MyBatis Generator)
- yiii2生成验证码以及刷新验证码
- Html5 表单语法,按钮和多选框,
- 建站常用--CMS discuz wordpress
- 用 EPWA 写一个 漫画阅读器 ComicReader
- 深度分析|AI新职位「人工智能训练师」
- .NET Core使用Redis
- Python面试题整理-牛客网
热门文章
- php跨域同步登录,织梦PC端移动端会员同步登录跨域AJAX
- 远程控制木马软件_Jump Desktop for mac (远程控制软件)
- VTK:数据集表面用法实战
- boost::remove_copy_if相关的测试程序
- boost::proto::protect相关的测试程序
- boost::mp11::mp_replace_front相关用法的测试程序
- C和C++Everything教程的简介
- Boost:自定义小矢量的测试程序
- VTK:可视化算法之StreamlinesWithLineWidget
- VTK:Utilities之CheckVTKVersion