用python调用百度api,把小岳岳的脸和刘亦菲的脸融合!


调用百度api实现人脸融合,搜了一下,好像网上少有这个例子,所以就发个自己的。之前也是用过Face++的,发现效果好像差一点,但是没有次数限制;百度AI这个功能每天调用500次,足够学习用了。
技术文档:https://ai.baidu.com/docs#/Face-Merge/top 

import requests
import json
import base64
import os
from tkinter import filedialog

我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、
数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取
 
#get_token,access_token一个月更新一次,未免过期,每次都更新一次
def get_token():
    url='https://aip.baidubce.com/oauth/2.0/token'  #申请token的URL
    data={}
    data['grant_type']='client_credentials'         #这个必须有
    data['client_id']='*****'    #百度该应用的APP—ID
    data['client_secret']='*****'    #相应的secret
     
    response=requests.post(url, data)
    content=response.content.decode('utf-8')
    content=json.loads(content)   
     
    #print('您的access_token为 : \r',content['access_token'])
    return content['access_token']
 
def base666(image):         #这个函数开始命名为base64,结果报错 has no attribute 'b64encode'
    f1 = open(image, 'rb')
    f1_64 = base64.b64encode(f1.read())
    f1.close()
    f1_64=f1_64.decode()
    return f1_64
 
def faceadd(face1,face2,image):
    url='https://aip.baidubce.com/rest/2.0/face/v1/merge'+"?access_token=" + get_token()
    data={"image_template":{"image":base666(face1),"image_type":'BASE64',},"image_target":{"image":base666(face2),"image_type":"BASE64",}}
    data=json.dumps(data)  
 
    headers={'Content-Type':"application/json"}
    response=requests.post(url, data,headers=headers)
    req_con1 = response.content.decode('utf-8')
     
    content=eval(req_con1)
    result = content['result']['merge_image']
    imgdata = base64.b64decode(result)
    with open(image, 'wb') as fp:
        fp.write(imgdata)
        fp.close()
     
if __name__=='__main__':
    image1 = filedialog.askopenfilename()
    image2 = filedialog.askopenfilename()
    image=os.path.dirname(image1)+'/Faceadd.jpg'
    faceadd(image1,image2,image)

效果图: 

用python调用百度api,把小岳岳的脸和刘亦菲的脸融合!_第1张图片

你可能感兴趣的:(程序员,编程,python)