换发型算法_GitHub - fredliu168/yry: yry(颜如玉)—— 一个实现人脸融合的算法,可以接近腾讯天天P图疯狂变脸功能的效果...

颜如玉

颜如玉 —— python 人脸融合程序,可实现类似天天P图疯狂换脸、face++人脸融合效果

项目描述

最近随着各种技术的发展,图像方面的人脸处理技术越来越广泛。各大相机软件都有美颜、贴图、换发型、变脸等功能。天天P图与Face++也都推出人脸处理的 API,不过价格方面就有点不亲民了。于是本人将之前研究完成的人脸融合算法开源出来。

效果对比

国际惯例,我们看看颜如玉与天天P图、Face++合成效果的对比:

注:Face++ 为调用其官网 API 生成的效果,天天P图则是直接使用该 APP 生成的效果

使用

安装 requirements.txt 所需库

pip install -r requirements.txt

运行 ModuleTest.py 的主函数

python ModuleTest.py

生成的结果图片 output.jpg 储存在 images 文件中

算法详解

零、融合函数

先看看程序入口函数

core.face_merge(src_img='images/model.jpg',

dst_img='images/20171030175254.jpg',

out_img='images/output.jpg',

face_area=[50, 30, 500, 485],

alpha=0.75,

blur_size=(15, 10),

mat_multiple=0.95)

参数含义:

src_img —— 模特图片

dst_img —— 待融合的图片

out_img —— 结果图片输出路径

face_area —— 指定模板图中进行人脸融合的人脸框位置。四个正整数数组,依次代表人脸框左上角纵坐标(top),左上角横坐标(left),人脸框宽度(width),人脸框高度(height),通过设定改参数可以减少结果的大范围变形,把变形风险控制在人脸框区域

alpha —— 融合比例,范围 [0,1]。数字越大融合结果包含越多融合图 (dst_img) 特征。

blur_size—— 模糊核大小,用于模糊人脸融合边缘,减少融合后的违和感

mat_multiple —— 缩放获取到的人脸心型区域

一、 检测及关键的定位

人脸的检测以及关键点定位有多种实现方案

使用开源 Dlib 库检测及定位(定位68个关键点)

使用腾讯平台的人脸识别及定位API (定位90个关键点)

使用Face++平台的人脸识别定位API(定位106个关键点)

本文采用的是Face++的 api,因为商用情况下 Face++ 定位的定数最多

// 获取两张图片的人脸关键点(矩阵格式与数组格式)

src_matrix, src_points, err = core.face_points(src_img)

dst_matrix, dst_points, err = core.face_points(dst_img)

二、对齐人脸角度

在待融合图人像不是侧脸的情况下,我们可以同过调整平面位置及角度让其与模特图的人脸重合

// opencv 读取图片

src_img = cv2.imread(src_img, cv2.IMREAD_COLOR)

dst_img = cv2.imread(dst_img, cv2.IMREAD_COLOR)

dst_img = transformation_points(src_img=src_img, src_points=src_matrix[core.FACE_POINTS],

dst_img=dst_img, dst_points=dst_matrix[core.FACE_POINTS])

注:src_points 已经 dst_points 传入参数为第一步获取的人脸关键点矩阵

对齐采用“常规 Procrustes 分析法”

具体算法来源:matthewearl 个人博客步骤2

对齐结果:

三、再次取点后融合脸部

对步骤二转换后的带融合图片再次取关键的,然后与模特图的关键点一起做三角融合成新的图片

dst_img = morph_img(src_img, src_points, dst_img, dst_points, alpha)

融合结果:

具体的三角融合算法解说参考这篇文章

四、处理加工模特图片

再次对上一步的结果图进行取点,然后运用三角仿射将模特图片脸部轮廓、关键点变形成上一步得到的脸部关键点

src_img = tran_src(src_img, src_points, dst_points, face_area)

处理结果:

五、将融合后的脸部贴到模特图上

最后一步是将融合后的新图片脸部区域用泊松融合算法贴到模特图上。泊松融合可直接使用opencv提供的函数

dst_img = merge_img(src_img, dst_img, dst_matrix, dst_points, k_size, mat_multiple)

def merge_img(src_img, dst_img, dst_matrix, dst_points, k_size=None, mat_multiple=None):

face_mask = np.zeros(src_img.shape, dtype=src_img.dtype)

for group in core.OVERLAY_POINTS:

cv2.fillConvexPoly(face_mask, cv2.convexHull(dst_matrix[group]), (255, 255, 255))

r = cv2.boundingRect(np.float32([dst_points[:core.FACE_END]]))

center = (r[0] + int(r[2] / 2), r[1] + int(r[3] / 2))

if mat_multiple:

mat = cv2.getRotationMatrix2D(center, 0, mat_multiple)

face_mask = cv2.warpAffine(face_mask, mat, (face_mask.shape[1], face_mask.shape[0]))

if k_size:

face_mask = cv2.blur(face_mask, k_size, center)

return cv2.seamlessClone(np.uint8(dst_img), src_img, face_mask, center, cv2.NORMAL_CLONE)

函数示意图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机c语言 外部中断,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼* 名称:外部中断* 日期:2013-9-10* 晶振:11.0592MHZ******************************************************************/#include //包含头文件,对IO进行定义,可以选中后右击&…

电脑生成siri语音_Siri for Mac:苹果电脑也有语音助手

今天,美国专利和商标局公布了苹果的一项长达92页的专利申请,描述了一种功能和复杂程度远远超过目前 Mac 听写功能的技术,这些功能介绍可以被简单的总结成 Siri for Mac。这项专利被称为“桌面环境下的智能数字助理”。苹果 Siri 在2011年登陆…

c语言 手动实现sizeof,sizeof究竟是怎样实现的?

sizeof,是在编译的时候,查找符号表,判断类型,然后根据基础类型来取值的,如果是struct则是看类型声明符号表来判定,如果字符串则是通过常量表来判断,具体可以参考编译原理的符号表管理章节&#…

python bytes转换为string_Python3 中 bytes 和 string 之间的互相转换

Table of ContentsPython3 最重要的新特性大概要算是对文本(text)和二进制数据(binary data)作了更为清晰的区分。文本总是 Unicode,由 str 类型表示。二进制数据则由 bytes 类型表示。那么什么是 bytes、什么是 Unicode 呢?首先计算机能存储的唯一东西就…

c语言中如何打出草花图案,C语言程序设计程设计题目1.doc

C语言程序设计程设计题目1通信工程10级C语言课程设计任务书各位同学可以自由组合,不超过以下题目中所规定的人数进行选题(不允许重复选题)。辅导时间:另定地点:软件中心(语音楼8楼)答辩检查时间:18周星期五上午8:00起1…

android 字体像素转换工具类_android工具类,转换大小写,保留小数点处理方法

import java.text.DecimalFormat;import java.util.Scanner;/*** 金额转换** author Administrator*/public class ConvertMoney {// 大写数字private final static String[] STR_NUMBER {"零", "壹", "贰", "叁", "肆", &…

android 百度地图开发 怎么减小包的大小,最新的百度地图Android开发包中,如何隐藏右下角的放大缩小控件...

2016-02-24 回答// 隐藏缩放控件int childcount mmapview.getchildcount();view zoom null;for (int i 0; i < childcount; i) {view child mmapview.getchildat(i);if (child instanceof zoomcontrols) {zoom child;break;}}zoom.setvisibility(view.gone);// 隐藏比例…

python换源还是不行_浅析Python3 pip换源问题

pip安装源背景#在实际开发中, 可能要大量使用第三方模块(包), 更换至国内下载源, 可大幅提升下载速度"""1、采用国内源&#xff0c;加速下载模块的速度2、常用pip源&#xff1a;-- 豆瓣&#xff1a;https://pypi.douban.com/simple-- 阿里&#xff1a;https://m…

vs2017 cmake android,CMake构建VS2017工程

1 安装VS2017/cmake2 工程开发3 生成VS2017工程4 参考资料1 安装VS2017/cmake软件安装&#xff1a;Visual Studio官网下载Visual Studio Community 2017,该版本是适用于学生、开源和个人开发人员的功能完备的免费IDE。Visual Studio Community 2017还可以免费安装Incredibuild&…

发明导诊机器人团队_潮阳这个医院来了一位智能导诊机器人!

(原标题&#xff1a;大峰医院来了一位智能导诊机器人&#xff0c;镇街卫生院服务配套更完善&#xff0c;我区就医环境变化这么大……)区卫健系统各医疗单位严格按照全国文明城市实地考察场所创建标准&#xff0c;对标对表落实各项措施及制度&#xff0c;就医环境和医疗服务水平…

android是语言吗,android – 内容描述应该是多种语言吗?

你的第一个问题没有完美的答案.但是,由于您正在开发多语言应用程序,我建议您为您关心的语言进行翻译.它可能取决于您的应用程序的目标用户.例如,如果您的目标用户是韩语,那么如果您可以为他们翻译会更好,不是吗&#xff1f;对于第二个问题,如果您的用户使用您未提供的语言,它将…

android按钮变输入框动画,AnimShopButton 仿饿了么加入购物车旋转控件 - 自带闪转腾挪动画 的按钮。自带海量可定制 UI 属性。在 Re @codeKK Android开源站...

A shopping cart button with a telescopic displacement rotation animation ...一个仿饿了么 带伸缩位移旋转动画的购物车按钮注意&#xff0c;本控件非继承自ViewGroup,而是纯自定义 View&#xff0c;实现的仿饿了么加入购物车控件&#xff0c;自带闪转腾挪动画的按钮。图 1…

表格外粗内细怎么设置_金游艇复刻机芯-N厂灰游艇价格 | 复刻表评测

GM厂劳力游艇名仕型系列&#xff0c;官方2019年度机芯搭配全线更新为cal. 3235机芯&#xff0c;同时&#xff0c;在表盘六点位上有劳力皇冠的防伪LOGO。GM厂经历一年&#xff0c;在3135的基础上开发一体出3235机芯&#xff0c;功能与结构等完美还原于正品机芯。而且&#xff0c…

html中输出语句怎么写,javascript怎么输出?

JavaScript怎么输出&#xff1f;输出方式有哪些&#xff1f;下面本篇文章就给大家介绍JavaScript的几种输出方式&#xff0c;希望对大家有所帮助。方法1&#xff1a;使用window.alert()进行输出window.alert()方法用于显示带有一条指定消息和一个【确认】 按钮的警告框。代码示…

cron每2天跑一次_直购直测,进口新极光每2年或34000公里才需要保养一次?

我们选择以第 2 代揽胜极光P200 R-Dynamic S 车型&#xff0c;作为执行 [ 直购直测 ] 单元的第 12 辆车款&#xff0c;而在先前包含购车篇说明选择原因、油耗测试篇带大家一探具备轻油电技术的极光 P200 R-Dynamic S 油耗表现后&#xff0c;本次则是要带大家看看揽胜极光回厂定…

html5的高级选择器,web@css高级选择器(after,befor用法),基本css样式

1.高阶选择器:子代后代&#xff0c;相邻通用兄弟&#xff0c;交集并集&#xff0c;属性&#xff0c;伪类&#xff0c;伪元素子代后代选择器div>p{} div p{}相邻通用兄弟divp{} div~p{}理解&#xff1a;div同学的同桌p div同学的【同学(有p的)】交集并集选择器div,p di…

rrt算法流程图_RRT算法移动机器人路径规划(快速扩展随机树).pdf

( )第 34 卷 第 5期 南京理工大学学报 自然科学版 Vo l. 34 No. 520 10年 10 月 Journal of N anj ing Un iversity of Science and Techno logy (N atu ral Science) O ct. 20 10基于模糊滚动 RRT算法的移动机器人路径规划康  亮 ,赵春霞 ,郭剑辉(南京理工大学 计算机科学与技…

yui3 html属性,YUI Rich Editor + invalidHTML + style

问题I am trying to insert an inline style tag into the editor content. When I call saveHTML it strips out the style block when Im in rich editor view. I have tried changing the style property of invalidHTML to false, but it still seems to strip the style b…

hhkb mac设置_把 HHKB 放在 MacBook 上使用的解决方案

我现在用的是一台 15 寸带 Touch Bar 的 MacBook Pro &#x1f9d1;&#x1f3fb;‍&#x1f4bb;。我一直是把 HHKB 键盘架在 MacBook 键盘 ⌨️ 上面使用的&#xff0c;就像下面这样。HHKB 放在 MacBook 上尺寸刚刚好&#xff0c;缺点就是挡住了 Touch Bar&#xff0c;不过对…

五年一贯制专转本计算机网络真题,金陵科技学院2017年五年一贯制专转本考试大纲(计算机网络基础)...

一、参考书目&#xff1a;《计算机网络技术与应用(第2版)》&#xff0c;段标、张玲主编&#xff0c;电子工业出版社&#xff0c;出版时间&#xff1a;2011年12月。二、考试形式&#xff1a;闭卷&#xff0c;考试时间90分钟三、考试内容和要求(一)考试要求1.计算机网络理论知识●…