百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

你的美颜,由无数程序猿亲手敲出的代码默默守护

myzbx 2025-02-08 12:03 38 浏览

出品:科普中国

制作:JOJO (神户大学系统信息学院)

监制:中国科学院计算机网络信息中心

前段时间某直播平台出现了大型"翻车"现场,一名为"乔碧萝殿下"的女主播在与另一名网红女主播互动的时候,由于连麦bug导致之前一直用来遮挡脸部的gif动画形象的图片消失不见,露出了大妈本尊面容。强烈的反差完全颠覆了网友的认知,大家看完对比照片纷纷吐槽:如今的美颜软件功能实在太强大了,直接能把58岁大妈p成18岁萝莉!

现在的美颜技术已不仅局限在磨皮、美白、袪痘等水平,手机应用商店里随随便便找到一款修图软件,都能一键开启秒变明星颜值的功能。除了修脸型、开眼角让你拥有改头换面的网红明星脸,还能让你的小短腿小肚腩瞬间变成超模长腿、小蛮腰。除此以外还有改眉形、涂眼影、抹口红、打高光等自动化妆功能,而且傻瓜式操作,完全不需要百万修图师的PS技能。

近几年随着人工智能算法逐渐实用化,结合人脸检测和人脸定位的AI技术,针对人脸不同部位进行定向优化,从而对唇彩、粉底、腮红、眼线,眼影、酒窝、卧蚕等实现自动美妆,静态图像甚至动态视频的美颜处理效果已经达到了以假乱真的程度。

美颜APP如何知道这是你的脸?

要实现逼真的高颜值美颜效果,首先软件要知道你的脸在哪,其中涉及的关键技术是人脸检测。人脸检测技术的任务在于识别出图片中的所有人脸,提取特征后输出人脸的大小和位置坐标。

人脸检测算法需要输入很多张图片,通过深度学习神经网络模型计算后可得到人脸框的坐标序列。即使图中出现的多张人脸、角度改变、部分遮挡等复杂情况,也可以处理,快速、准确地定位人脸。

△来源:
https://becominghuman.ai/face-detection-models-and-softwares-42b562a8e151

美颜APP是如何将口红精确的抹你唇上的?

美颜特效处理的实现主要还是依赖于人脸关键点定位的准确性。 通过人脸检测技术得到人脸框以后,将原图和人脸框输入人脸配准(Face Alignment)算法模型,输出人脸五官和轮廓关键点的坐标。最常见的特征,包括眼睛、瞳孔、眉毛、鼻子、嘴等位置。

△来源:
https://pytorch.org/tutorials/beginner/data_loading_tutorial.html

人脸关键点之间存在一定的位置关系,比如人有左右两只眼睛,眉毛在眼睛上面,鼻子在眼睛下方的中间位置,鼻子下面是嘴。即使图像发生旋转,从相对位置来说,眼睛鼻子嘴巴还是会保持这种固定的结构关系。否则,"人脸"可能就会随意变成下面这样子。

△毕加索抽象人脸画,来源:
http://www.apartexchange.com/Guide_paris3-picasso.htm

要描述这种位置结构上的关系,我们可以在计算机上用一串固定长度的数值来表征,这个数值串被称为"人脸特征(Face Features)"。人脸特征提取的过程需要输入原图以及五官轮廓关键点坐标,深度学习算法会根据人脸五官关键点坐标将人脸对齐预定模式后计算,输出人脸相应的一个特征数值串。

对于视频,虽然可以看成逐帧的静态图像处理问题,还是要考虑关键点的跟踪问题,以保证图片帧之间关键点的连续性。要在真实环境拍摄下的视频里针对任意光照、各种夸张的表情以及各种角度的侧脸,准确定位和跟踪人脸关键点的位置,仍然是一个具有挑战性的问题。

美颜是怎样做到让皮肤变好的?

准确定位这些关键点之后,以这些关键点组成一个网格,对这个网格按照固定的参数进行局部形变,就可以形成瘦脸、大眼等特效算法。

在所有特效处理中,美白磨皮算是唯一不能缺少的环节,毕竟"一白遮百丑、长痘毁所有"。美白算法的目标是把肤色区域变得更加的透亮。这部分的算法可谓层出不穷,基本思路都是如何调整图片的亮度问题。磨皮的算法就更多了,包括使用高斯模糊,双边滤波等。具体选择哪种算法,并且需要结合哪些细节增强的后处理技术,以达到更好的磨皮效果,也是非常复杂并且需要大量投入的。

人脸检测技术除了美颜,还大有用处

人脸检测/识别技术除了在前述美颜应用软件上造福广大爱美人士以外,还被广泛应用在日常生活中的许多方面,给人们带来更多高质量生活的科技解决途径。

这里我们需要了解一下"相似度"的概念。前面提取出来的人脸特征数值串可以用来表征人脸特征,输入两组不同人脸图片的特征值,通过某些规则定义的算法公式可以得到两个特征之间的相似度。

比如下面两张图计算后得出相似度97.82%的结论,嗯,相似度蛮高的嘛,非常满意!(因为就是我老婆本人呀~呵呵。)

△"老婆"照片,来源:
https://www.hmv.co.jp/goods/genre_グッズ_2019年カレンダー_女性タレント?アイドル_4_920_930_930001/

在人脸对比的基础上再设定一个阈值,就可以实现人脸验证功能了。举个例子,预先设定好阈值为80%,那么当相似度大于80%就会输出"同一个人"的判断。

既然人工智能已经会判断出是不是同一个人了,那么基于这个原理,它就能帮助人类实现更多复杂应用了。

比如,现在许多手机已经具备的人脸解锁功能。这项实用的功能用到的技术被称为"人脸验证",手机等终端设备只需将用户事先注册登记的照片与现场临时采集的照片做对比,判断是否为同一人,就能完成身份验证。

人脸验证做的是1:1比对,其身份验证模式本质上是计算机对当前人脸与人像数据库进行快速人脸比对,并得出是否匹配的过程。比如在高速公路、机场安检时,受检人员手持身份证等证件,通过检查通道,同时对受检人员的外貌及身份证信息进行识别,这个过程就是典型的1:1模式。

与1:1比对的人脸验证不同,1:N(一对多)查找比对的人脸识别(Face Recognition)技术则被广泛应用在小区门禁、会场签到以及新零售概念里的客户识别等现实场景中。它的基本思路是输入一个人脸特征后,通过与人像数据库中的海量数据做比对匹配,找到与当前人脸数据相符合的图像(即特征相似度最大的图像),返回该图像对应的身份。

此外,人脸识别的1:N模式能实现通过对动态视频流的截取来获得人脸数据并进一步比对的动态对比过程,而且在识别的过程中识别对象无需到特定的位置便能完成人脸识别的工作,非常高效。

人脸检索(Face Retrieval)采用的也是1:N模式,基本原理与人脸识别类似,也是将一个人脸特征与人像数据库中的N个数据进行比对匹配,只不过返回的不是相似度最高的那个,而是根据相似度从高到低排序的人脸序列的结果。在现实生活中,警察叔叔使用先进的人脸检索技术可以更快速地锁定嫌疑犯,加快案件侦破进度。

P美有什么难的,凭空生成一张脸都能实现

下面的两张图片,一个是真人照片,另一个是AI合成,你能选出哪张是合成图像吗?

答案揭晓,左边的是生成的,右边的是真实的。是不是感觉非常不可思议,左边这位看上去很漂亮的美女,居然根本就不存在!A"凭空捏造"出一个完全不存在的"人"。

这里用到的是被称为生成对抗网络GAN的人工智能算法,经过训练以后它能无中生有。它的基本原理可以通俗地用一个故事来解释:有一个假货制造商和一个鉴赏专家。故事的一开始,假货商和鉴赏专家都是菜鸟级别,一个生产出来的假货非常垃圾一眼就能被看穿,另一个鉴赏能力为零全靠瞎猜。但是这两个人通过不断地训练,假货商每次造一个假货就拿去给鉴赏专家鉴赏,鉴赏专家做出评价以后再偷看一眼标准答案。就这样经过足够多次数的"不懈努力",假货商造出来的假货已经非常逼真了,而鉴赏专家的鉴赏能力也不断提升,一直到最后鉴赏专家达到真正专家水平。此时假货商就能造出以假乱真的假货了。

这个故事中的两个"主人公",假货商和鉴赏专家,分别是GAN算法的生成器和判别器。它们一个负责生成图像,一个负责判断该图像是否符合标准,就像故事里提到的那样经过不断训练,直到最后生成器可以生成以假乱真的图像为止。

除了最基本的GAN模型,目前为止,已经有许多不同的变形算法被开发了出来,比如下面这个例子,输入人类表情以后,可以生成同表情的喵星人,是不是很酷的感觉。以后让喵主人跟自己做同款表情包也是指日可待了。

相关推荐

零基础入门AI智能体:详细了解什么是变量类型、JSON结构、Markdown格式

当品牌跳出固有框架,以跨界联动、场景创新叩击年轻群体的兴趣点,一场关于如何在迭代中保持鲜活的探索正在展开,既藏着破圈的巧思,也映照着与新一代对话的密码。在创建AI智能体时,我们会调用插件或大模型,而在...

C# 13模式匹配:递归模式与属性模式在真实代码中的性能影响分析

C#13对模式匹配的增强让复杂数据处理代码更简洁,但递归模式与属性模式的性能差异一直是开发者关注的焦点。在实际项目中,选择合适的模式不仅影响代码可读性,还可能导致执行效率的显著差异。本文结合真实测试...

零基础快速入门 VBA 系列 6 —— 常用对象(工作簿、工作表和区域)

上一节,我介绍了VBA内置函数以及如何自动打字和自动保存文件。这一节,我们来了解一下Excel常用对象。Excel常用对象Excel有很多对象,其中最常用也最重要的包括以下3个:1.Workbo...

不同生命数字的生肖龙!准到雷普!

属龙的人总在自信爆棚和自讨苦吃之间反复横跳?看完这届龙宝宝的日常我悟了。属龙的人好像天生自带矛盾体:领导力超强可人缘时好时坏,工作雷厉风行却总在爱情里翻车。关键年份的龙性格差异更大——76年龙靠谱但不...

仓颉编程语言基础-面向对象编程-属性(Properties)

属性是仓颉颉中一种强大的机制,它允许你封装对类(或接口interface、结构体struct、枚举enum、扩展extend)内部状态的访问。它看起来像一个普通的成员变量(字段),但在其背后,它通过...

Python中class对象/属性/方法/继承/多态/魔法方法详解

一、基础入门:认识类和对象1.类和对象的概念在Python中,类(class)是一种抽象的概念,用于定义对象的属性和行为,而对象(也称为实例)则是类的具体表现。比如,“汽车”可以是一个类,它有...

VBA基础入门:搞清楚对象、属性和方法就成功了一半

如果你刚接触VBA(VisualBasicforApplications),可能会被“对象”“属性”“方法”这些术语搞得一头雾水。但事实上,这三个概念是VBA编程的基石。只要理解它们之间的关系,...

P.O类型文推荐|年度编推合集(一百九十五篇)

点击左上方关注获取更多精彩推文目录2019年度编推35篇(1V1)《悖论》作者:流苏.txt(1V1)《桂花蒸》作者:大姑娘浪.txt(1V1)《豪门浪女》作者:奚行.txt...

Python参数传递内存大揭秘:可变对象 vs 不可变对象

90%的Python程序员不知道,函数参数传递中可变对象的修改竟会导致意想不到的副作用!一、参数传递的本质:对象引用传递在Python中,所有参数传递都是对象引用的传递。这意味着函数调用时传递的不是对...

JS 开发者必看!TC39 2025 最新动向,这些新语法要火?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。TC39第...

2025 年值得尝试的 5 个被低估的 JavaScript 库

这些JavaScript库可能不会在社交媒体或HackerNews上流行起来,但它们会显著提高您的工作效率和代码质量。JavaScript不再只是框架。虽然React、Vue和Sv...

Python自动化办公应用学习笔记30—函数的参数

一、函数的参数1.形参:o定义:在函数定义时,声明在函数名后面括号中的变量。o作用:它们是函数内部的占位符变量,用于接收函数被调用时传入的实际值。o生命周期:在函数被调用时创建,在函数执...

16种MBTI人格全解析|测完我沉默了三秒:原来我是这样的人?

MBTI性格测试火了这么久,你还不知道自己是哪一型?有人拿它当社交话题,有人拿它分析老板性格,还有人干脆当成择偶参考表。不废话,今天我一次性给你整理全部16种MBTI人格类型!看完你不仅能知道自己是谁...

JS基础与高级应用: 性能优化

在现代Web开发中,性能优化已成为前端工程师必须掌握的核心技能之一。本文从URL输入到页面加载完成的全过程出发,深入分析了HTTP协议的演进、域名解析、代码层面性能优化以及编译与渲染的最佳实践。通过节...

爱思创CSP-J/S初赛模拟赛线上开赛!助力冲入2024年CSP-J/S复赛!

CSP-J/S组初赛模拟赛爱思创,专注信奥教育19年,2022年CSP-J/S组赛事指定考点,特邀NOIP教练,开启全真实CSP-J/S组线上初赛模拟大赛!一、比赛对象:2024年备考CSP-J/S初...