如何实现图片AI换脸(详细)

  • 前言
    • 关于AI换脸
  • 常见的换脸API供应者
    • 获取换脸API
  • 代码实现
    • 导入相应库与API链接
    • 定义一个获取图片的人脸特征参数的函数
    • 定义一个换脸函数
    • 换脸实现--完整代码
  • 结果展示
  • 写在最后

前言

关于AI换脸

关于AI(即Artificial Intelligence)如何实现人脸切换,改变五官。背后有其自身的特殊算法,将人脸的信息特征通过机器语言来传达至计算机。通过机器学习(machine learning)让计算机懂得识别人脸对应的分点,然后再在其他人脸上展现出来,达到换脸的目的。

常见的换脸API供应者


已经开发研究过AI的公司,有提供相应我们所需的api接口业务服务,我们可以借助这些公司提供的API进行人脸转换操作。此类有如:deepfake、face++等(这里以face++作为例子)

获取换脸API


face++(点击即可进入)
首先需要进入face++官网,完成注册后,可在账户信息中申请创建得到API key,API secret。


代码实现

导入相应库与API链接

import requests
import base64
import warnings; warnings.simplefilter('ignore')


导入所获取的API的key与secret

API_Key = ''    # JustForFun的API Key
API_Secret = ''   # JustForFun的API Secret

定义一个获取图片的人脸特征参数的函数


def find_face(imgpath):      url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'   data = {'api_key': API_Key, 'api_secret': API_Secret, 'image_url': imgpath, 'return_landmark': 1}   files = {'image_file': open(imgpath, 'rb')}    response = requests.post(url, data=data, files=files)    res_json = response.json()    # 转换为jsonfaces = res_json['faces'][0]['face_rectangle']  # 获取面部大小的四个值,分别为长宽高低return faces    # 返回图片的面部参数

定义一个换脸函数

# 定义一个换脸函数,函数中number表示两张脸的相似度为99%
def change_face(image_1, image_2, number=99):url = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface"    find_p1 = find_face(image_1)    find_p2 = find_face(image_2)    rectangle1 = str(str(find_p1['top']) + ',' + str(find_p1['left']) + ',' + str(find_p1['width']) + ',' + str(find_p1['height']))  rectangle2 = str(str(find_p2['top']) + ',' + str(find_p2['left']) + ',' + str(find_p2['width']) + ',' + str(find_p2['height']))  page1 = open(image_1, 'rb')  page1_64 = base64.b64encode(page1.read())  page1.close()  page2 = open(image_2, 'rb')   page2_64 = base64.b64encode(page2.read())   page2.close()  data = {'api_key': API_Key, 'api_secret': API_Secret, 'template_base64': page1_64,'template_rectangle': rectangle1, 'merge_base64': page2_64, 'merge_rectangele': rectangle2,'merge_rate': number}   response = requests.post(url, data=data).json()    results = response['result']   image = base64.b64decode(results)    with open('所得到的图片.jpg', 'wb') as file:    # 将信息写入到图片file.write(image)print("转换完成")

最后将需要换脸的图片导入,运行

if __name__ == '__main__':change_face('D:地址\\所交换的图片1.jpg','D:地址\\所交换的图片2.jpg')

换脸实现–完整代码

import requests
import base64
import warnings; warnings.simplefilter('ignore') API_Key = ''    # JustForFun的API Key
API_Secret = ''   # JustForFun的API Secretdef find_face(imgpath):      url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'    data = {'api_key': API_Key, 'api_secret': API_Secret, 'image_url': imgpath, 'return_landmark': 1}    files = {'image_file': open(imgpath, 'rb')}    response = requests.post(url, data=data, files=files)   res_json = response.json()    # 转换为jsonfaces = res_json['faces'][0]['face_rectangle']  # 获取面部大小的四个值,分别为长宽高低return faces    # 返回图片的面部参数def change_face(image_1, image_2, number=99):url = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface"    # find_p1 = find_face(image_1)    find_p2 = find_face(image_2)    rectangle1 = str(str(find_p1['top']) + ',' + str(find_p1['left']) + ',' + str(find_p1['width']) + ',' + str(find_p1['height']))  rectangle2 = str(str(find_p2['top']) + ',' + str(find_p2['left']) + ',' + str(find_p2['width']) + ',' + str(find_p2['height'])) page1 = open(image_1, 'rb')  page1_64 = base64.b64encode(page1.read()) page1.close()  page2 = open(image_2, 'rb')  page2_64 = base64.b64encode(page2.read())   page2.close()   data = {'api_key': API_Key, 'api_secret': API_Secret, 'template_base64': page1_64,'template_rectangle': rectangle1, 'merge_base64': page2_64, 'merge_rectangele': rectangle2,'merge_rate': number}   response = requests.post(url, data=data).json()   results = response['result']    image = base64.b64decode(results)    with open('所得到的图片.jpg', 'wb') as f:    # 将信息写入到图片f.write(image)print("转换完成")if __name__ == '__main__':change_face('D:路径\\所交换的图片1.jpg','D:路径\\所交换的图片2.jpg')

结果展示

P1

P2

P3

换脸成功!

写在最后

如果你觉得文章对你有帮助,求一个小小的赞
作为一个初来乍到的新人博主
求关注~(悄咪咪)

注:本篇文章仅供学习,请勿用于商业活动或侵权行为。

基于Face++的AI换脸实现(详细)相关推荐

  1. 基于DeepFaceLab的AI换脸

    ## 基于DeepFaxeLab的AI换脸导言:本文主讲SAEHD模型的训练脚本,QUICK96类似,不重复展开下面以2021年0104英文版为案例讲解,附带中文翻译.可能跟各汉化版名称说法有出入,请 ...

  2. AI“换脸”打开潘多拉魔盒,如何应对?

    来源:科学网 近日,一款名为"ZAO"的换脸APP引发舆论关注.用户上传照片,就可以把影视剧主角的脸替换成用户自己的脸.在过把"明星瘾"的同时,也让大众关注到& ...

  3. Python轻松实现AI换脸

    目录 引言 思路 代码 效果 引言 在网上看到一篇基于python实现AI换脸的文章,觉得很好玩复现了一下.研究了几个小时后成功把迪丽热巴的脸换到关晓彤上,很好看:另外还把蔡徐坤的脸换到特朗普上,效果 ...

  4. CV之FD:基于dlib、cv2库利用warpPerspective函数和_68_face_landmarks文件实现AI换脸渐变融合视频效果

    CV之FD:基于dlib.cv2库利用warpPerspective函数和_68_face_landmarks文件实现AI换脸渐变融合视频效果 目录 输出结果 设计思路 输出结果 设计思路 实现代码 ...

  5. 【换脸详细教程】手把手教你进行AI换脸:换脸流程及源码详解

    目录 1. 换脸基本原理 2 人脸检测及可视化 3. 人脸轮廓点检测及可视化 4. 人脸图像变换--仿射变换 5. 生成遮罩并直接替换人脸 6. 人脸颜色校正 最近AI换脸貌似比较火爆,就稍微研究了一 ...

  6. 如何进行AI换脸,AI换脸从 “0“ 到 “1” 详细教程 ——从配置环境开始

    后续文章读起来可能会影响观看可以前往鄙人博客查看:http://www.anyuer.club/?id=199 前言: 本人吃计算机这口饭的,说实话AI换脸很火的时候自己却没碰,挺吃亏的,最近时间比较 ...

  7. AI换脸、声音篡改等,明确写入新版《民法典》

    来源 | HyperAI超神经 5 月 28 日,十三届全国人大三次会议表决通过了<中华人民共和国民法典>(以下简称<民法典>)第四编人格权中的第四章肖像权,明确提出了以信息技 ...

  8. 神秘AI换脸软件入侵全球社交网络!马斯克秒变文艺复兴贵族

    来自:新智元 FaceApp的热度刚过不久,近期又有一款让你的脸秒变「迪士尼」的App火遍了全球的社交网络. 要测试「AI换脸」的效果,怎么能少了我们的老朋友LeCun. 实测效果还不错,确实有一丝丝 ...

  9. 鹿晗都有 AI 粉了,为什么 AI 换脸剧的效果还这么渣?

    本图片由AI换脸技术合成 作者 | 金玙璠 苏琦 编辑 | 魏佳 封图 | 来源于Bilibili Up主AI王子 来源 | 燃财经(ID:rancaijing) "科技改变追星生活.&qu ...

最新文章

  1. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
  2. 埃洛等级分系统【转自百度百科】
  3. 读取文件:TypeError: an integer is required (got type str)
  4. 相邻数字+(正月点灯笼的动态规划2)(递归+DP)---JAVA
  5. mybatis if-else(写法)
  6. redis(redis概念,运用场景,如何操作基本数据类型)
  7. 最新公路测量计算机,工地通路测电脑版
  8. 用pcDuino来做电子相框
  9. 【案例练习】17个华丽的UI效果的实现 ,激发你的创造灵感
  10. bat命令实现游戏存档自动备份
  11. C语言无符号有符号比较问题总结
  12. 前端自动生成Change Log的实现
  13. 胡喜:我是如何从菜鸟做到架构师的
  14. JS里数组合并的几种方法
  15. 圆周率 php算法,PHP坐标圆周率计算
  16. ABAP在Eclipse中做abap cds视图(marc表增强字段增强)
  17. 草莓tv 无法播放_草莓:高质量的声音,开源音乐播放器
  18. (二十三)SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
  19. MobCtrl万能遥控-手机控制电脑软件简介[官方]
  20. 【模拟】找规律填数字

热门文章

  1. 木犀草素-mPEG-PLGA载药纳米粒|葛根素HA/PEG-PLGA纳米粒|盐酸维拉帕米PLGA纳米粒(齐岳bio)
  2. 基于java超市会员管理系统
  3. 考研英语阅读真题8大来源报刊
  4. K-近邻算法讲解以及实战
  5. 9000字,通俗易懂的讲解下Java注解
  6. Mac下使用iPic+腾讯云cos打造舒服的写作环境
  7. 【ArduPilot开发指南】1.2.7 完整的参数列表 - BATTx_参数
  8. 腾讯tars报initLogger空指针异常
  9. cad对计算机的配置要求高吗,AutoCAD2018对电脑配置要求 需要什么配置的电脑
  10. web前端卡片样式_css完成卡片式图片结果_WEB前端开发