目录

  • 引言
  • 思路
  • 代码
  • 效果

引言

在网上看到一篇基于python实现AI换脸的文章,觉得很好玩复现了一下。研究了几个小时后成功把迪丽热巴的脸换到关晓彤上,很好看;另外还把蔡徐坤的脸换到特朗普上,效果那是相当惊人(⊙ˍ⊙)

思路

思路比较简单,主要使用了旷视人工智能平台上的API实现。首先调用脸部识别API识别被换图和融合图,再调用脸部融合API换脸就完成了。整个过程中要用到request库调用API,json、simplejson和base64模块编码和解码,以及文件的读写操作
人脸识别API
脸部融合API

代码

import requests
import simplejson
import json
import base64def detect_face(path, img):      # 脸部识别print("detecting %s..."%(img))url_detect = "https://api-cn.faceplusplus.com/facepp/v3/detect"    # 旷视Detect APIdata = {"api_key": "UmeTHKmayj5KFi6SCTt3-0rwc8XSx9k9",  "api_secret": "KlpfpUnIK_0FllNu3JbREJM3WKppz1OJ", "image_file":img , "return_landmark": 2}      # 构造表单数据,用于post请求(api_key和api_secret要注册旷视人工智能平台后才有)files = {"image_file": open(path+img, "rb")}response = requests.post(url_detect, data=data, files=files)req_con = response.content.decode("utf-8")  # 将已编码的json字符解码为python对象req_dict = json.JSONDecoder().decode(req_con)this_json = simplejson.dumps(req_dict)  # 将python对象编码成json字符串this_json2 = simplejson.loads(this_json)  # 将已编码的json字符串解码为python对象faces = this_json2["faces"]# print(faces)rectangle = list0["face_rectangle"]return rectangledef merge_face(path, img1, img2, img3, number):    # 人脸融合list0 = faces[0]df1 = detect_face(path, img1)df2 = detect_face(path, img2)rectangle1 = str(df1["top"]) + "," + str(df1["left"]) + "," + str(df1["width"]) + "," + str(df1["height"])rectangle2 = str(df2["top"]) + "," + str(df2["left"]) + "," + str(df2["width"]) + "," + str(df2["height"])url_merge = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface" # 旷视Merge_face APIf1 = open(path+img1, "rb")f1_64 = base64.b64encode(f1.read())f1.close()f2 = open(path+img2, "rb")f2_64 = base64.b64encode(f2.read())f2.close()data = {"api_key": "UmeTHKmayj5KFi6SCTt3-0rwc8XSx9k9", "api_secret": "KlpfpUnIK_0FllNu3JbREJM3WKppz1OJ","template_base64": f1_64, "template_rectangle": rectangle1,"merge_base64": f2_64, "merge_rectangle": rectangle2,"merge_rate": number}print("merging...")response = requests.post(url_merge, data=data)req_con = response.content.decode("utf-8")req_dict = json.JSONDecoder().decode(req_con)result = req_dict["result"]imgdata = base64.b64decode(result)file = open(path+img3, "wb")file.write(imgdata)file.close()def main():path = input("输入图片路径:")image1 = input("输入被换图名称:")image2 = input("输入融合图名称:")image3 = input("输入换脸后的图片名称:")try:merge_face(path, image1, image2, image3, 100)  # 融合率为100print("converted successfully!")except:print("出现异常")import tracebacktraceback.print_exc()main()

效果

经过测试发现:换脸效果和两张脸的朝向、脸型、大小、五官位置、是否闭眼有关(要得到不错的换脸图,条件还真有点苛刻),剔除了一些合成效果不好的图片后,保留了两组换脸效果还不错的图

还不错!
参考:
python实现AI换脸

Python轻松实现AI换脸相关推荐

  1. ZAO 换脸不安全?用 python 轻松实现 AI

    最近两天一款名为 「ZAO」 的 App 刷爆了朋友圈,它的主打功能是 AI 换脸,宣称「只需一张照片,就能出演天下好戏」 : 现实中不能实现当明星的梦,在这个 App 里你可以,想演谁演谁.新鲜.好 ...

  2. python实现视频ai换脸_Python如何实现AI换脸功能 Python实现AI换脸功能代码

    Python如何实现AI换脸功能?本篇文章小编给大家分享一下Python实现AI换脸功能代码,文章代码详细的介绍了实现方法,小编觉得挺不错的,有需要的小伙伴们可以来看看. 需要用到的接口: 获取人脸信 ...

  3. python调用API轻松实现AI 换脸

    # AI换脸 # AndyCheimport requests import json import simplejson import base64# 第一步:获取人脸关键点 def find_fa ...

  4. python实现视频ai换脸_python 实现 AI 换脸

    #!/usr/bin/python # -*- coding: utf-8 -*- # @Time : 2019/9/1 8:50 # @Author : cuijianzhe # @File : A ...

  5. python实现视频ai换脸_超简单使用Python换脸实例

    换脸! 这段时间,deepfakes搞得火热,比方说把<射雕英雄传>里的朱茵换成了杨幂,看下面的图!毫无违和感! 其实早在之前,基于AI换脸的技术就得到了应用,比方说<速度与激情7& ...

  6. python实现视频ai换脸_【原创】python实现视频内的face swap(换脸)

    ruby中excel简单操作以及文件读取操作方法 # -*-coding:utf-8 -*-#author:kanlijunrequire 'win32ole'require 'fileutils'c ...

  7. AI 换脸?除了 ZAO,用 Python 一样轻松搞定

    最近两天一款名为 「ZAO」 的 App 刷爆了朋友圈,它的主打功能是 AI 换脸,宣称「只需一张照片,就能出演天下好戏」 : 现实中不能实现当明星的梦,在这个 App 里你可以,想演谁演谁.新鲜.好 ...

  8. 开课吧python怎么样-找工作得有个大杀招,你看AI换脸这个技能怎么样?

    原标题:找工作得有个大杀招,你看AI换脸这个技能怎么样? 你ZAO吗,当你还沉浸在idol爆恋情的悲伤中,别人已经"和偶像同台对戏了"! 相信大部分小伙伴都已经知道"别人 ...

  9. Python进阶——网课不愁系列AI换脸技术

    俗话说的好:网络一线牵,珍惜这段缘! 网络的水很深,年轻人你把握不住,众所周知照片是可以P的,但是"视频"是"P"不了的(狗头保命) 谁能想到AI换脸竟然如此便 ...

最新文章

  1. Angular 2+ 监听路由变化动态设置页面标题
  2. Spring学习1之ioc
  3. 新浪微博推出具有中国特色的“关注但屏蔽”功能
  4. python字符串截取方法_如何使用python语言中的字符串方法截取字符串
  5. 分布与并行计算—生命游戏(Java)
  6. 七种武器武装.NET(常用开发工具介绍)(转)
  7. 在plc中用c语言实现电梯控制程序,三菱FX2N PLC电梯运行控制程序设计
  8. wpf ui框架_替代Silverlight:微软面向Web开发者推出Blazor新框架
  9. 移动端 短信发送,一键拨号功能
  10. 分享我的第一次Selenium自动化测试框架开发过程
  11. css中给文字加框,让CSS3给你的文字加上边框宽度,并实现镂空效果
  12. 当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀
  13. 手机配件市场上的“隐形巨头”:80后长沙夫妻创办,IPO首日市值逼近600亿
  14. ESP32片外PSRAM
  15. matlab 检测键盘,matlab检测键盘
  16. ubuntu 修改系统默认语言为英文!
  17. html 两个时间戳相减,表格里两列时间点如何相减
  18. 洛谷P1458 [USACO2.1]顺序的分数 Ordered Fractions
  19. linux系统的midi制作软件,在ubuntu系统下制作midi音乐
  20. 重极限 连续 偏导数 全微分

热门文章

  1. 用计算机解决问题听课笔记,《用计算机解决问题的一般步骤》说课稿
  2. 第一次用VNPY,通过仿真测试,踩过千万坑,我太难了~~~~~~
  3. 安卓巴士总结了近百个Android优秀开源项
  4. FFmpeg的HEVC解码器源代码简单分析 解析器(Parser)部分
  5. java中paint_Java中paint怎么用
  6. 博弈对抗游戏AI的技术方法的一些总结和思考
  7. 天猫魔盒挂载ext4移动硬盘
  8. 实现简单计算器 两个数字的加减乘除计算
  9. Emotiv EPOCFLEX 32导脑电仪数据准确导入EEGLAB
  10. 2020.2.18 大一寒假训练十一(set)