我用PaddleHub给人像戴上了口罩

简介: 我用PaddleHub给人像戴上了口罩

1.关键点检测


人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别、表情分析、三维人脸重建及三维动画等其它人脸相关问题的前提和突破口。该 PaddleHub Module 的模型转换自 github.com/lsy17096535… ,支持同一张图中的多个人脸检测。

image.png


2.检测关键点


很简单,通过PaddleHub的face_landmark_localization模块进行关键点检测

import paddlehub as hub
import cv2
import os
face_landmark = hub.Module(name="face_landmark_localization")
result = face_landmark.keypoint_detection(images=[cv2.imread('1.jpg')], output_dir='face_landmark_output',
                                          visualization=False)
# 左上:2
# 右上:16
# 最下中:9
# print(result)
data = result[0]['data'][0]
print(data)
print(len(data))
print("左上:2 ", data[1])
print("右上:16 ", data[15])
print("最下中:9 ", data[8])
width = int(data[15][0] - data[1][0])+50
height = int(data[8][1] - data[29][1])
# dx = int(data[1][0] + width / 2)
# dy = int(data[8][1] - height / 2)
dx = int(data[1][0])-10
dy = int(data[1][1])
print(width, height, dx, dy)


3.合成


主要是根据检测的脸的大小resize口罩,最后进行图层合并

# 第二步:合成
def merge(face_pic, w, h, dx, dy):
    mask_path = 'mask.png'
    face = cv2.imread(face_pic, cv2.IMREAD_COLOR)  # 捕获图像1
    print('face pic shape: ', face.shape)
    # 口罩
    # IMREAD_UNCHANGED  If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
    # 因此Png必须是4通道的IMREAD_UNCHANGED
    mask = cv2.imread(mask_path, cv2.IMREAD_UNCHANGED)
    # mask = cv2.resize(mask, [w, h])
    mask = cv2.resize(mask, (w, h))
    rows, cols, channels = mask.shape
    print('mask shape: ', rows, cols, channels)
    roi = face[dy:dy + rows, dx:dx + cols]
    print('dx + rows,  dy + cols', dy + rows, dx + cols)
    for i in range(rows):
        for j in range(cols):
            if not (mask[i, j][3] == 0):  # 透明的意思
                roi[i, j][0] = mask[i, j][0]
                roi[i, j][1] = mask[i, j][1]
                roi[i, j][2] = mask[i, j][2]
    face[dy:dy + rows, dx:dx + cols] = roi
    merge_img_path = 're_' + face_pic
    cv2.imwrite(merge_img_path, face)
    return 're_' + face_pic
merge('1.jpg', width, height, dx, dy)


4.效果


image.pngimage.pngimage.png


目录
相关文章
|
自然语言处理
我用Stable diffusion复活了一个动漫女孩lofi girl
通过Stable diffusion的img2img功能,借助control net 把动漫人物还原成真实人物 使用到的技术Stable diffusion web ui、control net、img2img以及prompt进行微调
1371 0
|
3月前
|
机器学习/深度学习 人工智能 算法
基于YOLOV10的反光衣头盔佩戴实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv10的反光衣头盔佩戴实时检测系统,使用4409张工业场景图片训练,能检测未穿反光衣、穿反光衣、未佩戴头盔、佩戴头盔四种情况,确保工人安全。系统支持更换背景标题、模型选择、图片视频检测等功能,基于Python和Pyside6开发。
165 1
基于YOLOV10的反光衣头盔佩戴实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
|
8月前
|
XML 算法 计算机视觉
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
389 1
|
8月前
|
存储 Web App开发 前端开发
Airtest-Selenium实操小课③:下载可爱猫猫图片
Airtest-Selenium实操小课③:下载可爱猫猫图片
|
8月前
|
机器学习/深度学习 Ubuntu Linux
openpose原理及安装教程(姿态识别)
openpose原理及安装教程(姿态识别)
|
存储
使用mediapipe实现ikun表情包制作
使用mediapipe实现ikun表情包制作
925 0
|
计算机视觉 C++ Python
Python+Yolov5反光衣黄色马甲特征识别监测快速锁定目标人物体
Yolov5比较Yolov4,Yolov3等其他识别框架,速度快,代码结构简单,识别效率高,对硬件要求比较低。这篇博客针对<<Python+Yolov5反光衣黄色马甲特征识别监测快速锁定目标人物体>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
192 0
技巧 | 一个以假乱真的Python库,我裂开了。。
技巧 | 一个以假乱真的Python库,我裂开了。。
|
机器学习/深度学习 PyTorch 程序员
【Python】Pytorch(CNN)实现垃圾,宝石,表情,车牌,鸟类,食物等各种分类
【Python】Pytorch(CNN)实现垃圾,宝石,表情,车牌,鸟类,食物等各种分类
156 0
基于PaddleNLP ppdiffusers 自动生成【兔了个兔】海报
基于PaddleNLP ppdiffusers 自动生成【兔了个兔】海报
118 0