引言
两个人在一起久了,由于环境因素,行为习惯,无意识的模仿对方,两个人就会越来越像,这个程序就会告诉你,你和你的女神有多像。
也可以测一下自己和自己心里最深处的那个人有多像,科技告诉你,ta是不是你的菜。
实现原理
百度AI
网站:https://ai.baidu.com
点击控制台,登录百度账号,进入控制台,进入人脸识别。
温馨提示:账号与百度搜索、百度贴吧、百度云盘、百度知道、百度文库等产品账号通用。
进入创建应用后,按照里面的步骤,创建一个人脸识别的应用。
查看人脸对比API文档
网站:https://cloud.baidu.com/doc/FACE/s/Lk37c1tpf
向API服务地址使用POST发送请求,必须在URL中带上参数access_token。需要自行获取Access Token,Access Token可通过应用的API Key和Secret Key生成。对官方文档做个更改,更改过后access_token直接输出的就是所需要的access_token的值。
# encoding:utf-8
import requests
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
access_token = response.json()['access_token']
print(access_token)
注意:access_token的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新access_token。
API中获取access_token的代码做了一些修改,使各位阅读者更快的获取到access_token的值
Python代码
可视化窗口代码
注释可以说很全面了。
from tkinter import *
root=Tk() # 实例化一个Tk
root.title ('人脸相似度对比') # 设置窗体的标题栏
root.geometry('400x270+550+300') #设置窗口的大小及初始位置
label_1=Label(root, text='路径1:', font=('宋体',20)) #设置label键,显示文本
label_1.grid(row=0,column=0) #label位置
entry_1=Entry(root,font=('宋体',20)) #单行文本框,输入路径
entry_1.grid(row=0,column=1) #确定文本框位置
label_2=Label(root, text='路径2:', font=('宋体',20))
label_2.grid(row=1,column=0)
entry_2=Entry(root,font=('宋体',20))
entry_2.grid(row=1,column=1)
text = Text(root,width=55, height=6,font=('宋体',10)) #多行文本框,放置注意事项
text.insert("insert","注意事项:"+"\r\n"+"路径格式:D:\pycharm\picture\XXX.jpg"+"\r\n"+"路径1:已知图片*_*_*路径2:需要对比的图片"+"\r\n"+"路径1与路径2图片路径可以互换*_*哈哈哈"+"\r\n"+"路径最好手动打出并且不能出现python内置函数,例如:反斜杠t、反斜杠1、反斜杠User,为什么不能出现反斜杠User我也不知道。")
text.grid(row=2,columnspan=2)
button=Button(root,text='对 比',font=('宋体',20),command =change) #按钮
button.grid(row=3,column=0,sticky=W)
button1=Button(root,text='退 出',font=('宋体',20),command=root.quit)
button1.grid(row=3,column=1,sticky=E)
text = Listbox(root, font=('楷书', 16), width=35, heigh=3) #显示输出结果
# 定位 columnspan 组件横跨的列数
text.grid(row=4, columnspan=2)
root.mainloop() #进入消息循环,必不可少
运行代码后,就构建出这样的窗口。
路径转换代码
def change():
picture_1 = entry_1.get() #从可视化代码的单行文本框获取路径信息
path_1 = picture_1.replace('\\', '/') #将"D:\pycharm\study\ceshi.jpg"中的'\'装换成'/'
picture_2 = entry_2.get()
path_2 = picture_2.replace('\\', '/')
#异常处理,当路径中出现python关键字时可能无法转换
try:
img_base(path_1,path_2)
except:
text.insert(END, '路径格式错误,请按注意事项检查。')
# 文本框滚动
text.see(END)
# 更新
text.update()
源代码
GitHub地址:https://github.com/i7366464/python/blob/face_compare/face_compare3.0.py
百度网盘:链接:https://pan.baidu.com/s/1qBKyI9x1l1kBTdvHr_7eRg
提取码:9gxs
百度网盘中提供普通版本。。
效果
路径格式正确运行结果
路径格式错误输出结果
结语
代码中只进行了一种异常的处理,就是python无法将输入路径转换为python可识别路径的地异常。代码编写的比较理想化,就是路径所指向的图片中一定有人脸,但是事实不一定如此,可能画质较低,无法识别到人脸或者根本没有人脸,这种异常并未进行异常处理。