调用腾讯API实现人脸美颜

news2025/2/25 18:15:22

目录

  • 1. 作者介绍
  • 2. 人脸美颜基本原理
    • 2.1 获取人脸关键点信息
    • 2.2 基于皮肤区域的祛斑算法
    • 2.3 脸部器官美型处理
    • 2.4 美妆处理
  • 3. 实验流程(附代码)及结果
    • 3.1 调用腾讯API流程
    • 3.2 安装依赖库
    • 3.3 代码实现
    • 3.4 实现结果
  • 常见问题报错以及解决方案

1. 作者介绍

齐方涛,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器视觉与人工智能
电子邮件:502856671@qq.com

路治东,男,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:2063079527@qq.com

2. 人脸美颜基本原理

美颜的目的就是要让人看起来更美,包括:皮肤细腻、白皙、光滑、脸部各个器官及脸型可以进行细致的调整,通过美妆调节可以达到快速上妆的效果。人脸美颜效果,从技术上主要通过四个关键步骤实现。

2.1 获取人脸关键点信息

美颜处理依赖于人脸关键点信息,基于这些关键点,可以精确的知道脸部各个器官的位置信息,从而进行美化处理。人脸关键点基本信息主要包括眉毛、眼睛、嘴巴、脸部外轮廓等关键点。
基于检测的关键点对脸部关键点进行稠密化处理,插入额外的关键点,如额头区域和脸部外围限制区域,使其能够覆盖整个脸部区域。
基于稠密化的人脸关键点,对其构建整张脸的三角网格,实现对整个脸部区域的三角剖分(Delaunay Triangulation),将人脸切分成多个无重叠的三角区域,从而实现对脸部各器官的各种美化处理。
皮肤美化处理主要包括磨皮和美白。磨皮需要把脸部皮肤区域处理的细腻、光滑。美白需要将皮肤区域处理的白皙、红润。

2.2 基于皮肤区域的祛斑算法

使用Sobel粗略提取斑点信息是通过连通区域判断得到最终斑点区域,结合高斯滤波+泊松融合来实现祛斑效果。
基于皮肤区域的磨皮算法是通过高反磨皮或双曲线磨皮算法对人像磨皮,结合皮肤区域得到精确磨皮效果。
基于皮肤区域的美白调色算法是通过PS中的曲线调节来得到美白调色的LUT,结合肤色区域进行融合得到调色结果。

2.3 脸部器官美型处理

脸部美型处理主要包括脸型调整和脸部器官调整,基于人脸关键点通过图像形变的形式来实现脸部各个器官的形状调整。图像形变算法主要是局部扭曲算法和三角剖分。
局部扭曲算法,一般包括局部缩放、局部平移、局部旋转等。如大眼功能可以通过局部缩放来实现。
三角剖分的方法是通过对三角网顶点进行平移,再将平移后的顶点更新到对应的纹理坐标,从而实现整个关联三角网的变形。

2.4 美妆处理

美妆效果的好坏强依赖于素材模板精准的标定数据和准确的人脸灌浆点数据,具体流程如下:
1.妆容素材的管理及解析
结合各种妆容及贴纸素材,构建一套完整的绘制机制,根据对妆容效果描述文件的解析,结合顶点绘制规则对各个类型的素材进行绘制处理及融合。
素材模板和当前人脸器官进行对齐。
素材的描述文件中有相应的标定信息,结合当前图像的人脸关键点,采用三角剖分的方式实现对素材模板的变形,达到与当前人脸器官对齐的目的。
2.不同器官的定制化处理
由于不同器官的处理流程不一样,需要针对不同的器官采用不同的处理方式。如美齿需要结合牙齿区域的mask模板,通过美齿颜色查找表实现牙齿区域颜色的调整;眉毛的处理则需要先将当前图像的眉毛结合当前眉毛模板的素材进行眉毛区域的形变调整,同时将当前图像的眉毛部分进行减弱,再和对齐后的眉毛模板进行融合。
3.图像融合
由于素材模板和脸部器官的差异性,需要采取不同的融合方式来实现图层的融合处理,如腮红可以直接基于素材的半透明通道进行融合,修容处理则需要采用高反差算法进行融合处理。

3. 实验流程(附代码)及结果

3.1 调用腾讯API流程

1.进入腾讯云官网搜索人脸美颜之后点击产品文档
在这里插入图片描述
在这里插入图片描述
2.点击人脸美颜之后点击调试按钮
在这里插入图片描述
3.配置参数并查看代码
在这里插入图片描述
4.获取密钥
在这里插入图片描述

3.2 安装依赖库

Pip install tencentcloud-sdk-python -i https://pypi.tuna.tsinghua.edu.cn/simple

3.3 代码实现

import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.fmu.v20191213 import fmu_client, models
try:
    # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
    # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
    # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
    cred = credential.Credential("SecretId", "SecretKey")#自己的密钥
    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "fmu.tencentcloudapi.com"

    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = fmu_client.FmuClient(cred, "ap-beijing", clientProfile)

    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.BeautifyPicRequest()
    params = {
        "Url": "这里输入图片的Url地址",
        "Whitening": 80,
        "Smoothing": 80,
        "FaceLifting": 80,
        "EyeEnlarging": 80,
        "RspImgType": "url" #本文选用Url格式,这里输入url
    }
    req.from_json_string(json.dumps(params))

    # 返回的resp是一个BeautifyPicResponse的实例,与请求对象对应
    resp = client.BeautifyPic(req)
    # 输出json格式的字符串回包
    print(resp.to_json_string())

except TencentCloudSDKException as err:
    print(err)

3.4 实现结果

在这里插入图片描述
运行效果如图:(左图为原图,右图为美颜后效果图)

常见问题报错以及解决方案

1.缺少相应的安装包或者安装失败
在这里插入图片描述
解决方案:报错 版本不匹配 出现这个问题先检查清华源 然后软件包名字不对 通过CSDN查阅或者腾讯云文档 应改为pip install tencentcloud-sdk-python –i https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述
2.参数不合法
在这里插入图片描述
解决方案:出现该错误是因为参数没有选择正确,文中几个参数 “Whitening”,“Smoothing”,“FaceLifting”,"EyeEnlarging"都是美颜参数,选择范围是[0,100],而"RspImgType"是返回图像方式(base64 或 url ) ,二选一。url有效期为1天。我在这里选择了url,故结果输出url图片地址,点击进去就可以参看结果。
在这里插入图片描述

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

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

相关文章

【备战秋招】JAVA集合

集合 前言 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要 对对象进行存储。 另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多…

Towards Blockchain-Based Reputation-Aware Federated Learning

Towards Blockchain-Based Reputation-Aware Federated Learning FINE-GRAINED FEDERATED LEARNINGA. Problem StatementB. DefinitionC. Requirements BLOCKCHAIN-BASED REPUTATION-AWARE FL 论文地址:https://www.researchgate.net/profile/Muhammad-Habib-Ur-Reh…

ChatGPT中文版写日报神器【AI使用技巧】

写日报对于打工人来说是一件枯燥无味又不得不做的工作。有了ChatGPT写日报不再是一件苦差事,分分钟搞掂,你不来试一下吗? ChatGPT中文站https://ai-cn.co提问:我是一名服务端程序员,负责维护商城系统,帮我…

HTTPS安全连接的建立过程

HTTP (Hypertext Transfer Protocol) 和 HTTPS (Hypertext Transfer Protocol Secure) 都是用于在 Web 浏览器和服务器之间传输数据的协议。它们之间的主要区别在于安全性。 HTTP 是一种不安全的协议,因为它在传输过程中不对数据进行加密。这意味着如果有人截取了数…

【立体视觉(二)】之对极几何与关键矩阵

【立体视觉(二)】之对极几何与关键矩阵 一、对极几何二、关键矩阵一)本质矩阵与基础矩阵二)本质矩阵的求解三)本质矩阵的分解三)单应矩阵及其求解 此为个人学习笔记,在各处借鉴了不少好图好文&a…

Ubuntu18.04利用astra pro相机实现ORB—SLAM3实时点云稠密建图—上

Ubuntu18.04利用astra pro相机实现ORB—SLAM3实时点云稠密建图—上 前言前期准备—ROS完整安装 OpenCV的安装(4.2.0)安装依赖C11特性的编译器Pangolin测试pangolin程序 EigenboostORB-SLAM3 前言 建议编译ORB-SLAM3的硬件设备内存配置至少4GB以上&#…

LinuxSCP和SSH命令

scp命令 cp命令,是拷贝的作用,可以实现将文件或者目录拷贝到另外一个位置。 scp命令,也是拷贝的作用,但是是远程拷贝,可以实现将文件或者目录拷贝到另外的一台机器上。 命令格式 # scp file 远程用户名远程服务器:目标…

Midjourney竞品Leap免费试用; Google 刚刚发布10门独立AI课程

🦉 AI新闻 🚀 Midjourney竞品,免费试玩AI图片生成工具Leap,细节还需提升 摘要:Leap是一款免费试玩的AI图片生成工具,用户可以选择不同的生成模型和步长及数量。功能上尚需提高细节把握能力,但…

【genius_platform软件平台开发】第九十七讲:linux设备驱动中信号(signal函数)的异步通知机制

1. 信号的异步通知 意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在…

创新升级!深度学习算法注入机器视觉应用,助力工业领域智慧生产

随着人工智能在算力、算法、大数据等方面的技术突破,基于神经网络的深度学习算法在各行各业加速渗透。而制造业作为AI融合创新的主要场景之一,在机器视觉技术的加持下,持续赋能生产线的自动化、智能化升级,赋予工业生产“感知”能…

【Java se】为什么大部分小数在计算机中是不精确的

目录 一、什么是小数 二、浮点数在计算机中的转换规则 (1)整数部分转换步骤 (2) 小数部分转换步骤 三、使用代码说明 四、手动转换小数 一、什么是小数 在计算机中,也称小数为浮点数,因为在使用科学计…

程序员的炫技代码写法

程序员的炫技代码写法 程序员,这个职业总是让人感到神秘而又充满魅力。他们手中的代码常常充满了令人惊叹的炫技操作,让人不禁感叹他们的技术能力之高。在这篇博客中,我想和大家分享一些我所知道的程序员的炫技代码写法。 一、代码美感——…

什么是死锁?互斥锁进入死锁怎么解决?

1.死锁是什么? (1)死锁是一组相互竞争资源的线程因为他们之间得到互相等待导致“永久“阻塞的现象; (你等我 我等你 你不放我也不放 就导致“永久“阻塞的现象) (2)死锁是指两个或…

mysql索引possible_keys,key问题。

explain中有两个字段possible_keys,key。 possible_keys:表示可能用到的索引。 key:实际使用到的索引。 为什么会有单独的两列? 你的where条件中如果使用到了索引列字段,那么possible_keys会列出索引字段对应的索引…

【区块链】科普:零知识证明、ZKRollup 与 zkEVM

译者语:2023 年将迎来 zkEVM 大发展,让我们看看有哪些项目在进行 zkEVM 的研究,zkEVM 可以做什么 原文链接: https://blog.pontem.network/zk-proofs-301-zksync-other-zkevm-b28641dc8565这篇文章让我们解释一下zkEVM是如何工作的,为什么它们是如此重要的创新。 长话短说…

基于html+css的图展示113

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

云下自建Grafana获取阿里云监控数据

前言 官方文档,我看了要付费的 https://help.aliyun.com/document_detail/313316.html?spma2c4g.217924.0.i2 grafana:8.3.5 插件名称:aliyun-cms-services grafana安装: https://blog.csdn.net/qq_44379042/article/details/121852310 …

Activiti 工作流 学习笔记

环境信息: IntelliJ IDEA 2021.3.3 (Ultimate Edition) JDK 1.8 Activiti 7 文章目录 Activiti 7一、了解工作流1.1 什么是工作流1.2 工作流引擎1.3 常见的工作流引擎1.4 Activiti 概述1.4.1 Activiti介绍1.4.2 建模语言BPMN1.4.3 Activiti使用流程1.4.4 流程设计工具1.4.5 下载…

全排列II

1题目 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] 输出:[[1,2,3],…

OpenGauss MOT 实现技术研究

目录 一、概述 二、技术细节和OpenGauss中的实现 1、内存表在内存中的组织 2、事务并发控制算法 3、检查点算法 这篇文档写于2022年6月份,今天打算发到网上,重读时发现可能opengauss mot现在的代码已经有所改变,文中有些代码分支可能已经…