Python轻松实现AI换脸
目录
- 引言
- 思路
- 代码
- 效果
引言
在网上看到一篇基于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换脸相关推荐
- ZAO 换脸不安全?用 python 轻松实现 AI
最近两天一款名为 「ZAO」 的 App 刷爆了朋友圈,它的主打功能是 AI 换脸,宣称「只需一张照片,就能出演天下好戏」 : 现实中不能实现当明星的梦,在这个 App 里你可以,想演谁演谁.新鲜.好 ...
- python实现视频ai换脸_Python如何实现AI换脸功能 Python实现AI换脸功能代码
Python如何实现AI换脸功能?本篇文章小编给大家分享一下Python实现AI换脸功能代码,文章代码详细的介绍了实现方法,小编觉得挺不错的,有需要的小伙伴们可以来看看. 需要用到的接口: 获取人脸信 ...
- python调用API轻松实现AI 换脸
# AI换脸 # AndyCheimport requests import json import simplejson import base64# 第一步:获取人脸关键点 def find_fa ...
- python实现视频ai换脸_python 实现 AI 换脸
#!/usr/bin/python # -*- coding: utf-8 -*- # @Time : 2019/9/1 8:50 # @Author : cuijianzhe # @File : A ...
- python实现视频ai换脸_超简单使用Python换脸实例
换脸! 这段时间,deepfakes搞得火热,比方说把<射雕英雄传>里的朱茵换成了杨幂,看下面的图!毫无违和感! 其实早在之前,基于AI换脸的技术就得到了应用,比方说<速度与激情7& ...
- python实现视频ai换脸_【原创】python实现视频内的face swap(换脸)
ruby中excel简单操作以及文件读取操作方法 # -*-coding:utf-8 -*-#author:kanlijunrequire 'win32ole'require 'fileutils'c ...
- AI 换脸?除了 ZAO,用 Python 一样轻松搞定
最近两天一款名为 「ZAO」 的 App 刷爆了朋友圈,它的主打功能是 AI 换脸,宣称「只需一张照片,就能出演天下好戏」 : 现实中不能实现当明星的梦,在这个 App 里你可以,想演谁演谁.新鲜.好 ...
- 开课吧python怎么样-找工作得有个大杀招,你看AI换脸这个技能怎么样?
原标题:找工作得有个大杀招,你看AI换脸这个技能怎么样? 你ZAO吗,当你还沉浸在idol爆恋情的悲伤中,别人已经"和偶像同台对戏了"! 相信大部分小伙伴都已经知道"别人 ...
- Python进阶——网课不愁系列AI换脸技术
俗话说的好:网络一线牵,珍惜这段缘! 网络的水很深,年轻人你把握不住,众所周知照片是可以P的,但是"视频"是"P"不了的(狗头保命) 谁能想到AI换脸竟然如此便 ...
最新文章
- Angular 2+ 监听路由变化动态设置页面标题
- Spring学习1之ioc
- 新浪微博推出具有中国特色的“关注但屏蔽”功能
- python字符串截取方法_如何使用python语言中的字符串方法截取字符串
- 分布与并行计算—生命游戏(Java)
- 七种武器武装.NET(常用开发工具介绍)(转)
- 在plc中用c语言实现电梯控制程序,三菱FX2N PLC电梯运行控制程序设计
- wpf ui框架_替代Silverlight:微软面向Web开发者推出Blazor新框架
- 移动端 短信发送,一键拨号功能
- 分享我的第一次Selenium自动化测试框架开发过程
- css中给文字加框,让CSS3给你的文字加上边框宽度,并实现镂空效果
- 当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀
- 手机配件市场上的“隐形巨头”:80后长沙夫妻创办,IPO首日市值逼近600亿
- ESP32片外PSRAM
- matlab 检测键盘,matlab检测键盘
- ubuntu 修改系统默认语言为英文!
- html 两个时间戳相减,表格里两列时间点如何相减
- 洛谷P1458 [USACO2.1]顺序的分数 Ordered Fractions
- linux系统的midi制作软件,在ubuntu系统下制作midi音乐
- 重极限 连续 偏导数 全微分