面包屑图标 当前位置: 首页
AI资讯
热点详情

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟

AI热点日报
AI热点日报时间:2025-07-18
热点解读

本文介绍了将人像转化为“蜡笔小宸”(蜡笔小新风格)的方法。步骤包括:登录“蜡笔大陆”安装所需库;用PaddleHub进行人脸68个关键点检测,为后续操作打基础;提取眉毛关键点,通过

本文介绍了将人像转化为“蜡笔小宸”(蜡笔小新风格)的方法。步骤包括:登录“蜡笔大陆”安装所需库;用PaddleHub进行人脸68个关键点检测,为后续操作打基础;提取眉毛关键点,通过连线并控制宽度刻画粗眉;运用图像局部平移算法,依据人脸关键点进行“胖脸”操作,使脸部更圆润。还可通过run.py一键执行,调整参数获得对应效果。

paddlehub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

一键寻找蜡笔小新的远方表弟

蜡笔小新应该是好多小伙伴的童年回忆之一,不会有人不喜欢蜡笔小新那招牌的粗眉毛以及圆嘟嘟的小脸蛋吧!不会吧不会吧!下面嘞,我们以宸哥作为工具人,还原蜡笔小新的远房表弟————蜡笔小宸!

让我们先看一下蜡笔小宸,一睹为快!

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

跟着我的步伐,寻找蜡笔小新的远房表弟之路,正式开启!(二三四步骤为过程演示~一键寻找请在登陆蜡笔大陆之后跳至第五部分)

一、登陆蜡笔大陆

In [ ]
!pip install --upgrade pip!pip install opencv-python==4.5.4.60!pip install paddlehub==2.1.1
登录后复制

二、使用PaddleHub进行人脸关键点检测

人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别、表情分析、三维人脸重建及三维动画等其它人脸相关问题的前提和突破口。该 PaddleHub Module 的模型转换自 https://github.com/lsy17096535/face-landmark ,支持同一张图中的多个人脸检测。此步的目的是获取人脸68个关键点的坐标,如下图所示。有了人脸68个关键点的坐标,再接下来进行蜡笔眉的刻画,以及嘟嘟脸的生成就会轻松许多。

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

In [3]
import cv2import paddlehub as hubimport matplotlib.pyplot as plt import matplotlib.image as mpimgimport numpy as npimport mathfrom PIL import Imagesrc_img = cv2.imread('example.webp')# 加载模型并进行预测module = hub.Module(name="face_landmark_localization")result = module.keypoint_detection(images=[src_img])tmp_img = src_img.copy()for index, point in enumerate(result[0]['data'][0]):# 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.webp'cv2.imwrite(res_img_path, tmp_img)img = mpimg.imread(res_img_path) # 展示预测68个关键点结果(若未显示关键点可视化结果请再次运行此cell)plt.figure(figsize=(10,10))plt.imshow(img) plt.axis('off') plt.show()
登录后复制
[2024-11-30 14:27:46,626] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object[2024-11-30 14:27:46,743] [ WARNING] - The _initialize method in HubModule will soon be deprecated, you can use the __init__() to handle the initialization of the object---    Fused 0 subgraphs into layer_norm op.---    Fused 0 subgraphs into layer_norm op.
登录后复制
登录后复制登录后复制登录后复制

三、刻画蜡笔眉

在上一步中我们得到了人脸68个关键点坐标,其中18-22,23-27为眉毛的坐标值。想得到蜡笔小新这照片的粗粗眉,简单来讲只需将眉毛的坐标点连成线,控制适当的宽度即可。

这里可以使用opencv的line()函数轻松实现。

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

In [4]
def thick_eyebrows(image, face_landmark, width):for i in range(18-1, 22-1):cv2.line(image, face_landmark[i], face_landmark[i+1], (0, 0, 0), width)for i in range(23-1, 27-1):cv2.line(image, face_landmark[i], face_landmark[i+1], (0, 0, 0), width)return image# 提取出人脸关键点坐标face_landmark = np.array(result[0]['data'][0], dtype='int')# 生成蜡笔小新版眉毛width = 8src_img = thick_eyebrows(src_img, face_landmark, width)cv2.imwrite('thick_eyebrows.webp', src_img)img = mpimg.imread('thick_eyebrows.webp') # 展示蜡笔眉plt.figure(figsize=(10,10))plt.imshow(img) plt.axis('off') plt.show()
登录后复制
登录后复制登录后复制登录后复制

四、打肿脸充小新

在这里,使用了图像局部平移算法。思路是:由变形前坐标,根据变形映射关系,得到变形后坐标。这其中变形映射关系是最关键的,不同的映射关系,将得到不同的变形效果。平移、缩放、旋转,对应的是不同的映射关系,即不同的变换公式。当然实际在计算过程中,用的是逆变换,即由变形后坐标,根据逆变换公式反算变形前坐标,然后插值得到该坐标rgb像素值,将该rgb值作为变形后坐标对应的像素值。这样才能保证变形后的图像是连续、完整的。

In [5]
# 进行胖脸操作def fat_face(image, face_landmark):    end_point = face_landmark[30]    # 胖左脸,3号点到5号点的距离作为一次胖脸距离    dist_left = np.linalg.norm(face_landmark[3] - face_landmark[5])    image = local_traslation_warp(image, face_landmark[3], end_point, dist_left)    # 胖右脸,13号点到15号点的距离作为一次胖脸距离    dist_right = np.linalg.norm(face_landmark[13] - face_landmark[15])    image = local_traslation_warp(image, face_landmark[13], end_point, dist_right)    return image
登录后复制In [6]
# 局部平移算法def local_traslation_warp(image, start_point, end_point, radius):radius_square = math.pow(radius, 2)image_cp = image.copy()dist_se = math.pow(np.linalg.norm(end_point - start_point), 2)height, width, channel = image.shapefor i in range(width):for j in range(height):# 计算该点是否在形变圆的范围之内# 优化,第一步,直接判断是会在(start_point[0], start_point[1])的矩阵框中if math.fabs(i - start_point[0]) > radius and math.fabs(j - start_point[1]) > radius:continuedistance = (i - start_point[0]) * (i - start_point[0]) + (j - start_point[1]) * (j - start_point[1])if distance < radius_square:# 计算出(i,j)坐标的原坐标# 计算公式中右边平方号里的部分ratio = (radius_square - distance) / (radius_square - distance + dist_se)ratio = ratio * ratio# 映射原位置new_x = i + ratio * (end_point[0] - start_point[0])new_y = j + ratio * (end_point[1] - start_point[1])new_x = new_x if new_x >= 0 else 0new_x = new_x if new_x < height - 1 else height - 2new_y = new_y if new_y >= 0 else 0new_y = new_y if new_y < width - 1 else width - 2# 根据双线性插值法得到new_x, new_y的值image_cp[j, i] = bilinear_insert(image, new_x, new_y)return image_cp# 双线性插值法def bilinear_insert(image, new_x, new_y):w, h, c = image.shapeif c == 3:x1 = int(new_x)x2 = x1 + 1y1 = int(new_y)y2 = y1 + 1part1 = image[y1, x1].astype(np.float) * (float(x2) - new_x) * (float(y2) - new_y)part2 = image[y1, x2].astype(np.float) * (new_x - float(x1)) * (float(y2) - new_y)part3 = image[y2, x1].astype(np.float) * (float(x2) - new_x) * (new_y - float(y1))part4 = image[y2, x2].astype(np.float) * (new_x - float(x1)) * (new_y - float(y1))insertvalue = part1 + part2 + part3 + part4return insertvalue.astype(np.int8)
登录后复制In [7]
# 进行胖脸操作fat_nums = 3for i in range(1, fat_nums):src_img = fat_face(src_img, face_landmark)cv2.imwrite('res.webp', src_img)img = mpimg.imread('res.webp') # 展示蜡笔眉+嘟嘟嘴plt.figure(figsize=(10,10))plt.imshow(img) plt.axis('off') plt.show()
登录后复制
登录后复制登录后复制登录后复制

五、一键执行~(上述为过程展示部分,可在此处一键寻找远方表弟哦)

run.py中引出了四个参数,分别是:

img_path 输入图片路径width 眉毛宽度res_img_path 输出图片路径fat_nums 嘟嘟脸系数
登录后复制

依照参数描述进行相应的修改即可,顺利运行下方命令并打印出done之后,可在左侧(/home/aistudio)目录下找到输出图片(默认:res.webp)

In [ ]
!python run.py --img_path example.webp --width 8 --res_img_path res.webp --fat_nums 3
登录后复制

来瞧瞧效果吧!(受害者不定期更新~)

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟 - 游乐网

(妈妈,妈妈,我跟PPDE大佬们同框了哈哈哈哈)

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:PaddleHub人脸关键点检测:一键生成蜡笔小新的远房表弟要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://www.php.cn/faq/1413476.html
python git 工具 ai igs github

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-06 09:08
江波龙SOCAMM2内存成功点亮专为云端AI突破带宽瓶颈

江波龙公司专为云端AI设计的高性能内存产品SOCAMM2已成功点亮。该产品采用创新的近CPU布局,旨在突破传统RDIMM内存的带宽瓶颈、延迟及散热难题。内部测试表明,其关键性能显著优于标准DDR5RDIMM。SOCAMM2主要面向HPC、AI服务器等高需求场景,行业认可度逐步提升,但目前尚未贡献实

AI热点2026-07-06 09:08
哈兰德生食牛内脏配生牛奶 特殊饮食习惯引热议

英超球星哈兰德在纪录片中公开其独特的饮食习惯,包括生吃牛心、牛肝等草饲牛内脏,并搭配饮用生牛奶,每日热量摄入高达6000大卡。他强调食材的安全性与高品质,认为这是天然的营养补充。从营养学角度看,动物内脏富含铁、维生素等,有助于运动员维持状态与恢复体能。这套饮食也与其在赛场上的惊人表现相关联,他进

AI热点2026-07-06 09:08
华硕首款RGB OLED显示器上市 360Hz高刷防烧屏

华硕首款RGBOLED显示器ROGSwiftOLEDPG34WCDN已在英国上市,售价约9965元人民币。该显示器采用35英寸OLED面板,拥有3440×1440分辨率、21:9超宽比及1800R曲率,刷新率高达360Hz,响应时间仅0 03毫秒。其搭载三星RGBV-Stripe排列技术,

AI热点2026-07-06 09:08
微信聊天多图合并展示三张以上自动折叠

微信近日上线聊天多图合并展示功能。当用户一次性发送三张或以上图片、视频时,可选择“发送后合并展示”选项。发送后,这些内容在聊天窗口中以折叠形式呈现,点击可展开查看全部,支持一键保存或直接转发。此功能旨在解决多图发送导致的界面刷屏问题,优化信息呈现的简洁度与浏览体验,适用于分享旅行照片、穿搭或表情包等

延伸阅读