以前写过一篇关于实现人脸识别的文章,里面用到的技术是经过调用百度 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 库能帮到你!...相关推荐

  1. python提取个十百千位数字_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    之前写过一篇关于实现人脸识别的文章, Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序​zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的, ...

  2. python人脸特征提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    之前写过一篇关于实现人脸识别的文章,Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别.分割的小程序​zhuanlan.zhihu.com 里面用到的技术是通过调用百度 API 实现的,本 ...

  3. 狗脸识别python_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

    之前写过一篇关于实现人脸识别的文章,里面用到的技术是通过调用百度 API 实现的,本次将借助于 dlib  程序包实现人脸区域检测.特征点提取等功能, dlib 封装了许多优秀的机器学习算法, 可实现 ...

  4. java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

    因此,父类构造函数是在Java中调用的,而在Python中则不是.如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Pa ...

  5. python需要的基础_推荐收藏!小白不要怕!一周学全Python面试基础(2)

    Python是一个广泛的领域,因此有必要保持最新状态.通过列出30个python面试问题和答案,本文涵盖在Python面试中经常问到的问题.如果您是该行业的新手,本基础篇将极大地帮助您.我们衷心希望这 ...

  6. python面板数据分析代码_对于大面板数据,回归就绪格式的Excel到Python?

    试图从Excel中获取一些大面板数据到python中,所以我可以做一些GMM /横截面面板数据回归分析(想想sci-kit软件包).我把我的数据从excel移到了Python,但是回归分析的格式不正确 ...

  7. python 5的倍数_查找所有低于1000的数字的和,这是Python中3或5的倍数

    python 5的倍数 Sometimes, we need to find the sum of all integers or numbers that are completely divisi ...

  8. python 与或非_“2020”假看完本文若不能让你学通“Python”,我将永远退出IT界!...

    0基础小白怎么学Python? 今天给大家分享一些学习Python的基本概念图,入门书籍.视频教程以及学习路上最有效的方法.Python基本概念最全图1.Python 解释器: 2.Python数据结 ...

  9. python计算矩形周长_一边学编程,一边学语数外,用python编程学三年级周长计算...

    原标题:一边学编程,一边学语数外,用python编程学三年级周长计算 编程并不神秘 编程只是解决问题的一共方法 python是一门编程语言 python是一种解决问题的编程工具 在小学阶段,学习编程的 ...

最新文章

  1. C++Builder及VC的库相互调用
  2. Exchange2007中创建和访问公用文件夹
  3. java 基础知识九 类与对象
  4. 《Python机器学习——预测分析核心算法》——2.3 对“岩石vs.水雷”数据集属性的可视化展示...
  5. Maven 引入 ojdbc:ojdbc14-10.2.0.4.0.jar
  6. @requestParam与@Param区别
  7. Raspberry PI 编译WLan驱动模块, 并配置登录WIFI
  8. 人工神经网络模型定义,人工智能神经网络模型
  9. 劲爆!开源芯片死结打开了?道翰天琼认知智能机器人平台API接口大脑为您揭秘
  10. 台灯a级和aa级和aaa级哪个好?2022最新护眼台灯推荐
  11. 微型计算机原理与接口课后习题,求《微型计算机原理与接口技术》的课后习题答案。...
  12. codevs 2627 村村通
  13. 逆向工程MBG(MyBatis Generator)
  14. yiii2生成验证码以及刷新验证码
  15. Html5 表单语法,按钮和多选框,
  16. 建站常用--CMS discuz wordpress
  17. 用 EPWA 写一个 漫画阅读器 ComicReader
  18. 深度分析|AI新职位「人工智能训练师」
  19. .NET Core使用Redis
  20. Python面试题整理-牛客网

热门文章

  1. php跨域同步登录,织梦PC端移动端会员同步登录跨域AJAX
  2. 远程控制木马软件_Jump Desktop for mac (远程控制软件)
  3. VTK:数据集表面用法实战
  4. boost::remove_copy_if相关的测试程序
  5. boost::proto::protect相关的测试程序
  6. boost::mp11::mp_replace_front相关用法的测试程序
  7. C和C++Everything教程的简介
  8. Boost:自定义小矢量的测试程序
  9. VTK:可视化算法之StreamlinesWithLineWidget
  10. VTK:Utilities之CheckVTKVersion