目录
- 1. 作者介绍
- 2. 人脸识别内容介绍
- 2.1 人脸识别简介
- 2.2 技术原理
- 3. 实现流程及代码实现
- 3.1 实现流程
- 3.2 代码实现
- 3.2.1 图片为url格式
- 3.2.2 图片为base64格式
- 3.3 完整代码
- 3.4 问题分析
1. 作者介绍
杨煜星,女,西安工程大学电子信息学院,2023级研究生
研究方向:模式识别与人工智能
电子邮件:954154587@qq.com
黄浩磊,男,西安工程大学电子信息学院,2023级研究生,张宏伟人工智能课题组
研究方向:智能视觉检测与工业自动化技术
电子邮件:hhl57303@163.com
2. 人脸识别内容介绍
2.1 人脸识别简介
人脸融合技术是一种创新的图像处理方法,它能够将两个人或多个个体的面部特征合并,生成一张全新的、同时拥有这些个体面部特征的合成照片或视频。这项技术结合了计算机视觉、深度学习、图像处理等领域的前沿成果,不仅在娱乐产业中大放异彩,也在诸多其他领域展现出广泛的应用潜力。
2.2 技术原理
- 人脸检测与关键点定位:
首先,系统需要识别并定位输入图像中的人脸。这通常通过人脸检测算法实现,它可以找出图像中所有的人脸区域。
接着,关键点定位技术会精确地标记出每个人脸上的关键特征点,比如眼睛、鼻子、嘴巴的位置,有时还包括眉毛、下巴轮廓等。这些关键点对于后续的对齐和融合至关重要。 - 人脸对齐:
为了使不同人脸的特征能够在空间上对应起来,需要对人脸图像进行对齐操作。这通常涉及到根据关键点的位置,对人脸进行旋转、缩放和平移,使得面部特征在空间上处于一致的位置。 - 特征提取:
在对齐之后,系统会从每张人脸图像中提取特征向量,这些特征向量捕捉了人脸的独特信息,如面部结构、纹理等。这一过程可能涉及深度学习技术,如卷积神经网络(CNN),它们能够高效地从图像中提取高层次特征。 - 特征融合:
这一步骤是人脸融合的核心。根据应用场景的需求,可以采取不同的融合策略。一种常见方法是按一定权重平均或插值两个人脸的特征向量,生成一个新的特征向量,代表融合后的面部特征。 - 人脸重建:
利用生成的融合特征向量,系统通过逆向过程(如生成对抗网络GANs或其他重建算法)生成一个全新的面部图像。这个过程需要确保生成的面部看起来自然且逼真。 - 后处理:
最后,可能需要进行一些后处理步骤,如色彩调整、光影处理等,以增强融合图像的真实感和整体协调性。
3. 实现流程及代码实现
3.1 实现流程
-
打开访问管理>>API密钥管理>>新建密钥,获得secret ID ,secret key
-
腾讯云官网搜索人脸融合产品
-
点击人脸融合进入操作界面,选择立即选购
-
在人脸融合左侧选择栏选择活动管理,创建活动
-
添加素材,注意选取图片要求,不可选用名人、明星照片,否则审核不通过
-
打开人脸融合>>产品文档>>图片人脸融合>>点击调试
3.2 代码实现
3.2.1 图片为url格式
在发起点击调试后,选择大区,填相应的活动项目ID和素材ID,这些可以在控制台获取,再将url格式复制粘贴到上图所处位置。
之后点击发起调用,再点击右侧代码示例>>SDK>>python,复制代码到pycharm,点击运行。
3.2.2 图片为base64格式
首先要将本地图片转为base64格式,再粘贴到image所处位置,然后点击发起调用,再点击右侧代码示例>>SDK>>python,复制代码到pycharm,点击运行。
这里左侧为素材图,右侧是要融合的图片,中间是融合后的效果,如下图所示
3.3 完整代码
- 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)
- 本地图片融合代码实现方式
对本地图片进行融合,首先需要将图片转为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格式