当前位置:   article > 正文

Python实现AI变脸_ai换脸接口

ai换脸接口

目录

业务需求

需求分析

代码设计

结果展示

思考总结

参考文献


业务需求

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

需求分析

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

代码设计

  1. import json
  2. import base64
  3. import requests
  4. # 算法
  5. # 构建模型
  6. # 训练模型 ---> 需要数据集
  7. # 找到人脸数据
  8. def find_face(imgpath):
  9. http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
  10. #参数
  11. data = {
  12. 'api_key': 'HLczng31fOqL9d4CGSHR92q1erJpclEp',
  13. 'api_secret': '_BPe6cvoxUUgJPdMcWst47nA_S-NI2Tq',
  14. 'img_url':imgpath,
  15. 'return_landmark':1
  16. }
  17. #文件以rb表示二进制的读取
  18. files = {'image_file':open(imgpath,'rb')}
  19. # 携带数据的请求我们通常使用post请求
  20. resp = requests.post(http_url,data=data,files=files)
  21. #req_con是个json格式的数据
  22. req_con = resp.text
  23. #类型转换
  24. this_dict = json.loads(req_con)
  25. faces = this_dict['faces']
  26. list0 = faces[0]
  27. #得到人脸框的数据
  28. rectangle = list0['face_rectangle']
  29. print("获得人脸数据:",rectangle)
  30. return rectangle
  31. # 拟合,拼接人脸
  32. def merge_face(img_url1,img_url2,img_url3,number):
  33. """
  34. :param img_url1: 第一张图像
  35. :param img_url2: 第二张图像
  36. :param img_url3: 合并后的效果图
  37. :param number:相似度
  38. :return:
  39. """
  40. #调用第一个函数,分别获取第一张图片和第二张图片的人脸数据
  41. ff1 = find_face(img_url1)
  42. ff2 = find_face(img_url2)
  43. #因为参数需要是字符串类型,而ff1和ff2都是字典,我们需要格式转换
  44. rectangle1 = str( str(ff1['top'])+","+str(ff1['left'])+","+str(ff1['width'])+","+str(ff1['height']) )
  45. rectangle2 = str( str(ff2['top'])+","+str(ff2['left'])+","+str(ff2['width'])+","+str(ff2['height']) )
  46. print("打印第一张图片的数据",rectangle1)
  47. print("打印第二张照片的数据",rectangle2)
  48. f1 = open(img_url1,'rb')
  49. f1_64 = base64.b64encode(f1.read()) #编码
  50. f1.close()
  51. f2 = open(img_url2, 'rb')
  52. f2_64 = base64.b64encode(f2.read()) # 编码
  53. f2.close()
  54. #合并,我们需要使用另一个接口
  55. url_add = 'https://api-cn.faceplusplus.com/imagepp/v1/mergeface'
  56. #调用参数
  57. data = {
  58. 'api_key': 'HLczng31fOqL9d4CGSHR92q1erJpclEp',
  59. 'api_secret': '_BPe6cvoxUUgJPdMcWst47nA_S-NI2Tq',
  60. 'template_base64':f1_64,'template_rectangle':rectangle1,
  61. 'merge_base64':f2_64,'merge_rectangle':rectangle2,
  62. 'merge_rate':number
  63. }
  64. resp = requests.post(url_add,data=data)
  65. req_con = resp.text
  66. # 把json转化为字典,作用和上面那个一样,殊途同归
  67. req_dict = json.JSONDecoder().decode(req_con)
  68. # 类型转化
  69. result = req_dict['result']
  70. imgdata = base64.b64decode(result)
  71. # 用wb写入这张图像
  72. file = open(img_url3,'wb')
  73. file.write(imgdata)
  74. file.close()
  75. if __name__=="__main__":
  76. img1 = r"E:\test\3.jpg"
  77. img2 = r"E:\test\4.jpg"
  78. img3 = r"E:\test\result.jpg"
  79. merge_face(img1,img2,img3,30)

结果展示

3.jgp图片

4.jpg图片

 

合成效果图片result.jpg

思考总结

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

 参考文献

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号