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

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. 前往注册: [腾讯云账号注册](https://cloud.tencent.com/register) (详细指引见 [注册腾讯云](https://cloud.tencent.com/document/product/378/9603)) 2. 取得存储桶名称 **BucketName**: 请前往 [创建存储桶](https://cloud.tencent.com/document/product/460/10637) 3. 取得 **APPID**、**SecretId**、**SecretKey**:请前往 [云API密钥](https://console.cloud.tencent.com/cam/capi) ,点击“新建密钥” ## 快速体验 1. 修改文件 src/main/java/com/qcloud/image/demo/Demo.java 的 main() 方法,填入上述申请到的 **APPID**、**SecretId**、**SecretKey**、**BucketName** 2. 导入到 IDE:工程用 Maven 构建,以 Intellij IDEA 为例,导入方式为:Import Project -> 选择工程目录 -> Import project from external model -> Maven 3. 运行:Demo.java 右键,Run Demo.main() ## 使用简介 ### 初始化 ```java ImageClient imageClient = new ImageClient(APPID, SecretId, SecretKey); ``` ### 设置代理 根据实际网络环境,可能要设置代理,例如: ```java Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("127.0.0.1", 8080)); imageClient.setProxy(proxy); ``` ### 使用 SDK 提供功能如下: **图像识别**:鉴黄,标签 **文字识别(OCR)**:身份证,名片,通用,驾驶证行驶证,营业执照,银行卡,车牌号 **人脸识别**:人脸检测,五官定位,个体信息管理,人脸验证,人脸对比及人脸检索 **人脸核身**:照片核身(通过照片和身份证信息),获取唇语验证码(用于活体核身),活体核身(通过视频和照片),活体核身(通过视频和身份证信息) ```java // 调用车牌识别API示例 String imageUrl = "http://youtu.qq.com/app/img/experience/char_general/icon_ocr_license_3.jpg"; String result = imageClient.ocrPlate(new OcrPlateRequest("bucketName", imageUrl)); System.out.println(result); ``` 更多例子详情可参见 [Demo.java](https://github.com/tencentyun/image-java-sdk-v2.0/blob/master/src/main/java/com/qcloud/image/demo/Demo.java) 的代码。 ## 集成到你的项目中 ### 获得 SDK jar 文件 1. 直接使用 release/*-with-dependencies.jar 2. 自行编译:在工程根目录下执行命令 `mvn assembly:assembly`,编译结果见 target/*-with-dependencies.jar ### 导入 jar 文件 根据项目具体情况导入 *-with-dependencies.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值