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的web.py框架实现类似Django的ORM查询的教程
May 02 Python
使用Python制作获取网站目录的图形化程序
May 04 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python读写docx文件的方法
May 08 Python
Python 忽略warning的输出方法
Oct 18 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
python Django框架快速入门教程(后台管理)
Jul 21 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
PHP连接MongoDB示例代码
2012/09/06 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
php常用数组函数实例小结
2016/12/29 PHP
php查询内存信息操作示例
2019/05/09 PHP
PHP7 新增功能
2021/03/09 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
JS实现小米轮播图
2020/09/21 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python动态网页批量爬取
2016/02/14 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
python如何将图片转换素描画
2020/09/08 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
烹饪自我鉴定
2014/03/01 职场文书
教师节促销方案
2014/03/22 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
民生工作实施方案
2014/05/31 职场文书
电子专业自荐信
2014/07/01 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
农村婚庆主持词
2015/06/29 职场文书