利用机器学习完成动漫人脸识别与贴图
一、引言
这只是我随意做的一段小脚本而已,功能是检测动漫人物的人脸,并在指定位置替换上自己预备好的贴图。
机器学习的原理我几乎一窍不通,全程只是普通地调库,没什么特别的技术含量。
代码主要借助了 python Anime Face Detector
库(点击此处跳转)中动漫人脸识别的功能,这个库可以很方便地标记动漫人脸的特征点,之后手动将预设的贴图在指定位置贴上去就行了。
所有代码我都上传到我的 gitee 仓库了,需要的可以去下载:https://gitee.com/oldprincess/xiaoxile
二、代码
2.1 环境配置
我使用的是 python 3.7,首先需要安装库Anime Face Detector
这个库安装前需要下载许多依赖库,例如torch
,opencv-python
等等,所以可能会有些久(我使用清华的镜像源花了15分钟左右)
在代码运行时还需要对应的模型文件,它会自动下载,也可以手动去 github 上下载库Anime Face Detector
作者提供的模型文件(点击此处跳转),此处需要的文件只有mmdet_anime-face_yolov3.pth
和mmpose_anime-face_hrnetv2.pth
模型文件应放置在 <当前工作目录>\checkpoints\
目录下
2.2 需要import的库
torch
和pathlib
只是用于修改模型的默认路径,在默认情况下它会位于C:\User\<用户名>\.cache\torch\hub
处(在我的机器上是这个路径),此处将其修改为当前的工作目录
cv2
用于进行图像读取和处理,包括缩放、旋转等等,math
库用于根据特征点坐标计算旋转角度,而anime_face_detector
就是识别器
2.3 全局设定
第一行将 torch 的路径设置为当前的工作目录
接下来的 MOUTH_DOT
,LEFT_FACE
,RIGHT_FACE
是特征点的索引,分别是 4 个嘴部特征脸,左脸,右脸
之后的 detector
创建了一个识别器,因为我的电脑并没有配置 cuda
环境,所以 device
参数设置为 cpu
之后将事先准备好的 smile.png
读入
2.4 函数
此处是主要的处理函数 paste_smile
,即识别图片中的脸部,并在对应坐标贴图
使用一个 3 通道的 img
图片为输入,首先使用之前初始化的识别器产生识别结果 preds
,它包含多个面部的特征点信息,其中的 keypoints
就是特征点(坐标为浮点数)
对嘴巴的 4 个特征点,通过计算均值确定坐标;而对于脸部的特征点,直接采用对应的结果
接着,需要对读入的图片进行缩放与旋转处理。计算面部宽度face_width
,之后的图片宽度使用人物面部宽度一半
接着,对图片进行旋转。如果左右侧脸的高度不一致,那么就对贴图进行旋转,通过atan
函数计算出旋转角
最后,进行图片贴图。获取贴图透明通道的信息,将非透明部分贴到原图中
2.5 demo
此处将上述代码作为 xiaoxile
模块,使用时,只需要 import 并调用其 paste_smile
函数即可
__EOF__

本文链接:https://www.cnblogs.com/kentle/p/16208480.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏