「肖战发型适配教程」用python换肖战同款帅气发型俘获少女心就在这了
肖战发型适配教程来啦!说到肖战,让人不得不想到他可盐可甜的颜值,肖战的《陈情令》使得他爆红了一把,也有不少人因此成为了肖战的迷妹。的确,从外形上看的话,也算是实打实的帅哥了;那么,长得这么帅,有没有什么秘诀呢?很多人不知道看似随随便便站在那就很吸睛的肖战,不同的发型又给人完全不同的感觉。
今天之后你就不用再去找 老师设计发型了,本篇博文就教你基于 “ 换脸技术” 换肖战几款他常见的发型,快来看看你最适合哪一款叭~~~
目录
1 导入库
2 从图像中找人脸
3 换脸
4 运行结果
5 整体代码
1 导入库
import json
import requests
import simplejson
import base64
2 从图像中找人脸
这里需要调用旷世平台的API
根据官方给的文档,要向指定 中传入以下键值对
# 从图像中找人脸
def find_face(imgpath):# 打印正确调用此方法语句print('finding')# 按照官网指示,将下面字典内容传入下面网址http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'# 传入字典data = {'api_key': 'RXcERmQWM_***********0YLyaSMq', # api_key键值对'api_secret': 'WlKgVszU__*************AQfkrdfc', # api_secret键值对'image_url': imgpath, # 人脸图像本地路径'return_landmark': 1}# 以“读”的形式打开图片files = {'image_file': open(imgpath, 'rb')}# 将字典内容传入上述定义网址得到响应response = requests.post(http_url, data=data, files=files)print(response)# 查看得到的响应内容,以“utf-8”形式解码req_con = response.content.decode('utf-8')print(req_con)# 用simplejson库对json文件解码,方便提取其中的值this_json = simplejson.loads(req_con)# 得到响应内容中脸部数据的值faces = this_json['faces']list0 = faces[0]# 取出五官对应的矩形方框框起来的哪一部分脸部区域rectangle = list0['face_rectangle']print(rectangle)# 返回矩形框选区return rectangle
3 换脸
# 换脸
def merge_face(image_url1, image_url2, image_url, number): # number换脸相似度# 调用find_face方法# image_url1是基准图,随后提取到的另一张图片的脸部区域要对应贴到此图片的脸上来ff1 = find_face(image_url1)# image_url2是提取脸部特征信息的图ff2 = find_face(image_url2)# 以“读”的形式打开该图像f1 = open(image_url1, 'rb')# 用base64库进行编码f1_64 = base64.b64encode(f1.read())# 读取之后要记得关闭f1.close()# 将两幅图的脸部区域的矩形框框起来的部位位置信息提取出来rectangle1 = 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'])# 与f1类似f2 = open(image_url2, 'rb')f2_64 = base64.b64encode(f2.read())f2.close()# 按照官网指示,将下面字典内容传入下面网址url_add = 'https://api-cn.faceplusplus.com/imagepp/v1/mergeface'data = {'api_key': 'RXcERmQWM_*************0YLyaSMq', # api_key键值对'api_secret': 'WlKgVszU__*************fkrdfc', # api_secret键值对'template_base64': f1_64,'template_rectangle': rectangle1,'merge_base64': f2_64,'merge_rectangle': rectangle2,'merge_rate': number # 换脸相似度}# 传入网址得到响应response1 = requests.post(url_add, data=data)req_con1 = response1.content.decode('utf-8') # 用‘utf-8’编码print(req_con1)# 将json格式解码req_dict = json.JSONDecoder().decode(req_con1)result = req_dict['result'] # 得到result值imgdata = base64.b64decode(result)file = open(image_url, 'wb') # 以‘写’的形式打开合成后的图片file.write(imgdata) # 穿纳入合成后的图片数据值file.close() # 关闭
4 运行结果
这里我们就看看潘叔适合肖战的哪款发型吧~
4.1 水冰月发型
4.2 大背头
4.3 覃头
4.4 卷毛发型
4.5 马尾头
大家评论区留言潘叔适合哪款发型叭~
5 整体代码
import json
import requests
import simplejson
import base64# 从图像中找人脸
def find_face(imgpath):print('finding')http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'data = {'api_key': 'RXcERmQWM_**********p0YLyaSMq', 'api_secret': 'WlKgVszU__************AQfkrdfc', 'image_url': imgpath, 'return_landmark': 1}files = {'image_file': open(imgpath, 'rb')}response = requests.post(http_url, data=data, files=files)print(response)req_con = response.content.decode('utf-8')print(req_con)this_json = simplejson.loads(req_con)faces = this_json['faces']list0 = faces[0]rectangle = list0['face_rectangle']print(rectangle)return rectangle# 换脸
def merge_face(image_url1, image_url2, image_url, number): ff1 = find_face(image_url1)ff2 = find_face(image_url2)f1 = open(image_url1, 'rb')f1_64 = base64.b64encode(f1.read())f1.close()rectangle1 = 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'])f2 = open(image_url2, 'rb')f2_64 = base64.b64encode(f2.read())f2.close()url_add = 'https://api-cn.faceplusplus.com/imagepp/v1/mergeface'data = {'api_key': 'RXcERmQWM_*********5p0YLyaSMq', 'api_secret': 'WlKgVszU__*********XAQfkrdfc', 'template_base64': f1_64,'template_rectangle': rectangle1,'merge_base64': f2_64,'merge_rectangle': rectangle2,'merge_rate': number }response1 = requests.post(url_add, data=data)req_con1 = response1.content.decode('utf-8') print(req_con1)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() if __name__ == '__main__':img1 = 'E:/image1.png'img2 = 'E:/image2.png'img = 'E:/image.png'merge_face(img1, img2, img, 100)
「肖战发型适配教程」用python换肖战同款帅气发型俘获少女心就在这了相关推荐
- 「C++小游戏教程」猜数游戏
0. 引言 本章主要讲解如何做一个简易的猜数游戏,分为用户猜数和系统猜数. 前置芝士: 「C++小游戏教程」基本技巧(1)--随机化 1. 用户猜数 系统想好一个在 [1,100][1,100][1, ...
- LeetCode 458. Poor Pigs--智力题「小白鼠试毒」--C++,Python解法
题目地址:Poor Pigs - LeetCode There are 1000 buckets, one and only one of them is poisonous, while the r ...
- 「编程面试题库」,大佬开发的一款小程序~
这是一款好朋友zone7公众号号主开发的小程序--「编程面试题库」.涉及不同语言,不同方向,总有一个适合你!值得体验!(以下为作者的原文) 介绍一下这款小程序 咱们这款小程序记录了当前主流语言的一些常 ...
- Linux后台开发系列 之「03.vim 基础教程」
vim 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! vim 简介 vim 被称为编辑器之神! 在 Linux 下我们经常使用 vim 来写程序,学会使用 ...
- 如何在ps添加箭头_「PS精选案例教程」制作斑驳生锈字体
这个教程会教您如何设计发光斑驳的字体特效,会教您运用PS滤镜和纹理图片,同时也诠释了如何运用笔刷和图层样式给最终的字体效果增添光感. 来,先看看最终效果! 第一步: 创建一个1024*768的新文档. ...
- 快加入「我的最爱」吧 Python 开发者不容错过的30 个Github 开源专案(下)
愈来愈多人使用Python 来进行不同的功能,例如进行机器学习等.如果想透过Python 使用这些功能,可以在GitHub 上找开源专题.以下介绍在GitHub 上大受欢迎的Python 开源专题. ...
- rj45带滤波器20/05的数字是什么意思_「手机维修自学教程」认识手机射频电路中的滤波器 维修技巧分析...
今天跟大家聊聊手机中的滤波器. 昨天放了一个话题给大家交流,射频电路中的滤波器短接问题?有不少朋友也在下面留言了.滤波器何须神圣?有什么作用呢?维修中如何处理呢? 我们先来普及一下滤波器的概念. 滤波 ...
- iphone开机白苹果_「手机维修自学教程」苹果6PLUS的DFU模式故障维修技巧思路决定速度...
今天分享一个苹果6PLUS的DFU模式故障维修. 我们先来认识一下苹果手机的DFU模式. DFU的全称是Device Firmware Upgrade,即iPhone固件的强制升降级模式.实际意思就是 ...
- 「C++小游戏教程」基本技巧(1)——随机化
0. 引言 小游戏中时常要用到随机数,今天就来谈谈这个所谓的"随机". 1. 随机数 rand() 我们要使用随机数(严格意义上是伪随机)的话,C++ 中就有 rand() 来提供 ...
最新文章
- 本科计算机专业考北大软微,2022北京大学软微学院计算机智能科技考研必看经验指导(含复试解析)...
- 程序计算机限制无法打开,由于一个软件限制策略的阻止,windows无法打开此程序...解决方案参考...
- 使用XIB实现嵌套自定义XIB视图
- 100阶乘末尾有多少个零
- 存储管理实验linux,07-存储管理器实验
- 本周ASP.NET英文技术文章推荐[03/18 - 03/24]
- [高级操作系统课程] 各大名校 ppt,pdf 课件整理(course materials)
- excel提取文字拼音首字母
- android 文件下载和保存
- 计算机系统概论(原书第2版)部分课后习题答案(第三章)
- 均衡发展计算机教室解说词,均衡发展图书室解说词|小学图书室解说词开场白范文推荐...
- Task already scheduled or cancelled(用Timer,TimeTask实现定时器功能)
- c#实现短信发送程序
- 虚拟化:gva、gpa、hva、hpa转化
- 联想笔记本无线网络无法使用(无线开关已打开,但搜不到无线网络)
- 2019-11-14
- 我的电脑开机后桌面上没有图标
- c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序
- (兼容正点原子引脚)OV7670 FIFO 30W摄像头介绍(二) --- 寄存器图示说明
- 目标码格式解析之DSP目标码Cinit段
热门文章
- 什么是GMS、CDMA、GPRS、EDGE、WCDMA
- 数学简史:数学是一门非常重要的学科,它在各个领域都有着广泛的应用。从古代到现代,数学一直在不断发展和演变,为我们提供了无尽的智慧和启示。
- Django2.1遇到 app_label and isn't in an application in INSTALLED_APPS 错误
- 自考本科 04741 计算机网络原理 2022年10月真题以及答案(自己做的,仅供参考)
- 安利一款功能强大,简单好用的录屏软件!
- spring5源码阅读(五)Post Processors类型及作用详解
- AXURE教程:散点图
- NAXX Demo4_GZQ_02
- 【疑难总结】行内块元素文字和图片对齐问题
- 用STM32F103使用OLED屏实现贪吃蛇游戏