人工智能大数据,工作效率生产力
Ctrl + D 收藏本站,更多好用AI工具
当前位置:首页 » AI资讯

Python实现AI变脸

2024-06-17 82

目录

业务需求

需求分析

代码设计

结果展示

思考总结

参考文献


业务需求

大时代换脸技术已经应用很多年了,很多已经在手机上面实现换脸技术了。我们Python也不能落后这个技术案例。利用python的技术,将两张照片合成一张照片,将脸部的轮廓,眼睛,鼻子进行更换。

需求分析

利用开源的网站提供的接口文档(这里参考Face⁺⁺开源地址进行注册,在个人应用的界面领取key,secret进行接口使用),调用图像识别功能,使用face接口参数,将照片进行识别。将图片的相框的像素全部识别出来,将数据调用到另外一个接口内进行合并。合并的接口继续有开源的公司提供,将开源公司的接口发挥最大化,利用request方法进行请求,将数据进行base64位进行加密解密。用Json数据进行数据的转化,在调用开源公司的接口进行合并处理。

代码设计

import json import base64 import requests # 算法 # 构建模型 # 训练模型 ---> 需要数据集 # 找到人脸数据 def find_face(imgpath): http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect' #参数 data = { 'api_key': 'HLczng31fOqL9d4CGSHR92q1erJpclEp', 'api_secret': '_BPe6cvoxUUgJPdMcWst47nA_S-NI2Tq', 'img_url':imgpath, 'return_landmark':1 } #文件以rb表示二进制的读取 files = {'image_file':open(imgpath,'rb')} # 携带数据的请求我们通常使用post请求 resp = requests.post(http_url,data=data,files=files) #req_con是个json格式的数据 req_con = resp.text #类型转换 this_dict = json.loads(req_con) faces = this_dict['faces'] list0 = faces[0] #得到人脸框的数据 rectangle = list0['face_rectangle'] print("获得人脸数据:",rectangle) return rectangle # 拟合,拼接人脸 def merge_face(img_url1,img_url2,img_url3,number): """ :param img_url1: 第一张图像 :param img_url2: 第二张图像 :param img_url3: 合并后的效果图 :param number:相似度 :return: """ #调用第一个函数,分别获取第一张图片和第二张图片的人脸数据 ff1 = find_face(img_url1) ff2 = find_face(img_url2) #因为参数需要是字符串类型,而ff1和ff2都是字典,我们需要格式转换 rectangle1 = str( str(ff1['top'])+","+str(ff1['left'])+","+str(ff1['width'])+","+str(ff1['height']) ) rectangle2 = str( str(ff2['top'])+","+str(ff2['left'])+","+str(ff2['width'])+","+str(ff2['height']) ) print("打印第一张图片的数据",rectangle1) print("打印第二张照片的数据",rectangle2) f1 = open(img_url1,'rb') f1_64 = base64.b64encode(f1.read()) #编码 f1.close() f2 = open(img_url2, 'rb') f2_64 = base64.b64encode(f2.read()) # 编码 f2.close() #合并,我们需要使用另一个接口 url_add = 'https://api-cn.faceplusplus.com/imagepp/v1/mergeface' #调用参数 data = { 'api_key': 'HLczng31fOqL9d4CGSHR92q1erJpclEp', 'api_secret': '_BPe6cvoxUUgJPdMcWst47nA_S-NI2Tq', 'template_base64':f1_64,'template_rectangle':rectangle1, 'merge_base64':f2_64,'merge_rectangle':rectangle2, 'merge_rate':number } resp = requests.post(url_add,data=data) req_con = resp.text # 把json转化为字典,作用和上面那个一样,殊途同归 req_dict = json.JSONDecoder().decode(req_con) # 类型转化 result = req_dict['result'] imgdata = base64.b64decode(result) # 用wb写入这张图像 file = open(img_url3,'wb') file.write(imgdata) file.close() if __name__=="__main__": img1 = r"E:\test\3.jpg" img2 = r"E:\test\4.jpg" img3 = r"E:\test\result.jpg" merge_face(img1,img2,img3,30) 

结果展示

3.jgp图片

Python实现AI变脸插图

4.jpg图片

Python实现AI变脸插图1

合成效果图片result.jpg

Python实现AI变脸插图2

思考总结

合成照片,先将两个照片预处理,保持眼睛和鼻子、轮廓一致。调用现成用好的接口,直接配合参数使用。可以简单进行AI换脸,但是遇到模糊,或者照片不清楚情况,不能进行AI的合成。下次研究一下动态换脸技术,将摄像头拍成视频换成动态。谢谢支持。

参考文献

python实现AI换脸_发光吖的博客-CSDN博客_python ai换脸

原文链接:https://blog.csdn.net/yi247630676/article/details/128716502?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171851505116800184117690%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171851505116800184117690&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-17-128716502-null-null.nonecase&utm_term=AI%E5%A4%B4%E5%83%8F

相关推荐

阅读榜

hellenandjeckett@outlook.com

加入QQ群:849112589

回顶部