准备工作
这个项目调用的是百度AI开放平台照片动漫化接口,点击链接,注册并登录,选择“开放能力--图像技术--图像特效--人像动漫化”,点击立即使用,之后按提示操作即可获得API和password,个人用户可免费调用500次。
用到的包
import tkinter as tk
import tkinter.messagebox
from tkinter.filedialog import askopenfilename
import requests
import base64
获取照片路径
def selectPath():
path_ = askopenfilename()
path.set(path_)
调用接口
def get_access_token():
url = 'https://aip.baidubce.com/oauth/2.0/token'
data = {
'grant_type':'client_credentials',
'client_id':Api.get(),
'client_secret':Password.get()
}
res = requests.post(url,data = data,headers = headers)
res = res.json()
access_token = res['access_token']
return access_token
def img_process():
try:
img_before = path.get()
img_after = img_before.split('.')
img_after = img_after[0] + '_1.' + img_after[-1]
request_url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
file = open(img_before,'rb')
origin_img = base64.b64encode(file.read())
except:
tk.messagebox.showerror('错误','请选择照片再执行!')
return
try:
data = {
'access_token':get_access_token(),
'image':origin_img,
'others':''
}
except:
tk.messagebox.showerror('错误','Api可能已经失效或网络未连接!')
return
try:
res = requests.post(request_url,data = data,headers = headers)
except:
tk.messagebox.showerror('错误','请检查网络连接是否正常')
return
if res.status_code == 200:
try:
res = res.json()
f = open(img_after,'wb')
after_img = res['image']
after_img = base64.b64decode(after_img)
f.write(after_img)
f.close()
tk.messagebox.showinfo('成功!','照片已经动漫化')
except Exception as e:
return
else:
tk.messagebox.showerror('错误','Api可能已经失效!')
return
完整代码
import tkinter as tk
import tkinter.messagebox
from tkinter.filedialog import askopenfilename
import requests
import base64
window = tk.Tk()
window.title('照片动漫化')
window.geometry('250x200')
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
def selectPath():
path_ = askopenfilename()
path.set(path_)
def get_access_token():
url = 'https://aip.baidubce.com/oauth/2.0/token'
data = {
'grant_type':'client_credentials',
'client_id':Api.get(),
'client_secret':Password.get()
}
res = requests.post(url,data = data,headers = headers)
res = res.json()
access_token = res['access_token']
return access_token
def img_process():
try:
img_before = path.get()
img_after = img_before.split('.')
img_after = img_after[0] + '_1.' + img_after[-1]
request_url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
file = open(img_before,'rb')
origin_img = base64.b64encode(file.read())
except:
tk.messagebox.showerror('错误','请选择照片再执行!')
return
try:
data = {
'access_token':get_access_token(),
'image':origin_img,
'others':''
}
except:
tk.messagebox.showerror('错误','Api可能已经失效或网络未连接!')
return
try:
res = requests.post(request_url,data = data,headers = headers)
except:
tk.messagebox.showerror('错误','请检查网络连接是否正常')
return
if res.status_code == 200:
try:
res = res.json()
f = open(img_after,'wb')
after_img = res['image']
after_img = base64.b64decode(after_img)
f.write(after_img)
f.close()
tk.messagebox.showinfo('成功!','照片已经动漫化')
except Exception as e:
return
else:
tk.messagebox.showerror('错误','Api可能已经失效!')
return
path = tk.StringVar()
entry_1 = tk.Entry(window,textvariable = path).place(x = 80,y = 90)
button_1 = tk.Button(window,text = '选择照片',command = selectPath)
button_1.place(x = 10,y = 90,height = 20)
Api = tk.StringVar()
entry_2 = tk.Entry(window,textvariable = Api,show = '*').place(x = 80,y = 30)
tk.Label(window,text = 'Api :').place(x = 30,y = 30,height = 20)
Password = tk.StringVar()
entry_3 = tk.Entry(window,textvariable = Password,show = '*').place(x = 80,y = 60)
tk.Label(window,text = 'Password:').place(x = 10,y = 60,height = 20)
button_2 = tk.Button(window,text = '开始执行',command = img_process)
button_2.place(x = 75,y = 130,height = 50,width = 100)
if __name__ == '__main__':
window.mainloop()
项目的打包
cmd下,切换到py文件保存目录,然后参考以下用法: pyinstaller -Fw xxx.py ps:建议在虚拟环境下打包,用到什么库就安装什么,不然打包出来体积会非常大