基于PaddleHub人脸关键的检测的脸颊物品粘贴
效果展示
声明:以上均为展示,请不要上升到国家/球队/个人层面
数据写入
内容范围说明genre0,1,20:左边单侧 1:右边单侧 2:双侧flagimg地址贴图地址faceimg地址人物正脸地址(脸要尽可能明显)toflagimg地址另外一侧贴图地址(右侧)
genre = 2 # 0:左边单侧 1:右边单侧 2:双侧
flagimg = './agt.png' # 贴图地址
faceimg = './p2c_photo.png' # 人物地址
toflagimg = './bx.png' # 另外一侧贴图地址(右侧)
1.0、PaddleHub及PaddleGAN导入及函数定义
!pip install -U paddlehub
!hub install face_landmark_localization==1.0.2
# 安装PaddleGAN的pip包,即可使用api预测方式
!pip install --upgrade ppgan
!pip install dlib==19.22.0 -i https://pypi.douban.com/simple
import paddlehub as hub
import cv2
import os
face_landmark = hub.Module(name="face_landmark_localization")
result = face_landmark.keypoint_detection(images=[cv2.imread(faceimg)])
import numpy as np
from PIL import Image
import cv2
import numpy as np
from math import sqrt
def sjb_hand(result1, flagimg, faceimg, select):
result1 = result[0]['data'][0]
pts = []
def around(select):
order = [[2, 30, 3, 31], [30, 31, 16, 15]]
order = order[select]
for o in order:
tx = int(result1[o-1][0])
ty = int(result1[o-1][1])
pts.append([tx, ty])
x = []
y = []
for pt in pts:
x.append(pt[0])
y.append(pt[1])
# x = tuple(x)
# y = tuple(y)
x1 = min(x)
y1 = min(y)
x2 = max(x)
y2 = max(y)
# print(x1, x2, y1, y2)
return x1, x2, y1, y2
x1, x2, y1, y2 = around(select)
img = Image.open(flagimg)
# print(((x2 - x1) // 2), int((y2 - y1) * 1.2))
reim=img.resize((((x2 - x1) // 2), int((y2 - y1) * 1.2))) # 宽*高
reim.save('newflagimg.png')
im = cv2.imread(faceimg)
obj = cv2.imread('newflagimg.png')
mask = 255 * np.ones(obj.shape, obj.dtype)
# print(im.shape, obj.shape)
center = (int(x1+(x2-x1)//2), y1+(y2-y1)//2)
mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2. NORMAL_CLONE)
cv2.imwrite("inputimg.jpg", mixed_clone)
2.0 图像动漫化处理
#生成动画头像
from ppgan.apps import Photo2CartoonPredictor
%cd /home/aistudio
p2c = Photo2CartoonPredictor(output_path='/home/aistudio/result/')
p2c.run(faceimg)
3.0 物品粘贴实现并展示
if genre == 0:
sjb_hand(result, flagimg, './result/p2c_photo.png', 0)
os.rename("./inputimg.jpg", './newphoto.jpg')
sjb_hand(result, flagimg, './result/p2c_cartoon.png', 0)
os.rename("./inputimg.jpg", './newcartoon.jpg')
elif genre == 1:
sjb_hand(result, flagimg, './result/p2c_photo.png', 1)
os.rename("./inputimg.jpg", './newphoto.jpg')
sjb_hand(result, flagimg, './result/p2c_cartoon.png', 1)
os.rename("./inputimg.jpg", './newcartoon.jpg')
elif genre == 2:
tofaceimg = "inputimg.jpg"
sjb_hand(result, flagimg, './result/p2c_photo.png', 0)
sjb_hand(result, toflagimg, tofaceimg, 1)
os.rename("./inputimg.jpg", './newphoto.jpg')
sjb_hand(result, flagimg, './result/p2c_cartoon.png', 0)
sjb_hand(result, toflagimg, tofaceimg, 1)
os.rename("./inputimg.jpg", './newcartoon.jpg')
from PIL import Image
Image.open('newcartoon.jpg')
from PIL import Image
Image.open('newphoto.jpg')
项目报错原因预测及解决方案
1、 dlib安装失败,请在GPU环境进行
2、项目失败,文件不存在。请查看是否添加图片并修改有关的地址链接
3、2.0动漫处理报错,原因极有可能是1中的安装失败或者图片脸部不够明显,建议更换GPU然后换图片
4、其他,可以留言进行询问,会第一时间回复
作者简介
作者:三岁 经历:自学python,现在混迹于paddle社区,希望和大家一起从基础走起,一起学习 Paddle csdn地址:https://blog.csdn.net/weixin_45623093/article/list/3 我在AI Studio上获得至尊等级,点亮9个徽章,来互关呀~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/284366
传说中的飞桨社区最菜代码人,让我们一起努力! 记住:三岁出品必是精品 (不要脸系列
此文章为搬运 原项目链接