人脸比对智能程序的开发实践

2020-05-06 09:07傅骏傅馨竹吴高静熊子淇龙辉阳
关键词:二次开发百度

傅骏 傅馨竹 吴高静 熊子淇 龙辉阳

【摘  要】在百度平臺创建应用,获得API Key和Secret Key。选用HTTP访问方式,获得人脸比对的Access_token。利用Python代码向URL发送请求,获取了“人脸比对”结果,通过数据抓取显示了比对结果。利用Tkinter设计的GUI界面,用户只需要选择两张人脸图片,可以立即获得比对结果。

【Abstract】Creating an application on Baidu platform and getting the API Key and Secret Key. The Access_token of face comparison is obtained by using HTTP access method. Using Python code to send a request to the URL, the "face comparison" result is obtained, and the comparison result is displayed by data capture. Using the GUI interface designed by Tkinter, the user only needs to select two images of faces, and the comparison results can be obtained immediately.

【关键词】Python;Tkinter;百度;AI;二次开发

1 引言

人脸识别作为一种“以貌取人”的生物智能识别技术,与其他生物识别技术相比,具有易获取、易识别、准确率高、直观性好等优点。人脸比对在人们的生活中应用广泛。通过比对两张图片中的人脸相似度并返回两两比对的得分,判断两张脸是否是同一人的可能性大小,人脸比对这一技术将辅助人们更加快捷有效地完成身份验证。目前,人脸对比检测技术主要包括:基于肤色、基于特征、基于模板匹配和基于统计学习。项目组采用百度AI的人脸比对功能,采用Python进行数据抓取制作了GUI界面方便用户使用。

2 访问流程

百度提供的人脸识别集合了人脸检测、人脸比对、人脸搜索等技术,广泛应用于人脸实名认证、城市公共交通、手机刷脸登陆、人脸采集等场景,无需人工干预,机器自动搜索人脸特征并完成分析,全面提升识别效率。其中,人脸比对功能根据用户选择的两张照片自动进行相似度分析,得出可能性大小,判断是否为同一人。

百度的人脸比对采用HTTP调用方式。百度AIP开放平台使用OAuth 2.0授权调用开放向API,调用API时必须在URL中带上Access_token参数[1]。

2.1 获取Access_token

获取Access_token的流程是:创建应用,获取API Key与Secret Key,向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(优先采用POST),并在URL中带上参数:grant_type=client_credentials、client_id=API Key、client_secret=Secret Key。

获取Access_token的Python代码是[2],

response = requests.get(host)

token=response.json()

Access_token=token['access_token']

返回的Expires_in表示Access Token的有效期(单位:秒)。

2.2 发送请求

人脸比对的请求URL是https;//aip.baiduce.com/rest/2.0/face/v1/merge。获得人脸比对的部分python代码是:

import tkinter.filedialog

global labejieguo

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

3 程序开发的关键技术

设计任务是:利用Tkinter技术开发GUI界面,用百度AI提供的技术,实现:人脸对比的技术。用户进入界面后,点击左侧图片、右侧图片选择要对比的图片,选择完毕后再单击“是同一人吗”,结果就显示在了窗体上[3]。

3.1 Tkinter界面设计

在界面上设置了5个标签、3个按钮等控件。5个标签分别显示:左侧图片、左侧图片的路径、右侧图片、右侧图片的路径、人脸对比的结果。3个按钮分别为“左侧图片”“右侧图片”“是同一人吗”。采用place函数设置各个控件的位置,以下代码分别实现标签和按钮的位置:

Btn人脸比对=Button(root,text='是同一人吗',bg='black',fg='white',command=人脸比对)

Btn人脸比对.place(x=350,y=340)

label=Label(root,text=str(picc1),width=30,height=1,bg='black',fg='white')

label.place(x=75,y=315)

3.2 “左侧图片”代码

“左侧图片”选择图像并在左侧标签上显示出来。利用askopenfilename函数打开“打开”对话框,在标签上显示使用命令image=tkImage1。在应用之前,要先import导入相关库。

import tkinter.filedialog

from tkinter.filedialog import askopenfilename

picc1=askopenfilename(initialdir= 'D:',filetypes=(("jpg图片","*.jpg"),("全部文件","*.*")))

pilImage = Image.open(picc1)

tkImage1 = ImageTk.PhotoImage(image=pilImage)

labe1 =Label(root,image=tkImage1,width=ww,height=hh)

3.3 “是同一人吗”按钮功能

“是同一人吗”后台调用百度开放功能进行人脸比对。

百度要求的图片导入格式是Base64。图片的Base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。可以首先得到图片的二进制,然后用Base64格式编码即可。读取图片,将图片转化为64编码的代码为base64.b64encode(open(f, 'rb').read())。

采用def函数功能将按钮与百度人脸对比的结果进行定义[4]。

import base64

from aip import AipFace

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

result = client.match([{ 'image': (base64.b64encode(open(picc1, 'rb').read())).decode(),

'image_type': 'BASE64','face_type':'LIVE' },{ 'image': (base64.b64encode(open(picc2, 'rb').read())).decode(),'image_type': 'BASE64'  }])

在運行完人脸对比的代码后,百度AI提供了多个信息,需要对result结果进行数据抓取后显示出来。抓取后,根据其中的score分别设置不同的得分段,给出结果,分别有“就是同一人”“很可能是同一人”“不是同一人”。如果提供的照片不是人脸,则给出提示要求用户重新选择照片。

程序运行界面如图1所示。

4 结语

采用Python语言,利用HTTP方式访问人脸识别,获取Access_token,实现了“人脸比对”功能并进行数据抓取。用Tkinter设计了GUI界面,用户选择图片后,可以获得比对的结果。

人工智能技术方兴未艾,百度为用户使用人工智能技术提供了多种技术和平台,助力人工智能技术走进各行各业。通过此次实践,项目组掌握了人脸比对的基本技术,实现了精准的“无感式”识别,为企业定制化人脸应用程序奠定了基础。

【参考文献】

【1】孟令长.基于云服务器的软件发布平台的设计与实现[D].长沙:湖南大学,2017.

【2】包艳秋.基于人工智能的交互艺术设计研究[D].杭州:浙江理工大学,2019.

【3】傅骏,傅馨竹,郝文源,等.基于Tkinter的百度AI图像识别技术二次开发实践[J].科技风,2019(09):69+75.

【4】刘慧娟,赵东明.基于人脸识别技术的智慧营业厅系统研究与应用[J].数字技术与应用,2019(02):89-90.

猜你喜欢
二次开发百度
Robust adaptive UKF based on SVR for inertial based integrated navigation
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
百度医生
百度“放卫星”,有没有可能?
基于Pro/E二次开发的推土铲参数化模块开发