PaddleHub人脸关键点检测实现猫脸人嘴特效
前段时间,下班后闲来无事,参加了百度PaddleHub的AI人像抠图创意赛,凭借着大家的阅读量,获得了一个第三名,得了一个小度音响,真香啊! PaddleHub创意赛第二期又出来了,这次要做什么呢? 人脸检测主题创意赛 ,爱搞事的我肯定是少不了搞一波事情的,想想这能玩出什么花样来?
前段时间,下班后闲来无事,参加了百度PaddleHub的AI人像抠图创意赛,凭借着大家的阅读量,获得了一个第三名,得了一个小度音响,真香啊!
PaddleHub创意赛第二期又出来了,这次要做什么呢?
人脸检测主题创意赛,爱搞事的我肯定是少不了搞一波事情的,想想这能玩出什么花样来?
下班路上刷知乎,看见有人用dlib + 猫脸检测器 + 泊松融合实现了抖音猫脸人嘴的特效,瞬间……
程序主要结合PaddleHub的人脸关键点模型截取人嘴位置,opencv猫脸检测器定位猫脸(没找到猫脸关键点检测模型)和opencv泊松融合函数实现图像的融合,共三部分。
一、人脸关键点检测
- PaddleHub关键点检测模型face_landmark_localization,该模型转换自 https://github.com/lsy17096535/face-landmark ,支持同一张图中的多个人脸检测。它可以识别人脸中的68个关键点。
NOTE: 如果您在本地运行该项目示例,需要首先安装PaddleHub。如果您在线运行,可以去底部阅读原文的百度AI Studio fork该项目。之后按照该示例操作即可。
import cv2
import paddlehub as hub
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import math
%matplotlib inline
src_img = cv2.imread(\'images/youngni2.jpg\')
module = hub.Module(name="face_landmark_localization")
result = module.keypoint_detection(images=[src_img])
tmp_img = src_img.copy()
for face in result[0][\'data\']:
for index, point in enumerate(face):
# print(point)
# cv2.putText(img, str(index), (int(point[0]), int(point[1])), cv2.FONT_HERSHEY_COMPLEX, 3, (0,0,255), -1)
cv2.circle(tmp_img, (int(point[0]), int(point[1])), 2, (0, 0, 255), -1)
res_img_path = \'face_landmark.jpg\'
cv2.imwrite(res_img_path, tmp_img)
img = mpimg.imread(res_img_path)
# 展示预测68个关键点结果
plt.figure(figsize=(10,10))
plt.imshow(img)
plt.axis(\'off\')
plt.show()
二、猫脸检测
猫脸检测使用OpenCV自带的猫脸检测器(感觉喵星人真的是要统治世界了