社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

MilFun • 4 年前 • 238 次点击  
阅读 18

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

在这里插入图片描述

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

前期预备

百度AI开放平台

账号注册

用你的百度账号登陆ai.baidu.com,百度AI开放平台。

然后创建一个人脸识别应用,

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

因为每个账号的调用次数都是有限的,只能免费500次,且玩且珍惜。所以你们还是自己申请的好。

读接口开发文档...

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

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

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

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

OK,看完了文档,我们来捋一下思路

思路

开始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”。

↓ ↓ ↓ 加小哥哥一起玩耍吧 ↓ ↓ ↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48435
 
238 次点击