Python实战项目:为人脸照片添加口罩

前言

好想玩点不一样的,感觉平常的已经不能吸引大家了。想了又想,我今天给大家分享如何给人像添加口罩吧。毕竟最近疫情那么

严重,也只能玩玩这个了,大家千万别乱跑啊。

效果展示

在这里插入图片描述

数据集展示

数据集来源:使用了开源数据集FaceMask_CelebA

github地址:https://github.com/sevenHsu/FaceMask_CelebA.git

部分人脸数据集:
在这里插入图片描述

口罩样本数据集:

在这里插入图片描述

为人脸照片添加口罩代码

这部分有个库face_recognition需要安装,如果之前没有用过的小伙伴可能得费点功夫。

Face Recognition 库主要封装了dlib这一 C++ 图形库,通过 Python 语言将它封装为一个非常简单就可以实现人脸识别的 API

库,屏蔽了人脸识别的算法细节,大大降低了人脸识别功能的开发难度。

Python学习交流Q群:906715085###
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : 2014Vee
import os
import numpy as np
from PIL import Image, ImageFile

__version__ = '0.3.0'

IMAGE_DIR = os.path.dirname
('E:/play/FaceMask_CelebA-master/facemask_image/')
WHITE_IMAGE_PATH = os.path.join
(IMAGE_DIR, 'front_14.png')
BLUE_IMAGE_PATH = os.path.join(IMAGE_DIR, 
'front_14.png')
SAVE_PATH = os.path.dirname
('E:/play/FaceMask_CelebA-
master/save/synthesis/')
SAVE_PATH2 = os.path.dirname
('E:/play/FaceMask_CelebA-
master/save/masks/')

class FaceMasker:    
KEY_FACIAL_FEATURES = ('nose_bridge',
 'chin')
 
    def __init__(self, face_path, 
mask_path, white_mask_path, save_path,
save_path2, model='hog'):        
self.face_path = face_path        
self.mask_path = mask_path        
self.save_path = save_path        
self.save_path2 = save_path2        
self.white_mask_path =
 white_mask_path        
self.model = model        
self._face_img: ImageFile = None        
self._black_face_img = None        
self._mask_img: ImageFile = None       
 self._white_mask_img = None
    def mask(self):       
import face_recognition

        face_image_np = 
face_recognition.load_image_file
(self.face_path)        
face_locations = 
face_recognition.face_locations
(face_image_np, model=self.model)        
face_landmarks = 
face_recognition.face_landmarks
(face_image_np, face_locations)        
self._face_img = Image.fromarray
(face_image_np)        
self._mask_img = Image.open
(self.mask_path)        
self._white_mask_img = Image.open
(self.white_mask_path)        
self._black_face_img = Image.new
('RGB', self._face_img.size, 0)
        found_face = False        
        for face_landmark in face_landmarks:            
        # check whether facial features meet requirement            
        skip = False            
        for facial_feature in self.KEY_FACIAL_FEATURES:                
        if facial_feature not in face_landmark:                    
 skip = True                    
 break           
if skip:                
continue
            
 # mask face            
 found_face = True           
  self._mask_face(face_landmark)
        
 if found_face:            
  # save           
   self._save()       
    else:            
print('Found no face.')
    def _mask_face(self, face_landmark: dict):        
nose_bridge = face_landmark['nose_bridge']        
nose_point = nose_bridg
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值