之前写过一篇关于实现人脸识别的文章,

Z先生点记:Pyqt5 + 百度 API 打造一个图像人脸识别、分割的小程序​zhuanlan.zhihu.com

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

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

1,dilb 安装

dlib 程序包的安装方式也是用 pip 来进行安装的,但不同于其它程序包的是,在输入

pip 

之前,需要安装 Cmake 程序包,该工具主要是对 dlib 进行编译,安装命令与其他包类似

pip 

2,实现人脸识别

利用 dlib 实现人脸识别功能时,先定义一个检测器和一个 图片预览窗口:

detector = dlib.get_frontal_face_detector()
win = win = dlib.image_window()

之后利用 load_rgb_image() 函数读取图像:

img 

接下来进行核心功能人脸检测的实现,这里需要借助于上面定义得到的检测器

dets

img 就是我们读取后的图像,第二个参数 1 代表的是图片上采样倍数,值越大,最终识别得到的结果越好,-1 代表的是调整分割阈值,负值表示将返回更多检测结果

返回的 dets 返回的是一个人脸区域矩形,分别表示左,上、右、下边界,是 tuple 形式,如果检测出一个人脸,则为一个 tuple, 如果是多个人脸,将会把多个 tuple 放置在一个列表中;有个这个矩形坐标就可以做以下事情:

  • 人脸区域裁剪,进行区域提取;
  • 人脸区域线条标记

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

win

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

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

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

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

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

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

import 

坐标点的获取可以通过 part(index) 函数获取

上面的坐标点,也可以通过 OpenCV 在原图上勾勒出来,并注释上文字,效果如下:

附上完整代码:

import 

4,小总结

以上就是对 dlib 程序包的简单介绍,在人脸识别应用方面上 dlib 的表现相当不错的,有兴趣的同学可以去官网看关于 dlib 的详细介绍,自己闲余时间动手跟着敲一下。

下篇文章将介绍利用 OpenCV 实现人脸融合技术,里面会用到本篇提到的人脸 68 个特征点坐标,算是本篇文章的延申,感兴趣的小伙伴可以提前关注一波。

文中提到的权重文件获取方式,在公众号( Z先生点记 )后台回复关键字: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. java个十百千万位余数_java中求一个整数个十百千位的方法

    展开全部 主要的思想是先将这个整数对10求余,636f707962616964757a686964616f31333337396333得到个位数,再将整数除以10得到个位数以外的其余数(除以10之后因 ...

  2. c语言编程分离个十百千位,C语言编程之|如何分离一个多位数据

    本订阅号致力于单片机.ARM等嵌入式软硬件的设计经验分享,秉承"人人都是电子设计经验的分享者"的理念,成功路上不孤单,我们一起努力.公众号:micropoint8 数码管是电子设计 ...

  3. java个十百千万位余数_第一学期四年级数学期末试题

    学习数学对于很多的同学来说是一件很痛苦的事情,今天小编就给大家来分享四年级数学,希望大家来收藏哦 四年级数学上学期期末考试题 一.填一填(18分) 1.386000是( )位数,它的最高位是( )位, ...

  4. 判断个十百千位之后是否大于20 java——CSDN博客

    /*** * @Title: test_draw_a_lottery_or_raffle* @Description: 该方法的主要作用:输入四位数,各位数数字之和大于20 中奖,否则没中奖* @pa ...

  5. C语言输出一个数输出它的个十百千位

    #include  <stdio.h> int main() {     int a = 0;     scanf_s("%d", &a);     int i ...

  6. 个位数字加百位数字等于千位数字加上十位数字,且该该数为奇数

    1.输出所有满足下列条件的四位数.   条件:个位数字加百位数字等于千位数字加上十位数字,且该该数为奇数. 做题思路:1.先单独提取这个四位数的各位数 2.满足相加条件且为奇数 例:这个数字为1234 ...

  7. C语言提取一个数的千位百位十位个位

    //文件名:geshibaiqian.c //作者:吃不胖的阿豪 //描述:提取一个数的千位百位十位个位#include<stdio.h> int main() {printf(" ...

  8. 编程序求出满足如下条件的四位正整数个数:个位数字与百位数字的和是十位数字与千位数字之和的两倍。

    编程序求出满足如下条件的四位正整数个数:个位数字与百位数字的和是十位数字与千位数字之和的两倍. 代码如下: #include<stdio.h>int main() {int n;int a ...

  9. java个十百千万位余数_1 Java第三课[流程控制]

    1 Java第三课[流程控制] 1.1 回顾: 1. 标识符的命名:标识符通常意义上是指 类名,包名,方法名,属性名,普通变量等等. 2. 类命名:每个单词的首字母大写; 3. 变量命名规则:字母数字 ...

最新文章

  1. python中plot柱状图-Matplotlib中柱状图bar使用
  2. Wix安装程序中判断是否安装的.net framwork 4.5
  3. 解决安装完ubuntu登陆无root账户问题
  4. 中国古代数学有多牛?
  5. 数据结构——最小生成树之prime算法(与最短路径之迪杰斯特拉算法很像)
  6. 会计云课堂实名认证后怎么更改_会计云课堂怎么听课 网上听课步骤详解
  7. 同步请求和异步请求的区别
  8. 解决JS:window.close()在Firefox下的不能关闭的问题,兼容IE/Firefox/Chrome
  9. html 文字过多如何显示,当页面文字过多时,怎么用css使超出部分显示省略号?(单/多行代码演示)...
  10. H5本地储存Web Storage
  11. SaaS架构设计之如何转化成SaaS多租户模式
  12. mgr.dll病毒手工清除方法!
  13. java mybatis cms_java cms系统 springmvc mybatis
  14. 工具分享:易读文档下载器(同时支持百度/豆丁)
  15. MariaDB安装教程(保姆级)
  16. usb-OTG-ADP-HNP-SRP
  17. java编写point类line类_定义一个点类Point,有横坐标x和纵坐标y,定义构造
  18. 我国三大常用坐标系区别(北京54、西安80和WGS-84)(转)
  19. 3.17√ 识别次读入的一个以@为结束符的字符序列是否为形如”序列1序列2“模式的字符序列 ,序列12均没有,且序列2为序列1的逆序列
  20. 144显示器只有60_Win10系统下144hz显示器刷新率只显示60hz如何解决

热门文章

  1. 2.1.4 对梯度消失和梯度爆炸的近似解决方案
  2. 玛塔机器人函数_玛塔创想编程机器人套装包含什么?
  3. alpinestars与丹尼斯_骑行靴|丹尼斯VS A星心得分享,它和普通鞋子不同之处竟在这里!...
  4. java笔记4-类型转换
  5. 网络安装Centos x64 6.10
  6. Bresenham 算法画线 画圆
  7. 自定义是否允许文件继续执行下去
  8. Java操作符自测运算符精度
  9. VB.NET网络是否联通Function
  10. 8天学通MongoDB——第五天 主从复制