文章目录:

  • 1 人脸添加口罩masked_faces
  • 2 添加口罩原理
  • 3 添加口罩代码操作
  • 4 源码分析

A realistic approach to generate masked faces applied on two novel masked face recognition data sets

1 人脸添加口罩masked_faces

1、论文和代码

paper:https://arxiv.org/pdf/2109.01745v5.pdf
code:https://github.com/securifai/masked_faces

2、作者在CelebACASIA-WebFace两个口罩数据集上添加口罩,处理出两个数据集,数据集下载地址:

  • CelebA+masks

  • CASIA-WebFace+masks

  • CASIA-WebFace 数据集上生成445446张(90%)添加口罩人的人脸图片

  • CelebA数据集上生成196254张 (96.8%)张添加口罩的人脸图片

2 添加口罩原理

该实现时依赖于facebook的Spark AR Studio,这是用于Instagram人脸滤镜的(face filter)。 作者使用该方法:

1、首先给一张原始图片
2、随机选择一个mask,然后使用SparkAR的3D face 模型进行转换mask模板
3、调整mask颜色,然后添加到人脸上

效果:

3 添加口罩代码操作

依赖python库包(tqdm、opencv-python)

1、数据准备:

  • 口罩mask的模板图片
  • 原始的CelebACASIA-WebFace数据集

2、在CelebA数据集上处理过程

数据集准备:

main directory
│   apply_masks_celeba.py
└───celeba_masks - masks folder (from this repo)
│   │   ...
└───celeba - data set folder (original images)
│   │   ...
└───masked_celeba - output folder (images with overlaid masks)│   ...

python python apply_masks_celeba.py

3、在CASIA-WebFace数据集上处理过程

数据集准备:

main directory
│   apply_masks_casia.py
└───casia_masks - masks folder (from this repo)
│   │   ...
└───casia - data set folder (original images)
│   │   ...
└───masked_casia - output folder (images with overlaid masks)│   ...

python apply_masks_casia.py

4 源码分析

apply_masks_casia.py

# This script applies masks over Casia-WebFace dataset. casia_folder, masks_folder, output folder should be set
# SecurifAI - 2021import os
import glob
import cv2
from tqdm import tqdmdef overlay_image_alpha(img, img_overlay, pos, alpha_mask):x, y = posy1, y2 = max(0, y), min(img.shape[0], y + img_overlay.shape[0])x1, x2 = max(0, x), min(img.shape[1], x + img_overlay.shape[1])y1o, y2o = max(0, -y), min(img_overlay.shape[0], img.shape[0] - y)x1o, x2o = max(0, -x), min(img_overlay.shape[1], img.shape[1] - x)if y1 >= y2 or x1 >= x2 or y1o >= y2o or x1o >= x2o:returnchannels = img.shape[2]alpha = alpha_mask[y1o:y2o, x1o:x2o]alpha_inv = 1.0 - alphafor c in range(channels):img[y1:y2, x1:x2, c] = (alpha * img_overlay[y1o:y2o, x1o:x2o, c] +alpha_inv * img[y1:y2, x1:x2, c])# casia images main folder
casia_folder = 'CASIA-WebFace'# masks main folder
masks_folder = 'CASIA-WebFace_masks'# masks img list
mask_list = glob.glob(masks_folder + '/*/*.png')# output folder
output_folder = 'masked_CASIA-WebFace'if not os.path.isdir(output_folder):os.mkdir(output_folder)for mask in tqdm(mask_list):    # get the basename of the mask to find original Casia imagemask_basename = os.path.basename(mask)parent_folder = os.path.basename(os.path.dirname(mask))if not os.path.isdir(os.path.join(output_folder,parent_folder)):os.mkdir(os.path.join(output_folder,parent_folder))# create path for original maskimg_path = os.path.join(casia_folder, parent_folder, mask_basename.replace('png','jpg')) # check that original image exists, if it exists load itif os.path.isfile(img_path):casia_image = cv2.imread(img_path)else:continue# load the maskmask_image = cv2.imread(mask,cv2.IMREAD_UNCHANGED)# apply mask over imageoverlay_image_alpha(casia_image,mask_image[:, :, 0:3],(0, 0),mask_image[:, :, 3] / 255.0)# save new overlayed imagecv2.imwrite(os.path.join(output_folder,parent_folder, mask_basename.replace('png','jpg')),casia_image)

apply_masks_celeba.py

# This script applies the celeba_masks over the celeba_images. celeba_folder, output_folder must be set.
# SecurifAI - 2021import glob
import cv2
import os
from tqdm import tqdmdef overlay_image_alpha(img, img_overlay, pos, alpha_mask):x, y = posy1, y2 = max(0, y), min(img.shape[0], y + img_overlay.shape[0])x1, x2 = max(0, x), min(img.shape[1], x + img_overlay.shape[1])y1o, y2o = max(0, -y), min(img_overlay.shape[0], img.shape[0] - y)x1o, x2o = max(0, -x), min(img_overlay.shape[1], img.shape[1] - x)if y1 >= y2 or x1 >= x2 or y1o >= y2o or x1o >= x2o:returnchannels = img.shape[2]alpha = alpha_mask[y1o:y2o, x1o:x2o]alpha_inv = 1.0 - alphafor c in range(channels):img[y1:y2, x1:x2, c] = (alpha * img_overlay[y1o:y2o, x1o:x2o, c] +alpha_inv * img[y1:y2, x1:x2, c])# folder where celeba images are stored
celeba_folder = 'img_celeba'
img_list = glob.glob(celeba_folder + '/*.png')# folder where the masks are stored
mask_folder = 'celeba_masks'
mask_list = glob.glob(mask_folder + '/*.png')# output folder
output_folder = 'masked_celeba'if not os.path.exists(output_folder):os.makedirs(output_folder)for mask in tqdm(mask_list):# get basename and remove '_mask' string, change png to jpgmask_basename = os.path.basename(mask).replace('_mask','').replace('png','jpg')# get celeba path from mask pathimg_path = celeba_folder + '/' + mask_basename# check if we have an image for maskif os.path.exists(img_path):generated_mask = cv2.imread(mask,cv2.IMREAD_UNCHANGED)celeba_img = cv2.imread(img_path)# apply mask over celeba_imageoverlay_image_alpha(celeba_img,generated_mask[:, :, 0:3],(0, 0),generated_mask[:, :, 3] / 255.0)# write new image in output_foldercv2.imwrite(output_folder + '/' + mask_basename, celeba_img)

这个代码不全,在readme也没有说明,开源的代码几乎是没有什么价值!

人脸口罩识别——人脸添加口罩方法masked_faces相关推荐

  1. 人脸表情识别/人脸检测/ML/DL/图像处理博主

    人脸表情识别/人脸检测/ML/DL/图像处理博主 人脸表情识别/人脸检测/ML/DL/图像处理博主:https://blog.csdn.net/app_12062011/article/categor ...

  2. OpenCV中LBPH人脸识别器识别人脸实战(附Python源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ Local Binary Pattern Histofram简称LBPH,即局部二进制模式直方图,这是一种基于局部二进制模式算法,这种算法善于捕获局 ...

  3. OpenCV中Fisherfaces人脸识别器识别人脸实战(附Python源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ Fisherfaces是由Ronald Fisher最早提出的,这也是它名字的又来,它基于LDA线性判别分析技术,该方法将人脸数据转换到另外一个空间 ...

  4. OpenCV中使用Eigenfaces人脸识别器识别人脸实战(附Python源码)

    需要源码和图片请点赞关注收藏后评论区留言私信~~~ Opencv提供了三种人脸识别方法,分别是Eigenfaces,Fisherfaces,LBPH这三种放噶都是通过对比样本最终实现人脸识别,因为这三 ...

  5. 【Python+OpenCV+sklearn+easygui】人脸(口罩)识别+口罩下人脸补全的系统设计

    [写在前面:笔者是一个才接触python半年之久的编程菜鸡,刚好这学期的课程需要用到python做一些有关计算机视觉的设计,于是就根据自己所学,同时借鉴了一些CSDN上各位大佬的思路和代码,做了一个简 ...

  6. 基于python keras口罩检测人脸检测佩戴口罩可读视频可读摄像头实时视频流

    人脸识别技术已经非常普及啦,现在戴口罩的脸支付宝也可以识别,据报道阿里现在正在尝试主导人脸识别技术的某些标准.在商业上大多数公司会选择国内AI大咖,比如百度智能云.阿里智慧云.华为云.腾讯云等等.这些 ...

  7. 【人脸表情识别】基于回归模型的人脸表情识别方法

    前面几篇专栏中,我们介绍了有关基于图片/视频的人脸表情识别的相关内容,这两个领域采用解决分类问题的方法来对表情进行识别.这篇文章,我们将介绍通过回归的方式来理解表情的方式--基于连续模型的人脸表情识别 ...

  8. 【完结】如何掌握基于图像和视频的人脸表情识别,这9篇文章可以作为一个参考...

    文/编辑 | 言有三 人脸表情识别(Facial Expression Recognition,FER)作为人脸识别技术中的一个重要组成部分,近年来在人机交互.安全.机器人制造.自动化.医疗.通信和驾 ...

  9. 【杂谈】从CV小白到人脸表情识别专栏作者,我与有三AI的故事

    各位有三AI的读者朋友大家好呀~我是刚刚更新完结的[人脸表情识别]专栏的作者,一名仍然在读的研究生.在分享完我的专栏内容后,分享一下我这枚CV小白与有三 AI 的故事. 认识有三AI 我本科的专业是软 ...

最新文章

  1. OpenCv java 颜色空间(9)
  2. GitHub引入联合提交者功能
  3. 微信公众号开发之微信JSSDK
  4. 可遇不可求的BUG之采用MYSQL odbc 3.51访问数据库返回值缺失
  5. opencms的主工作区文件研究
  6. nagios 整合 ganglia 设置邮件、短信报警
  7. 2019.8.21页面功能的实现
  8. [Python] np.unique(ndarray) 返回ndarray的无重复元素的数组
  9. OpenStack单点部署及使用简单教程(附:部署好的VMware虚拟机)
  10. python 保存图片_python 输出文档到world
  11. VBS/BAT使用/恶搞(操作+图示)
  12. java中文乱码_Java中文乱码问题的解决方案
  13. 数学建模教程:GSpan-频繁子图挖掘算法
  14. Java实现生成并下载Excel文件
  15. bzoj5394 [Ynoi2016]炸脖龙 树状数组+拓展欧拉定理
  16. 解决虚拟机IP地址无法获取和网络无法连接
  17. 扣血抖动和FPS显示
  18. 4十4十4写成乘法算式_乘法算式怎么写
  19. SPI通信协议详解,一篇就够!
  20. 有关lpk.dll病毒的清除方法

热门文章

  1. 视频编码名词参数解释——非常全面详细
  2. asp.net使用easyUI 前后台数据交互
  3. NYOJ 12 喷水装置(二)
  4. [转]C#开发高性能Log Help类设计开发
  5. 争取做一个良性循环的程序员
  6. Android模拟器入门
  7. 哪里可以找到python的免费教程-哪里有免费的python3教程啊?最好是有例子的视频教学...
  8. 小学生学python到底能干什么-颤抖 | 小学生都开始学Python了,十年后你还有工作么?...
  9. python安装教程windows-PyCharm 安装教程(Windows)
  10. python与excel做数据可视化-用Python进行数据可视化的10种方法