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

里面用到的技术是通过调用百度 API 实现的,本次将借助于 dlib 程序包实现人脸区域检测、特征点提取等功能,

dlib 封装了许多优秀的机器学习算法, 可实现人脸识别、检测、识别,视频目标追逐等功能,是由由 C++开发的一个开源程序库,目前也提供了 Python 接口,可供我们直接调用。

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 放置在一个列表中;有个这个矩形坐标就可以做以下事情:人脸区域裁剪,进行区域提取;

人脸区域线条标记

score 表示的是人脸识结果检测概率,越大代表识别出来的结果越好;如果一幅图有多个人脸,则返回多个检测概率以列表形式储存;idx 是用于在一副图检测出多个人脸是用的索引,可以对其进行索引

win.clear_overlay()

win.set_image(img)

win.add_overlay(dets)

dlib.hit_enter_to_continue

最后我们利用 前面定义的 win 窗口,进行图像预览,结果如下,

当然也可以用 OpenCV 进行轮廓勾勒,OpenCV 勾勒结果如下( 有色差的原因是OpenCV 读取的是 BGR 通道顺序 );

3,dlib 提取人脸68个特征点

OpenCV 也可以用于人脸识别,但效果不如 dlib ,除了上面提到的线框检测之外,dlib 还可以直接提取人脸上的 68 个特征点,作为坐标形式来返回;

有了这 68 个特征点的坐标,可以很方便地帮助我们实现人脸对齐、融合等应用,先看一下用 dlib 勾勒出来的效果

与人脸识别不一样的是,这里需要加上一个形状检测器,形状检测器这里需要官网提供的文件、里面放置已经训练好的权重信息,可以直接使用,上面功能实现代码如下:

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 在原图上勾勒出来,并注释上文字,效果如下:

附上完整代码:

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 个特征点坐标,算是本篇文章的延申,感兴趣的小伙伴可以提前关注一波。

文中提到的权重文件获取方式,在公众号( Z先生点记 )后台回复关键字:dlib 即可获取

参考链接:

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

  1. python语音特征提取_使用Python从视频中提取语音

    python语音特征提取 In this post, I will show you how to extract speeches from a video recording file. Afte ...

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

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

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

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

  4. python h5游戏_从零开始制作H5人脸融合小游戏

    去年的建军节,一个展示军装照的H5人脸融合游戏火遍朋友圈,带来很好的传播效果.最近欧冠决赛要来了,公司决定做一个寻找和你最像的欧冠球星的H5游戏,那么该怎么做呢?认真分析了一下,这个游戏其实用到的技术 ...

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

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

  6. python 语音特征提取_使用python实现语音文件的特征提取方法

    概述 语音识别是当前人工智能的比较热门的方向,技术也比较成熟,各大公司也相继推出了各自的语音助手机器人,如百度的小度机器人.阿里的天猫精灵等.语音识别算法当前主要是由rnn.lstm.dnn-hmm等 ...

  7. python 函数调用列表_在项目列表上调用一个函数的最简洁方法 - python

    在python 2中,我使用map将函数应用于多个项目,例如,删除所有与模式匹配的项目: map(os.remove,glob.glob("*.pyc")) 当然我忽略了os.re ...

  8. 如何成为python 数据分析师_如何七周成为数据分析师20:了解和掌握Python的函数...

    本文是<如何七周成为数据分析师>的第二十教程,如果想要了解写作初衷,可以先行阅读七周指南.温馨提示:如果您已经熟悉Python,大可不必再看这篇文章,或只挑选部分. Python之所以灵活 ...

  9. python商业分析_科研进阶 | 纽约大学 | 商业分析、量化金融:基于Python的商业分析工具...

    科研进阶 | 纽约大学 | 商业分析.量化金融:基于Python的商业分析工具(8.22开课)​mp.weixin.qq.com 课题名称 = 基于Python的商业分析工具 = 项目背景 数据分析为 ...

最新文章

  1. Solr 4.x定时、实时增量索引 - 修改、删除和新增索引
  2. SIFT特征及特征匹配:SIFT and feature matching
  3. ActiveMQ的安装搭建
  4. arcball原理 旋转视图 关键点总结 及代码
  5. Java装饰器模式详解
  6. 无限递归替换文件内的某个字符串
  7. java outputstream api,Java8 stream API以及常用方法
  8. linux下简易搭建svnserver
  9. CSS选择器的种类使用
  10. maven安装jar包到本地仓库
  11. 2 电感耦合方式的射频前端
  12. ValueError: operands could not be broadcast together with remapped shapes 解决方法
  13. Android 沉浸式Dialog弹框
  14. 华为有望解决5G射频芯片问题,5G手机或将回归
  15. iClap:产品经理再忙也要看《琅琊榜》
  16. 拼多多下单助手怎么一键采购、发货的?
  17. 关于uniapp获取ios客户端平台安全距离(底部导航条)的方法
  18. abb机器人编程手册_002.ABB机器人高级编程--String飞升篇
  19. 百度算法最新更新介绍之烽火算法
  20. 一份JAVA工程师的求职简历来告诉你求职简历怎么写(下)

热门文章

  1. scrapy框架----爬取B站番剧弹幕
  2. 输入一个正整数,统计整数中各位数字值为零的个数,并把该整数中各位上最大的数字值找出和零的个数组成一个新数字输出
  3. DASCTF 7月赋能赛pwn wp
  4. 交换链路聚合、堆叠、集群技术(HCIA)
  5. 03-多个圆环以及圆环的变速变向
  6. 【附源码】计算机毕业设计JAVA足球赛会管理系统
  7. 分享一些安卓的技巧性方法
  8. 玩游戏蓝牙耳机哪款好?四款好用的蓝牙耳机推荐
  9. SecureMail 安全保密邮件系统产品概述
  10. html运行applet idea,如何在Intellij IDEA中运行Applet?