最近在做人脸识别,需要对人脸数据集进行处理,对一张或批量图像的人脸进行切割分离,并且另保存下来。受网上开源工具的启发,在借鉴他人的基础上进行了改进,使得更加方便实用。

以下代码是改进版,分为两部分功能:

  1. 一张人脸图片切割并显示,不保存
  2. 一张/批量人脸图像切割并保存

在这里需要申明一下,尊重原著!(转发需要标注一下原著信息)

原创版:

Author:    coneypo
  Blog:       http://www.cnblogs.com/AdaminXie
  GitHub:   https://github.com/coneypo/Dlib_face_cut

改进版:

Improver:  Cai_90hou

Blog:         https://blog.csdn.net/qq_38677310/article/details/84702662

Github:

#crop_faces_show.pyimport dlib         # 人脸识别的库dlib
import numpy as np  # 数据处理的库numpy
import cv2          # 图像处理的库OpenCv# Dlib 正向人脸检测器
detector = dlib.get_frontal_face_detector()# 读取图像
path = "faces_for_test/"img = cv2.imread(path+"test_faces_1.jpg")# Dlib 检测
dets = detector(img, 1)print("检测到的人脸数 / faces :", len(dets), "\n")# 记录人脸矩阵大小
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 = heightelse:height_max = height_max# 绘制用来显示人脸的图像的大小
print("窗口大小:", '\n', "高度 / height :", height_max, '\n', "宽度 / width : ", 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 += widthcv2.namedWindow("img_faces", 0)
cv2.imshow("img_faces", img_blank)
cv2.waitKey(0)
#crop_faces_save.pyimport dlib         # 人脸识别的库dlib
import numpy as np  # 数据处理的库numpy
import cv2          # 图像处理的库OpenCv
import os#切割后的人脸序号,为全局变量
image_num = 0# Dlib 正向人脸检测器
detector = dlib.get_frontal_face_detector()# 读取图像的路径
path_read = "faces_for_test/"
#img = cv2.imread(path_read+"test_faces_3.jpg")# 用来存储生成的单张人脸的路径
path_save = "faces_separated/"#将文件夹中待处理的图片存于列表中
imgs_read  = os.listdir(path_read)   #源地址文件夹
imgs_write = os.listdir(path_save)   #存储地址文件夹# Delete old images
def clear_images():for img in imgs_write:os.remove(path_save + img)print("clean finish", '\n')#处理一张图片:
def cut_one_photo(img):global image_num# Dlib 检测faces = detector(img, 1)print("人脸数:", len(faces))for k, d in enumerate(faces):# 计算矩形大小# (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()# 根据人脸大小生成空的图像img_blank = np.zeros((height, width, 3), np.uint8)#复制人脸for i in range(height):for j in range(width):img_blank[i][j] = img[d.top()+i][d.left()+j]# cv2.imshow("face_"+str(k+1), img_blank)# 保存在本地#print("Save to:", path_save+"CWH"+str(image_num+1)+".jpg")print("Save to:",      "img_face" + str(image_num + 1) + ".jpg")cv2.imwrite(path_save + "img_face" + str(image_num + 1) + ".jpg", img_blank)image_num += 1#批量处理图片
def cut_batch_photoes():clear_images() #清除原有图片for img in imgs_read:try:path = os.path.join(path_read, img)image = cv2.imread(path)cut_one_photo(image)print('\n')except:continueprint('Successful operation!\n')print('total number of faces: ', image_num)def main():# 批量处理图片并保存cut_batch_photoes()if __name__ == '__main__':main()

人脸图像切割分离工具相关推荐

  1. IBM发布人脸识别最强工具,多样性数据集,100万张人脸图像!

    https://www.toutiao.com/a6652185404856336908/ 2019-01-30 15:16:49 为了改善既有AI人脸识别存在的偏见问题,IBM发布脸部多样性数据集D ...

  2. 使用Python+OpenCV实现神经网络预处理人脸图像的快速指南

    目前我正在研究一个涉及人脸分类的计算机视觉问题.这通常意味着需要应用深度学习,因此在将图像注入到我们的神经网络之前需要一个特殊的预处理阶段. 为了提高我们的模型精度,这是一项非常重要的任务,通过以下几 ...

  3. 【杂谈】人脸图像书看完了感觉不过瘾?这些拓展人脸资料值得你关注一下

    相信许多朋友都看过我这本人脸图像处理的书籍了,内容涵盖了人脸检测,人脸关键点检测,人脸识别,人脸属性分析,人脸美颜,人脸编辑与风格化,三维人脸重建内容,基本上包括了人脸的所有领域,详情可以阅读: 言有 ...

  4. 【CV】使用Keras和迁移学习从人脸图像中预测体重指数BMI

    作者:Leo Simmons   编译:ronghuaiyang 导读 和人脸属性预测非常相似的一个应用. 这篇文章描述了一个神经网络,它可以通过人脸图像预测一个人的BMI([身体质量指数]).这个项 ...

  5. 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)

    这次接着给大家带来人脸图像相关的分享.本次我们的分享是为大家所熟悉的人脸美颜算法,内容将从以下三个方面给大家进行分享: 首先,我们会给大家介绍一下人脸美颜到底包含哪些内容?人脸美颜算法包含的内容非常的 ...

  6. 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)...

    这次接着给大家带来人脸图像相关的分享. 本次我们的分享是为大家所熟悉的人脸美颜算法, 内容将从以下三个方面给大家进行分享: 首先,我们会给大家介绍一下人 脸美颜 到底包含哪些内容? 人 脸 美颜算法包 ...

  7. 人工智能个性化和逼真的漫画素描生成输入人脸图像创建漫画照片

    人工智能个性化和逼真的漫画素描生成输入人脸图像创建漫画照片摘要 - 在本文中,我们提出了第一个交互式个性化和真实感面部漫画的素描系统.输入人脸图像,用户可以通过操纵其面部特征曲线来创建漫画照片.我们的 ...

  8. Python人脸图像特征提取方法

    Python人脸图像特征提取方法 一.HOG人脸图像特征提取 1.HOG特征: 1) 主要思想: 2) 实现方法: 3) 性能提高: 4) 优点 2.HOG特征提取算法的实现过程: 二.Dlib人脸图 ...

  9. Python人脸图像特征提取(HOG、Dlib、CNN方法)

    Python人脸图像特征提取(HOG.Dlib.CNN方法) 一.HOG人脸图像特征提取 1.HOG特征: 1) 主要思想: 2) 实现方法: 3) 性能提高: 4) 优点 2.HOG特征提取算法的实 ...

最新文章

  1. HTML教程--多页面窗体
  2. 计算机应用12班,《计算机应用基础》上机试卷A(10级机电8—12班)
  3. Linux命令学习记录(六)
  4. 网上有打印按键怎么设置下载_打印机共享怎么设置 如何设置打印机共享【详细攻略】...
  5. 构建之法 阅读笔记01
  6. 【NLP】ACL 2021中的25个Transformers模型
  7. ai无法启动产品_启动AI启动的三个关键教训
  8. 【GIS风暴】ArcGIS栅格重采样(Resample)方法详解
  9. easyui-combobox
  10. 驱动中的C语言----指针与指针初使化
  11. android操作XML的几种方式(转)
  12. Oracle数据库出现“本地计算机上的OracleOraDB11g_homeTNSListener服务启动后停止.....”问题解决方案...
  13. 网站做渗透测试服务的步骤
  14. 西门子plc和c语言交换数据,西门子PLC字节交换指令及实例
  15. 微信小程序自定义tab切换(可滑动)
  16. 【openGL2021版】天空盒
  17. 八爪鱼网络爬虫工具——学习笔记整理
  18. CSP 2014-03-1 相反数(C++)
  19. Jenkins构建项目
  20. Python中的解包用法

热门文章

  1. UE4.CPP变焦推进效果(_杰森大师)
  2. 【转载】深入了解scanf()/getchar()和gets()等函数,C++系列教程,C++实例教程,C++
  3. 纵横三国外挂手记(1) 分析篇
  4. open3d使用知识拾遗
  5. 小饶学编程之JAVA SE第二部分——Web 前端基础:09CSS3
  6. 详细解说笔记本电脑怎么录视频
  7. 李笑来-- 学习学习再学习(前言)
  8. Marvell宣战博通网络交换芯片,一大波饿狼扑食而来
  9. Intellij Error:java: Compilation failed: internal java compiler error
  10. python微信群发itchat