给照片换脸大家应该都见过,本文我们来介绍一下如何通过 Python 实现换脸。

功能实现

实现换脸功能,我们大致可以分为两种:一种是所有功能都通过自己编码来实现,另一种是借助于第三方 API 来实现,第一种方式可能需要我们进行大量的编码才能实现,而第二种方式我们只需进行少量的编码即可实现。

本文我们使用更简单的第二种方式来实现,我们用到的 API 接口提供方是 Face++,首先我们需要到该网站注册一个自己的账号,注册地址为: https://console.faceplusplus.com.cn/register ,打开后如下所示:

我们可以通过手机号和邮箱两种方式来注册,注册好账号之后,我们再到登录地址 https://console.faceplusplus.com.cn/login 进行登录,登录之后,我们会发现网站已经为我们创建好了应用,如下图所示:

我们需要用到的是上图中的 API Key 和 API Secret 的值,下面来看一下具体实现代码:

# 获取人脸关键点
def find_face(imgpath):print("正在查找……")http_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(http_url, data=data, files=files)req_con = response.content.decode('utf-8')req_dict = json.JSONDecoder().decode(req_con)this_json = simplejson.dumps(req_dict)this_json2 = simplejson.loads(this_json)print(this_json2)faces = this_json2['faces']list0 = faces[0]rectangle = list0['face_rectangle']# print(rectangle)return rectangle# 换脸,图片的大小应不超过 2M,number 表示换脸的相似度
def merge_face(image_url1, image_url2, image_url, number):ff1 = find_face(image_url1)ff2 = find_face(image_url2)rectangle1 = str(str(ff1['top']) + "," + str(ff1['left']) + "," + str(ff1['width']) + "," + str(ff1['height']))rectangle2 = str(ff2['top']) + "," + str(ff2['left']) + "," + str(ff2['width']) + "," + str(ff2['height'])print(rectangle2)url_add = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface"f1 = open(image_url1, 'rb')f1_64 = base64.b64encode(f1.read())f1.close()f2 = open(image_url2, 'rb')f2_64 = base64.b64encode(f2.read())f2.close()data = {"api_key": "自己的 api_key","api_secret": "自己的 api_secret","template_base64": f1_64, "template_rectangle": rectangle1,"merge_base64": f2_64, "merge_rectangle": rectangle2, "merge_rate": number}response = requests.post(url_add, data=data)req_con1 = response.content.decode('utf-8')req_dict = json.JSONDecoder().decode(req_con1)result = req_dict['result']imgdata = base64.b64decode(result)file = open(image_url, 'wb')file.write(imgdata)file.close()

效果展示

示例 1

首先,我们使用两位男明星的图片进行效果展示,原图如下所示:

换脸后的效果图如下所示:

示例 2

接着,我们再使用两位女明星的图片进行效果展示,原图如下所示:

换脸后的效果图如下所示:

不到 100 行 Python 代码徐峥变葛优相关推荐

  1. 100行的python作品详解_不到 100 行 Python 代码徐峥变葛优

    给照片换脸大家应该都见过,本文我们来介绍一下如何通过 Python 实现换脸. 功能实现 实现换脸功能,我们大致可以分为两种:一种是所有功能都通过自己编码来实现,另一种是借助于第三方 API 来实现, ...

  2. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  3. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  4. 100行python代码做一个程序_100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  5. python模拟别人说话的声音_如何用100行Python代码做出魔性声控游戏“八分音符酱”...

    最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩). 这个游戏叫做<不要停!八分音符酱♪>.它是一款来自岛国的恶搞游戏,主角是一 ...

  6. 100行python代码实现五子棋-教程

    五子棋是是一种两人对弈的纯策略型棋类游戏. 五子棋有两种玩法.玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.玩法二:自己形成五子连线就替换对方任意一枚棋子.被 ...

  7. 100行Python代码,快速搭建一个电影展示网站

    学习Python有一段时间了,与其在家无所事事,不如宅家贡献学习两不误.很多人学习 Python都是因为它简单,却功能强大.但是学着学者就从入门到放弃了,主要是没有目标. 比如你想做一个爬虫,或者想写 ...

  8. python100行代码程序-100行python代码,轻松完成贪吃蛇小游戏

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  9. python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源;用 ...

最新文章

  1. SPI总线(一):基本原理篇
  2. 制作一款3D炸弹超人游戏
  3. 【maven】mvn -pl 指定模块
  4. android 输入法的显示和隐藏
  5. 《C#高级编程》中文第七版 读书笔记(目录阐述)
  6. 几种机器学习算法的优缺点
  7. 编程珠玑---第二章 啊哈!算法
  8. Kafka-batch.size属性
  9. 金三银四网络面经之 DNS 详解!
  10. 安装一直初始化_win10开机一直卡在正在准备自动修复怎么办
  11. Flutter学习 — 处理点击
  12. 【OpenGL学习笔记③】——着色器【GLSL Uniform 彩色三角形 变色正方形】
  13. mysql按升序创建索引_MySQL 降序索引 (Descending Indexes)
  14. 『机器学习』入门教程汇总
  15. SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
  16. 百度云使用Docker镜像加速器
  17. Event-B建模(三)——控制桥上汽车,初始模型
  18. 【Java】Map类
  19. 我的世界基岩版种子和java版种子_我的世界:两个基岩版“神种”,55米高的前哨站,裸露的村庄要塞...
  20. 客户关系应该如何管理?

热门文章

  1. Laravel-admin 使用表单动态地保存一个关联模型(源码探究到功能实现)
  2. elementUI使用
  3. Confluence 6 修改警告的阈值和表现
  4. defineProperty AND defineProperties
  5. (一)Rational Rose 2007 下载安装
  6. 请给出linux中查看系统已经登录用户的命令?
  7. CentOs6.5 更新python2.7,以及tab自动补全
  8. 实例讲解如何利用jQuery设置图片居中放大或者缩小
  9. Python 简单网页爬虫学习
  10. Ajax表格控件实现