Python3结合Dlib实现人脸识别和剪切


Posted in Python onJanuary 24, 2018

0.引言

利用python开发,借助Dlib库进行人脸识别,然后将检测到的人脸剪切下来,依次排序显示在新的图像上;

实现的效果如下图所示,将图1原图中的6张人脸检测出来,然后剪切下来,在图像窗口中依次输出显示人脸;

实现比较简单,代码量也比较少,适合入门或者兴趣学习。

Python3结合Dlib实现人脸识别和剪切

图1 原图和处理后得到的图像窗口

1.开发环境

python:

3.6.3

dlib:

  19.7

OpenCv, numpy

import dlib  # 人脸识别的库dlib
import numpy as np # 数据处理的库numpy
import cv2  # 图像处理的库OpenCv

2.设计流程

工作内容主要以下两大块:dlib人脸检测 和 绘制新图像

2.1 dlib人脸检测:

dlib的使用,在我之前另一篇博客里面介绍过(link: https://3water.com/article/133576.htm);

2.2 绘制新图像:

2.2.1 确定空白图像尺寸

这部分首先要根据检测到的人脸数和人脸大小,来确定绘制图像所需要的尺寸:

多张人脸要输出到一行,先进行一次人脸的遍历,记每张人脸的尺寸为height*width(高度和宽度说明见图2),

我取的生成图像的尺寸:height_max(最大高度)和width_sum(宽度之和),然后根据尺寸大小来新建空白图像:

img_blank = np.zeros((height_max, width_sum, 3), np.uint8)

2.2.2 图像填充

然后再进行一次人脸遍历,这次进行空白图像img_blank进行填充:

for i in range(height):
for j in range(width):
img_blank[i][blank_start+j] = img[d.top()+i][d.left()+j]

Python3结合Dlib实现人脸识别和剪切

图2 图像尺寸说明

如果想访问图像的某点像素,可以利用img[height][width]:

存储像素其实是一个三维数组,先高度height,然后宽度width;

返回的是一个颜色数组(0-255,0-255,0-255),按照(B, G, R)的顺序,比如 蓝色 就是(255,0,0),红色 是(0,0,255);

3.源码

# 2018-01-22
# 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 = "F:/code/python/***/pic/"
img = cv2.imread(path+"test.jpg")
#print("img/shape:", img.shape)
# dlib检测
dets = detector(img, 1)
print("人脸数:", len(dets))
# 记录人脸矩阵大小
height_max = 0
width_sum = 0
# 计算要生成的图像img_blank大小
for k, d in enumerate(dets):
# 计算矩形大小
# (x,y), (宽度width, 高度height)
pos_start = tuple([d.left(), d.top()])
pos_end = tuple([d.right(), d.bottom()])
# 计算矩形框大小
height = d.bottom()-d.top()
width = d.right()-d.left()
# 处理宽度
width_sum += width
# 处理高度
if height > height_max:
height_max = height
else:
height_max = height_max
# 绘制用来显示人脸的图像的大小
print("img_blank的大小:")
print("高度", height_max, "宽度", width_sum) 
# 生成用来显示的图像
img_blank = np.zeros((height_max, width_sum, 3), np.uint8)
# 记录每次开始写入人脸像素的宽度位置
blank_start = 0 
# 将人脸填充到img_blank
for k, d in enumerate(dets):
height = d.bottom()-d.top()
width = d.right()-d.left()
# 填充
for i in range(height):
for j in range(width):
img_blank[i][blank_start+j] = img[d.top()+i][d.left()+j]
# 调整图像
blank_start += width
cv2.namedWindow("img_faces", 2)
cv2.imshow("img_faces", img_blank)
cv2.waitKey(0)

结果:

 Python3结合Dlib实现人脸识别和剪切

图3 原图和处理后得到的图像窗口

以上就是本次我们介绍的关于Python3结合Dlib实现人脸识别和剪切的相关技术内容,大家如果在学习后还有任何不明白的地方可以在下方的留言区讨论。

Python 相关文章推荐
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python处理数据,存进hive表的方法
Jul 04 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
python自定义时钟类、定时任务类
Feb 22 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Python selenium自动化测试模型图解
Apr 15 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
Python实现壁纸下载与轮换
Oct 19 Python
4种非常实用的python内置数据结构
Apr 28 Python
深入浅析Python中的yield关键字
Jan 24 #Python
Python3.6安装及引入Requests库的实现方法
Jan 24 #Python
pycharm+django创建一个搜索网页实例代码
Jan 24 #Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 #Python
Sublime开发python程序的示例代码
Jan 24 #Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 #Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 #Python
You might like
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
php中in_array函数用法探究
2014/11/25 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
史学专业毕业生求职信
2014/05/09 职场文书
社会实践活动总结范文
2014/07/03 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
银行求职信模板
2015/03/20 职场文书
综合办公室岗位职责
2015/04/11 职场文书
保险内勤岗位职责
2015/04/13 职场文书
爱国主义电影观后感
2015/06/18 职场文书
会计主管竞聘书
2015/09/15 职场文书