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中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
Python 多线程之threading 模块的使用
Apr 14 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
基于pear auth实现登录验证
2010/02/26 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
python中set常用操作汇总
2016/06/30 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python生成ppt的方法
2018/06/07 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
学习新党章思想汇报
2014/01/09 职场文书
幼儿园开学家长寄语
2014/01/19 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
安全学习心得体会范文
2016/01/18 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript