Python批量检测图片中的人脸并制作数据集(Dlib)

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python批量检测图片中的人脸并制作数据集(Dlib)相关的知识,希望对你有一定的参考价值。


写在前面

本教程教你使用卷积神经网络深度学习模型批量检测图片中的人脸,并制作人脸数据集。

安装依赖

【Python】Dlib库安装教程(Windows)

素材准备

素材用我们之前在唯美女生网站爬取的17601张共1.62GB的小姐姐图片。

爬虫教程:【Python】多线程爬取某站高颜值小姐姐照片(共1.62GB)
素材下载:微软云盘 | 百度网盘(提取码:2233) | 天翼云盘

单图预览

在这里插入图片描述

多图预览

在这里插入图片描述

人脸检测

采用多线程技术批量检测图片中人脸并将其裁剪保存下来。

import os
import cv2
import dlib
import time
from tqdm import tqdm
import concurrent.futures as cf


class MakeFaceDataset():
    def __init__(self, srcdir, dstdir):
        self.srcdir = srcdir # 指定图像文件夹路径
        self.dstdir = dstdir # 指定人脸文件夹路径
        os.makedirs(dstdir, exist_ok=True)

    def crop(self, subdir):
        for j in tqdm(os.listdir(f'{self.srcdir}/{subdir}'), desc=subdir):
            in_path = f'{self.srcdir}/{subdir}/{j}'
            out_path = f'{self.dstdir}/{subdir}_{j.split(".")[0]}'
            model_path = './cnn_human_face_detect.dat'
            cnn_face_detector = dlib.cnn_face_detection_model_v1(model_path)
            img = cv2.imread(in_path)
            img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            img_hist = cv2.equalizeHist(img_gray)
            faces = cnn_face_detector(img_hist, 1)
            for index, face in enumerate(faces):
                x1 = face.rect.left()
                y1 = face.rect.top()
                x2 = face.rect.right()
                y2 = face.rect.bottom()
                cp = img[y1:y2, x1:x2]
                cv2.imwrite(f'{out_path}_{index+1}.jpg', cp)

    def main(self):
        with cf.ThreadPoolExecutor() as tp:
            for i in os.listdir(self.srcdir):
                tp.submit(self.crop, i)
        print('Face Detection Finished!')
                
                    
if __name__ == '__main__':
    MakeFaceDataset('./vmgs', './vmgs-face').main()

数据处理

对提取出来的人脸图像进行筛选,只保留长、宽都大于128的,并resize128x128大小。

import os
from tqdm import tqdm
from PIL import Image
import concurrent.futures as cf


class DataProcessing(object):
    def __init__(self, srcdir, dstdir):
        self.srcdir = srcdir # 指定人脸文件夹路径
        self.dstdir = dstdir # 指定处理后的人脸文件夹路径
        os.makedirs(self.dstdir, exist_ok=True)

    def size(self, in_path, out_path, pbar):
        img = Image.open(in_path)
        w, h = img.size
        if w >= 128 and h >= 128:
            img = img.resize((128, 128), Image.ANTIALIAS)
            img.save(out_path, quality=95)
        else:
            pass
        pbar.update(1)

    def main(self):
        total = len(os.listdir(self.srcdir))![在这里插入图片描述](https://img-blog.csdnimg.cn/20210503113427465.jpg?x-oss-process=image,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyOTUxNTYw,size_16,color_FFFFFF,t_70#pic_center)

        with tqdm(total=total) as pbar:
            with cf.ThreadPoolExecutor() as tp:
                for item in os.listdir(self.srcdir):
                    in_path = f'{self.srcdir}/{item}'
                    out_path = f'{self.dstdir}/{item}'
                    tp.submit(self.size, in_path, out_path, pbar)


if __name__ == '__main__':
    DataProcessing('./vmgs-face', './vmgs-face-processing').main()

最终结果

数据处理后人脸数据集就制作好了,共8768128x128的小姐姐人脸图像。

微软云盘:点击下载
百度网盘:点击下载
天翼云盘:点击下载

在这里插入图片描述

代码仓库

Github:https://github.com/XavierJiezou/python-vmgirls-crawl

以上是关于Python批量检测图片中的人脸并制作数据集(Dlib)的主要内容,如果未能解决你的问题,请参考以下文章

Python人脸识别微笑检测

Python 人脸表情识别

python 识别图片中的人脸,并裁剪人脸,将图片转化成固定大小,并将图片再按照自己的后缀名存储起来

利用python爬取特定类别图片---labelimg制作自己的目标检测数据集

opencv人脸检测,旋转处理

使用Python搭建人脸识别考勤系统