戴口罩人脸数据集和戴口罩人脸生成方法
目录
4. 戴口罩人脸检测和戴口罩识别(含Python Android源码)
目前网上已经开源了很多免费的人脸识别/人脸检测数据集,比如常见的LFW,FDDB,WIDER FACE,300W等,估计加起来都有好几个忆了。但这些人脸数据绝大部分都是不戴口罩的人脸,不能直接用于戴口罩识别中。网上也有少许开源的戴口罩人脸数据集,鄙人花了点时间,整理一下目前常见的戴口罩人脸数据集,以及戴口罩人脸数据的合成/生成方法。
- 包含5个数据集: facemask-train1, facemask-train2,facemask-train3, synthetic-train1,synthetic-train2 ,facemask-test ,总共约有50000+的数据:
- 生成戴口罩人脸代码: python create_facemask.py
项目数据和生成戴口罩人脸源码下载地址:戴口罩人脸数据集和生成戴口罩人脸数据
1.戴口罩人脸数据集
(1)开源数据集-戴口罩人脸数据集
一些开源的,免费的戴口罩人脸数据集,download下来,发现这些开源的数据比较脏,有挺多也是标注错误的,需求自己清洗一下哦~
数据集 | 说明 |
virus-mask-dataset |
|
MaskedFace-Net |
|
Real-World Masked Face Datase |
(2)生成戴口罩人脸的数据集
网上绝大部分人脸数据都是不戴口罩的人脸,不能直接用于戴口罩识别中。鉴于此,我们可以考虑自己合成/生成戴口罩的人脸数据,以下是鄙人收藏和整理的戴口罩人脸数据集和合成的数据集,总共约有50000+的数据:
数据集 | 说明 |
facemask-train1 |
|
facemask-train2 |
|
facemask-train3 |
|
synthetic-train1 |
|
synthetic-train2 |
|
facemask-test |
|
2.戴口罩人脸生成方法
(1)生成戴口罩人脸思路
- 首先进行人脸检测和人脸关键点检测
- 根据人脸关键点,计算脸颊的宽度和鼻梁位置等位置信息,同理,需要计算出口罩模板的大小、方向和位置;
- 最后把口罩模板贴在人脸位置上,等到合成的戴口罩人脸图片
一些戴口罩生成代码参考:
GitHub - sevenHsu/FaceMask_CelebA: Simulated masked face with dataset CelebA
给人脸戴上口罩,Python实战项目来了_我爱Python数据挖掘的博客-CSDN博客
我测试了目前网上的生成戴口罩代码,对于已经矫正的人脸,生成效果还是不错的,但如果原始人脸本身就是倾斜(歪头),这时直接使用原始代码,合成的效果就很差了,在此基础上,我做了优化工作:
- 增加了口罩模板,共有29种不同类型的口罩模板,提供合成口罩数据的多样性
- 优化了口罩倾斜角度,使得人脸倾斜(歪头)时,合成的效果也不错
- 优化了人脸检测,采用轻量化人脸检测,加速生成速度
原始图片 | 原始代码生成戴口罩 | 优化后生成戴口罩 |
对于已经矫正的人脸,生成效果还是不错的,但如果原始人脸本身就是倾斜(歪头),这时直接使用原始代码,合成的效果就很差了 |
(2)口罩模板
口罩模板即口罩Mask图像(PNG格式),可以通过Photoshop抠图的方式,把背景去除;目前已经提供了共有29种不同类型的口罩模板,保证了口罩数据的多样性。
(3)戴口罩人脸生成Demo
安装好python相关依赖包
-
pybaseutils
-
opencv-python==4.5.1.48
-
face_recognition
-
tqdm
-
torch
-
torchvision
代码已经自带了测试图片和数据,你也可以更换成自己的人脸数据集:
python create_facemask.py
-
# -*-coding: utf-8 -*-
-
"""
-
@Author : panjq
-
@E-mail : pan_jinquan@163.com
-
@Date : 2022-06-25 22:23:11
-
@Brief : 生成戴口罩人脸数据集
-
"""
-
import os
-
import sys
-
-
sys.path.insert(
0, os.getcwd())
-
sys.path.insert(
0,
"libs")
-
from tqdm
import tqdm
-
from facemask.wearmask
import FaceMaskCreator
-
from pybaseutils
import file_utils, image_utils
-
-
-
class
FaceMaskDemo(
object):
-
def
__init__(
self):
-
self.mask_creator = FaceMaskCreator(detect_face=
True, alignment=
False)
-
-
def
create_wear_mask_faces(
self, image_dir, out_dir=None, vis=True):
-
"""
-
生成戴口罩人脸数据集
-
:param image_dir: 人脸图片目录
-
:param out_dir: 生成戴口罩人脸输出目录
-
:param vis: 是否可视化效果
-
:return:
-
"""
-
image_list = file_utils.get_files_lists(image_dir)
-
for image_path
in tqdm(image_list):
-
image_id = os.path.basename(image_path).split(
".")[
0]
-
image = image_utils.read_image(image_path, size=(
512,
None), use_rgb=
True)
-
mask, face_rects = self.mask_creator.create_masks(image, mask_type=
"random", vis=vis)
-
if out_dir:
-
self.mask_creator.save_image(image, mask, face_rects, out_dir, image_id)
-
-
-
if __name__ ==
'__main__':
-
image_dir =
"./facemask/test_image"
# 人脸图片
-
out_dir =
"./output"
# 生成戴口罩人脸输出目录
-
fm = FaceMaskDemo()
-
fm.create_wear_mask_faces(image_dir, out_dir, vis=
True)
(4)生成戴口罩人脸效果展示
原图 | 合成带口罩图 |
3. 生成戴口罩数据集和源码下载
下载地址包含内容有:
https://mp.weixin.qq.com/s/4dtC9CeP50M-3nn3xel1Ow
- 包含5个数据集: facemask-train1, facemask-train2,facemask-train3, synthetic-train1,synthetic-train2 ,facemask-test ,总共约有50000+的数据:
- 生成戴口罩人脸代码: python create_facemask.py
4. 戴口罩人脸检测和戴口罩识别(含Python Android源码)
准备好人脸数据集和戴口罩人脸数据集,下一步就可以开始训练戴口罩识别模型,请参考:
转载:https://blog.csdn.net/guyuealian/article/details/125069926