百度ai人脸融合

import tkinter as tk
from tkinter import *
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import base64
import requests
import os

'''
步骤:
1.创建所需要的窗口和按钮
2.对两张图片进行b64处理
3.与百度人脸融合接口交互
4.返回的数据处理显示到相应的位置上
入口编写
'''
#百度数据接口准备,数据初始化


facesImg1s = ''
facesImg2s = ''


apiKey = '自己申请的'
secretKey = '自己申请的'
def getToken():
    getTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+apiKey+'&client_secret='+secretKey
    response = requests.get(getTokenUrl)
    data = response.json()
    token = data.get('access_token')
    return token


def resize(w,h,newW,newH,pilPicture):
    f1 = 1.0 * newW / w
    f2 = 1.0 * newH / h
    factor = min([f1, f2])
    width = int(w * factor)
    height = int(h * factor)
    return pilPicture.resize((width, height), Image.ANTIALIAS)

def showPhoto(route,xPos,yPos):
    image = Image.open(route)
    w, h = image.size
    if w == 260 and h == 260:
        resized = image
    else:
        resized = resize(w,h,270,270,image)
    photo = ImageTk.PhotoImage(resized)
    photoLabel = tk.Label(window,image=photo,width=270,height=270)
    photoLabel.place(x=xPos,y=yPos)
    window.mainloop()
#设置选择图片方法
def setPhoto(number):
    global facesImg1s
    global facesImg2s
    tmpImg = filedialog.askopenfilename(initialdir="./images/getImages")
    if number == 1:
        facesImg1s = tmpImg
        showPhoto(facesImg1s,0,0)
    if number == 2:
        facesImg2s = tmpImg
        showPhoto(facesImg2s,300,0)  
#两张照片的融合处理
def twoPhotosFuse(facesImg1s,facesImg2s):
    #判断2张照片是否都有否则提示
    if len(facesImg1s)== 0 or len(facesImg2s) == 0:
        messagebox.showwarning(title='请注意',message='请选择2张图片') 
    else:
        #与百度进行交互处理    
        access_token = getToken()
        request_url = 'https://aip.baidubce.com/rest/2.0/face/v1/merge'
        with open(facesImg1s,'rb') as f1:
            image1 = f1.read()
        b64Image1 = base64.b64encode(image1)
        with open(facesImg2s,'rb') as f2:
            image2 = f2.read()
        b64Image2 = base64.b64encode(image2)
        IMAGE_TYPE = 'BASE64'
        params = "{\"image_template\":{\"image\":\""+str(b64Image1,'utf-8')+"\",\"image_type\":\"BASE64\",\"quality_control\":\"NONE\"},\"image_target\":{\"image\":\""+str(b64Image2,'utf-8')+"\",\"image_type\":\"BASE64\",\"quality_control\":\"NONE\"}}"
        request_url = request_url+"?access_token="+access_token
        headers = {'content-type': 'application/json'}
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            data = response.json()
            tmpImg = base64.b64decode(data['result']['merge_image'])   
            #写入本地
            #根据文件目录创建一个名字
            nu = len(os.listdir('./images/createImages'))
            with open('./images/createImages/%s.jpg'%nu,'wb')as newF:
                 newF.write(tmpImg)
            showPhoto("./images/createImages/%s.jpg"%nu,320,320)     
#方法分发器
def chooseMethod(type):  
    #选择第一张照片
    if type == 'chooseOnePhtoto':
        setPhoto(1)
    #选择第二张照片
    elif type ==  'chooseTwoPhtoto':  
        setPhoto(2)
    #人脸融合操作
    elif type ==  'twoPhotosFuse':  
        twoPhotosFuse(facesImg1s,facesImg2s)     
window = tk.Tk()
window.geometry('1000x660')
window.resizable(0,0)
window.title('人脸操作入口')
bgImg = ImageTk.PhotoImage(file="./images/baseImages/bg1.jpg")
bg = tk.Label(window,width=1000,height=600,image=bgImg)
bg.pack()
#加载选择按钮的图片
faceImage = ImageTk.PhotoImage(file='./images/baseImages/face1.png')
#添加选择位置图片
face1Button = tk.Button(window,image=faceImage,width=192,height=63,command=lambda:chooseMethod('chooseOnePhtoto'))
face1Button.place(x=750,y=100)
#加载选择按钮的图片
face2Image = ImageTk.PhotoImage(file='./images/baseImages/face2.png')
#添加选择位置图片
face2Button = tk.Button(window,image=face2Image,width=192,height=63,command=lambda:chooseMethod('chooseTwoPhtoto'))
face2Button.place(x=750,y=180)
#加载选择按钮的图片
selectImg = ImageTk.PhotoImage(file='./images/baseImages/2.png')
select = tk.Button(window,image=selectImg,width=192,height=63,command=lambda:chooseMethod('twoPhotosFuse'))
select.place(x=750,y=260)
window.mainloop()











 效果:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gjanuary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值