调用腾讯智能云实现人脸融合

1. 作者介绍

杨煜星,女,西安工程大学电子信息学院,2023级研究生
研究方向:模式识别与人工智能
电子邮件:954154587@qq.com

黄浩磊,男,西安工程大学电子信息学院,2023级研究生,张宏伟人工智能课题组
研究方向:智能视觉检测与工业自动化技术
电子邮件:hhl57303@163.com

2. 人脸识别内容介绍

2.1 人脸识别简介

人脸融合技术是一种创新的图像处理方法,它能够将两个人或多个个体的面部特征合并,生成一张全新的、同时拥有这些个体面部特征的合成照片或视频。这项技术结合了计算机视觉、深度学习、图像处理等领域的前沿成果,不仅在娱乐产业中大放异彩,也在诸多其他领域展现出广泛的应用潜力。

2.2 技术原理

在这里插入图片描述

  1. 人脸检测与关键点定位:
    首先,系统需要识别并定位输入图像中的人脸。这通常通过人脸检测算法实现,它可以找出图像中所有的人脸区域。
    接着,关键点定位技术会精确地标记出每个人脸上的关键特征点,比如眼睛、鼻子、嘴巴的位置,有时还包括眉毛、下巴轮廓等。这些关键点对于后续的对齐和融合至关重要。
  2. 人脸对齐:
    为了使不同人脸的特征能够在空间上对应起来,需要对人脸图像进行对齐操作。这通常涉及到根据关键点的位置,对人脸进行旋转、缩放和平移,使得面部特征在空间上处于一致的位置。
  3. 特征提取:
    在对齐之后,系统会从每张人脸图像中提取特征向量,这些特征向量捕捉了人脸的独特信息,如面部结构、纹理等。这一过程可能涉及深度学习技术,如卷积神经网络(CNN),它们能够高效地从图像中提取高层次特征。
  4. 特征融合:
    这一步骤是人脸融合的核心。根据应用场景的需求,可以采取不同的融合策略。一种常见方法是按一定权重平均或插值两个人脸的特征向量,生成一个新的特征向量,代表融合后的面部特征。
  5. 人脸重建:
    利用生成的融合特征向量,系统通过逆向过程(如生成对抗网络GANs或其他重建算法)生成一个全新的面部图像。这个过程需要确保生成的面部看起来自然且逼真。
  6. 后处理:
    最后,可能需要进行一些后处理步骤,如色彩调整、光影处理等,以增强融合图像的真实感和整体协调性。

3. 实现流程及代码实现

3.1 实现流程

  1. 打开访问管理>>API密钥管理>>新建密钥,获得secret ID ,secret key
    在这里插入图片描述

  2. 腾讯云官网搜索人脸融合产品
    在这里插入图片描述

  3. 点击人脸融合进入操作界面,选择立即选购
    在这里插入图片描述

  4. 在人脸融合左侧选择栏选择活动管理,创建活动
    在这里插入图片描述

  5. 添加素材,注意选取图片要求,不可选用名人、明星照片,否则审核不通过
    在这里插入图片描述
    在这里插入图片描述

  6. 打开人脸融合>>产品文档>>图片人脸融合>>点击调试
    在这里插入图片描述

3.2 代码实现

3.2.1 图片为url格式

在发起点击调试后,选择大区,填相应的活动项目ID和素材ID,这些可以在控制台获取,再将url格式复制粘贴到上图所处位置。
在这里插入图片描述

之后点击发起调用,再点击右侧代码示例>>SDK>>python,复制代码到pycharm,点击运行。
在这里插入图片描述

3.2.2 图片为base64格式

首先要将本地图片转为base64格式,再粘贴到image所处位置,然后点击发起调用,再点击右侧代码示例>>SDK>>python,复制代码到pycharm,点击运行。
在这里插入图片描述

这里左侧为素材图,右侧是要融合的图片,中间是融合后的效果,如下图所示
在这里插入图片描述

3.3 完整代码

  1. url形式的图片,代码融合实现:
import json
import types
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.facefusion.v20220927 import facefusion_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 = "facefusion.tencentcloudapi.com"

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

    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.FuseFaceRequest()
    params = {
        "ProjectId": "-",
        "ModelId": "-",
        "RspImgType": "url",
        "MergeInfos": [
            {
                "Url": "http://www.talkimages.cn/images/medium/20133087/tkf003_973435.jpg"
            }
        ]
    }
    req.from_json_string(json.dumps(params))

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

except TencentCloudSDKException as err:
    print(err)
  1. 本地图片融合代码实现方式
    对本地图片进行融合,首先需要将图片转为base64编码格式,以下程序即可转化:

import base64
import os


def image_to_base64(image_path):
    """
    将图片文件转换为Base64编码字符串。
    """
    if not os.path.isfile(image_path):
        raise FileNotFoundError(f"The image file {image_path} does not exist.")

    with open(image_path, 'rb') as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return f"data:image/{os.path.splitext(image_path)[1][1:]};base64,{encoded_string}"


# 图片文件路径
image_path = r'C:\Users\ly\Desktop\人脸\9.jpg'

try:
    # 转换图片为Base64编码
    base64_string = image_to_base64(image_path)
    print("Base64 Encoded Image:")
    print(base64_string)
except FileNotFoundError as e:
    print(e)

运行后会产生一段base编码:在这里插入图片描述
将以上标蓝的复制粘贴到image那里,接着进行运行代码

import json
import types
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.facefusion.v20220927 import facefusion_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 = "facefusion.tencentcloudapi.com"

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

    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.FuseFaceRequest()
    params = {
        "ProjectId": "-",
        "ModelId": "-",
        "RspImgType": "url",
        "MergeInfos": [
            {
                "Image":”将产生的base编码复制到这里”
            }
        ]
    }
    req.from_json_string(json.dumps(params))

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

except TencentCloudSDKException as err:
    print(err)

3.4 问题分析

问题
在这里插入图片描述
解决:将本地图片转换成Base64格式
在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 22:00:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 22:00:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 22:00:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 22:00:01       20 阅读

热门阅读

  1. win10安装Python环境:深度探索与实用指南

    2024-06-12 22:00:01       10 阅读
  2. 2024-06-11 Unity Shader 开发入门5 —— CG 语法

    2024-06-12 22:00:01       7 阅读
  3. 《Vue3 基础知识》Pinia 01 之 基础

    2024-06-12 22:00:01       11 阅读
  4. Ansible——template模块

    2024-06-12 22:00:01       9 阅读
  5. 用户登录页面遭受攻击?这样处理!

    2024-06-12 22:00:01       7 阅读
  6. zookeeper、kakfa添加用户加密

    2024-06-12 22:00:01       8 阅读
  7. D. 素数筛选

    2024-06-12 22:00:01       4 阅读
  8. Vue中的diff算法总结

    2024-06-12 22:00:01       8 阅读
  9. VScode+YOLOv8+深度相机D435i实现物体追踪

    2024-06-12 22:00:01       7 阅读