基于Face++的AI换脸实现(详细)

如何实现图片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
在这里插入图片描述
在这里插入图片描述

换脸成功!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30706.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

目录 1. 换脸基本原理2 人脸检测及可视化3. 人脸轮廓点检测及可视化4. 人脸图像变换--仿射变换5. 生成遮罩并直接替换人脸6. 人脸颜色校正 最近AI换脸貌似比较火爆,就稍微研究了一下相关了内容。AI换脸是一个娱乐性比较强的应用,这种错位感让人觉得非常有…

faceswap换脸程序安装及使用

faceswap简介 faceswap是一个开源的视频换脸软件,基本需要三个步骤,1.将视频切割成图片,并进行人脸提取 2.样本训练 3.换脸 faceswap安装(windows环境) 依赖安装 anaconda 需要先安装conda,用于python的…

分享几个我试过的AI工具,也可以在写论文时使用

现在AI工具越来越火了,特别是Chatgpt兴起以后。分享几个我平常会用的AI工具希望大家也有用到 1. Chatgpt与davinci Chatgpt相信大家比较熟悉了,但实际上OpenAI还有一个基于GPT-3的模型,这里我推荐一个可以代替chatgpt的工具, davinci-003。是…

国内企业怎么做好海外市场营销? 海外市场营销推广的全过程

如果您在中国不了解海外市场,但有国际推广需求,那么本文可以帮助您了解海外市场的营销理 念与方法,并帮助您实施全面的营销计划: 首先让我们从市场调查开始。 一、海外市场调研 如果你不熟悉当地的情况,开始贸易推…

【课件】Python调用OpenAI API实现ChatGPT多轮对话

Python调用openai API实现多轮对话 如何实现多轮对话? gpt-3.5-turbo 模型调用方法 openai.ChatCompletion.create 里传入的 message 是一个列表,列表里每个元素是字典,包含了角色和内容,我们只需将每轮对话都存储起来&#xff0c…

使用OpenAI创建对话式聊天机器人

引言 在当今的技术世界中,人工智能(AI)的发展迅猛,为我们带来了许多令人兴奋的创新。其中,自然语言处理(NLP)领域的进展使得开发对话式聊天机器人成为可能。OpenAI是一家领先的人工智能研究实验…

人工智能数学基础--概率与统计8:一个很有意思的下棋输赢概率问题

一、问题 甲、乙二人下象棋,每局甲胜的概率为a,乙胜的概率为b。为简化问题,设没有和局的情况,这意味着ab1。设想甲的棋艺高于乙,即a>b。考虑到这个情况,他们商定最终胜负的规则如下: 到什么…

2018年数学与计算机大事件:18岁少年大放异彩!ABC猜想证明被推翻?

【导读】2018年数学和计算机科学领域发生了哪些重大事件?量子霸权并未实现,年轻的菲尔兹奖得主质疑日本数学家望月新一对ABC猜想的证明。还有18岁的少年、苦读8年不毕业的女研究生,以及退休软件工程师和抗衰老组织联合创始人,都在…

里程碑式的数学证明,攻破著名Erdős猜想中关键障碍

大数据文摘出品 来源:wired 编译:Canary、Andy 最近,两名数学家解决了一个关于整数相加性质最著名猜想中的第一部分。该猜想由匈牙利传奇数学家Paul Erdős于60多年前提出,一个无限整数序列在何时一定会包含至少有三个等差数的模式…

6174猜想的证明 Python

什么是6174猜想 1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去…

程序员的数学课04 万物可数学,经典公式是如何在生活中应用的?

在我们的生活和工作中,有大量的数学应用场景,一些简单的经典公式会在我们的生活中被反复验证、体现。对于经典公式的理解,能增强你的数据 sense,更能帮助你在遇到问题时,迅速找到解决思路。 这一课时我将列举四个脑洞…

评审8年终获发表,数学天才望月新一证明abc猜想,全球只有十几个数学家读懂但争议未消...

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI abc猜想,数学界悬而未决的重要猜想,它的证明过程经过8年的同行评审,终于要在期刊上发表了。 论文作者是日本的天才数学家望月新一,他33岁起就在京都大学担任数学教授。 这一次望月新…

C++角谷猜想

题目描述: 请编写一个程序,验证角谷猜想。所谓角谷猜想是:“对于任意大于1的自然数n,若n为奇数,则将n变为3*n1,否则将n变为n的一半。”经过若干次这样的变化,一定会使n变为1。 输入格式&#…

某安网别逆向,一不小心就......

​ 大家好,我是TheWeiJun,欢迎来到我的公众号。在现代互联网中,cookie成为了网站管理的重要工具。某些网站会对cookie进行加密,以加强数据的安全性和保密性。然而,逆向加密算法并不是一件简单的事情。本文将探讨如何逆…

群晖docker实现IPV6访问

概述: 群晖docker默认没有没有开启ipv6,需要修改docker的配置文件。 修改过程: 一、首先确认自己的网络已经支持IPV6(需要光猫及路由器支持ipv6) 1.登陆www.test-ipv6.com查看是否已经接入IPV6 2.登陆自己的群晖查…

群晖传文件到服务器,文件上传到群晖服务器

文件上传到群晖服务器 内容精选 换一换 监控数据上报功能可以将系统中采集到的监控数据写入到文本文件,并以FTP或SFTP的形式上传到指定的服务器中。使用该功能前,管理员需要在FusionInsight Manager页面进行相关配置。“监控数据上传”默认为不启用&…

群晖硬盘警告修复

群晖硬盘警告修复 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 我的群晖每次被我拿出来的时候,由于震动等原因,会时不时出现硬盘警告的提示,从而导致无法使用,现在我们来屏蔽一下…

安装群晖显示服务器忙,云服务器安装群晖

云服务器安装群晖 内容精选 换一换 华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。 登录Windows操作系统的弹性云服务器时,需使用密码方式登录。因此,用户需先根据创…

群晖php mysql网站博客,群晖建博客详细教程

群晖建博客详细教程 2017-03-01 14:23:01 36点赞 419收藏 44评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动详情 群晖NAS功能强大,除了大家都知道的存储文件,代替各种公有云以外,还可以当成一个网站服务器来使用。配合DDN…

群晖web文件服务器docker,群晖docker搭建数据库服务器

群晖docker搭建数据库服务器 内容精选 换一换 本手册基于华为云关系型数据库实践所编写,用于指导您完成相关设置,购买更符合业务的数据库实例。 创建一个外部服务器。外部服务器是存储OBS服务器信息或其他同构集群信息的载体。默认只有系统管理员才可以创建外部服务器,否则需…