首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 利用 Dlib 19.7 实现人脸识别和剪切

0.引言

利用python开发,借助Dlib库进行人脸识别人脸剪切

源码介绍:

1.dlib_cut_faces.py : 识别图像中的多张人脸,然后并列窗口化显示

2.dlib_cut_faces_save.py:识别图像中的多张人脸,然后剪切保存到本地

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

图2dlib_cut_faces_save.py处理后保存到本地的单张人脸图像

1. 开发环境

python:3.6.3

dlib: 19.7

opencv, numpy

1importdlib# 人脸识别的库dlib

2importnumpy as np# 数据处理的库numpy

3importcv2# 图像处理的库OpenCv

2.工程介绍

利用dlib进行人脸识别,dlib的使用比较简单,如下所示:

1detector =dlib.get_frontal_face_detector()

2

3#读取图像

3path ="F:/code/python/***/pic/"

4img = cv2.imread(path+"test.jpg")

5#print("img/shape:", img.shape)

6

7#dlib检测

8dets = detector(img, 1)

9print("人脸数:", len(dets))

然后就可以得到人脸的坐标,用来计算人脸矩形的高度和宽度:

1#计算要生成的图像img_blank大小

2fork, dinenumerate(dets):

3

4#计算矩形大小

5#(x,y), (宽度width, 高度height)

6pos_start =tuple([d.left(), d.top()])

7pos_end =tuple([d.right(), d.bottom()])

8

9#计算矩形框大小

10height = d.bottom()-d.top()

11width = d.right()-d.left()

(关于图像中高度height和宽度width的定义,如图3所示)

图3 图像高度height和宽度width的说明

得到人脸的高度和宽度之后,就可以根据新建相应大小矩形的空白图像:

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

然后将从dlib检测到的人脸的坐标点开始,顺序写入空白图像中:

1foriinrange(height):

2forjinrange(width):

3img_blank[i][blank_start + j] = img[d.top() + i][d.left() + j]

这样得到的人脸就会存入空白图像img_blank中,如果你想保存到本地,达到图2的效果,那么现在就可以直接去将img_blank保存到你的目录下面:

1cv2.imwrite(path_save+"img_face_"+str(k+1)+".jpg", img_blank)

如果你想让人脸并排显示的话,稍微麻烦一点,需要遍历两次dets(for k, d in enumerate (dets)):

第一次遍历:记录下我们需要生成的图像窗口的大小,因为需要将多张照片显示在一张图像上,所以需要知道每张人脸照片的大小,我取的是高度最大值height_max和宽度之和width_sum;

图4 窗口图像尺寸

第二次遍历:根据之前得到的图像尺寸新建空白图像,然后开始用人脸矩形填充图像,每次width方向从blank_start位置开始,每次填完一张之后记得更新起始位置:

1#填充

2foriinrange(height):

3forjinrange(width):

4img_blank[i][blank_start+j] = img[d.top()+i][d.left()+j]

5#更新起始位置调整图像

6blank_start +=width

3. 结果

图5实现人脸识别和剪切

#可以在我的Github下载到源码: https://github.com/coneypo/Dlib_face_cut

# 请尊重他人劳动成果,转载或者使用源码请注明出处,谢谢

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180129G0SX8O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券