用Python玩人脸融合,想知道你将来孩子的长相?(附代码)

在这里插入图片描述

此次花了点时间,将百度智能云里面的人脸识别功能与python结合,进行了一场实验。结果仍是蛮有成就感的,过程也挺简单,不会复杂,说不定,你就能融合出你孩子的长相了耶~ 下面咱们一块儿敲起键盘吧!python

前期预备

百度AI开放平台json

帐号注册

用你的百度帐号登录ai.baidu.com,百度AI开放平台。app

而后建立一我的脸识别应用, 函数

你就会获得API Key 和 Secret Key,这咱们等会代码里要用到,

由于每一个帐号的调用次数都是有限的,只能免费500次,且玩且珍惜。因此大家仍是本身申请的好。 post

读接口开发文档...

文档地址:ai.baidu.com/docs#/Face-…测试

上面为注意事项,就是post要带header,图片要是base64,还有请求地址等说明,文档仍是要仔细看的,等下就会少点错误。编码

上图是说明你要post过去的数据,好比要template模板图片和target目标文件两张图片,你也能够设置图片类型,图片质量等url

上图就是说你post过去后,会返回哪些东西的说明。spa

OK,看完了文档,咱们来捋一下思路3d

思路

开始Coding...

一点点来开发,不要急于求成:

导入模块

基于经验,咱们确定要用到requests模块,json模块也要用,而后就是base64模块,由于咱们要处理图片。这些模块咱们都有了,因此直接导入:
复制代码
import requests ,json,base64
复制代码

获取Token

Token就是令牌,你要用接口须要取得它的承认,就是咱们要用到以前申请的那些key来获取令牌:
复制代码
def getToken():
	token = '24.4e27ea4786f90eb77f23c4d66a781f13.2592000.1575258466.282335-17676610'
	if token == '':
		client_id = 'hTN22uEIq9bQcBYL1tXvxTjL'
		client_secret = 'YiZ5PDW8Hoxka022loGdpoenNX53nCmq'
		host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id+'&client_secret=' + client_secret
		response = requests.get(host)
		token = response.json()["access_token"]
	return token
复制代码

获取图片Base64

base64是图片的一种格式,因此要先打开图片,而后转成base64编码才能用
复制代码
def readPic(name):
   with open("D:\\用户目录\\Desktop\\face\\"+name, 'rb') as f:
       base64_data = base64.b64encode(f.read())
       s = base64_data.decode()
       return s
复制代码

保存base到本机

由于文档里面告诉咱们,返回的图片是base64,因此这里咱们还要把base64转成你能够看到的图片。因此:

def downPic(data):
   imagedata = base64.b64decode(data)
   file = open('D:\\用户目录\\Desktop\\face\\done.jpg',"wb")
   file.write(imagedata)
复制代码

注意:代码文件也放在这个文件夹里面。

图片融合

接下来就是最主要的功能了,
复制代码
def merge(template,target):
   token = getToken()
   url = 'https://aip.baidubce.com/rest/2.0/face/v1/merge'
   request_url = url + '?access_token=' + token
   params={
   	"image_template":{
   		"image":template,
   		"image_type":"BASE64",
   		"quality_control":"NORMAL"
   	},
   	"image_target":{
   		"image":target,
   		"image_type":"BASE64",
   		"quality_control":"NORMAL"
   	},
   	"merge_degree":"HIGH"
   }
   params=json.dumps(params)
   headers = {'content-type': 'application/json'}
   result = requests.post(request_url, data=params, headers=headers).json()
   if result['error_code'] == 0:
   	res = result["result"]["merge_image"]
   	downPic(res)
   	print('Done !')
   else:
   	print(str(result['error_code'])+result['error_msg'])
复制代码

功能测试

在开始调试时,要一点点来测试,否则你那500次调用次数根本不够你用,等你代码写好了,对不起,你的次数用完了,以下图,你还玩个蛋蛋呀!

#功能测试
#测试获取Token
print(getToken())

#测试读取图片base64
print(readPic('1.jpg'))
print(readPic('2.png'))

#测试下载图片函数
img = readPic('1.jpg')
downPic(img)
复制代码

下面是我电脑文件夹,注意图片的格式

而后写几行代码,而后运行一下

#主程序
img1 =	readPic('2.jpeg')
img2 =	readPic('1.jpg')
merge(img1,img2)
复制代码

出现Done!说明代码成功了!咱们打开文件夹看看有没有“done.jpg”这张图

python完整代码

请发送【源码】,今天文件名为“face.zip”。

↓ ↓ ↓ 加小哥哥一块儿玩耍吧 ↓ ↓ ↓

相关文章
相关标签/搜索