基于百度AI的垃圾分类系统
基于百度AI提供的接口,使用通用物体和场景识别API,根据接口返回图片内1个或多个物体的名称,获取百科信息,实现图像或视频内容分析、拍照识图等应用场景。
1.1 总体设计
本部分包括系统整体结构、系统流程和PC端系统流程。
1.1.1 系统整体结构
系统整体结构如图1-1所示。
1.1.2 系统流程
系统流程如图2所示。
1.1.3 PC端系统流程
PC端系统流程如图1-3所示。
1.2 运行环境
本部分包括Python环境、微信开发者工具和百度AI。
1.2.1 Python环境
需要Python 3.6及以上配置,在Windows环境下载Anaconda完成Python所需的配置,下载地址为https://www.anaconda.com/,也可下载虚拟机在Linux环境下运行代码。
1.2.2 微信开发者工具
下载地址为https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html。
创建项目:扫码登录微信小程序Web开发工具,填写APPID、项目名称、本地开发目录。
1.2.3 百度AI
相关步骤如下:
(1)网站地址为https://console.bce.baidu.com/? _=1535519624081&fromai=1#/aip/overview。
(2)选择产品服务中的通用物体与场景识别,单击创建应用。
(3)选择通用物体与场景识别及语音识别,创建完成。
(4)创建后选择应用,里面有APPID、API Key、Secret Key,这三个参数会在API时调用。
(5)使用创建应用所分配到的APPID、API Key及Secret Key,进行Access Token的生成。
1.3 模块实现
本部分包括2个模块:PC端垃圾分类和移动端微信小程序,下面分别给出各模块的功能介绍及相关代码。
1.3.1 PC端垃圾分类
PC端共分为获取access_token、载入图片函数、百度AI调用函数、获得html、main函数和GUI。
1.获取access_token
根据百度AI开放平台的技术文档,调用AI相关的接口向API服务接口使用POST发送请求,必须在URL中带上参数access_token,相关代码如下:
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:
print(response.json())
获取的参数如图16-4中画线部分所示。
图16-4 获取参数
2.载入图片函数
垃圾分类图像识别的图片来自本地文件,而百度AI要求识别的图片用64位编码,所以导入win32ui和base64库。win32ui库用于生成文件对话框;base64库用于对图片文件进行编码。
3.百度AI调用函数
根据百度AI的技术文件修改而成,通过request库和access_token参数对接口进行请求,会返回一个列表,取出其中准确度最高的第一个字典,把root和keyword两个键值存为一个新的列表keyword并返回,如图16-5所示。
图16-5 列表
4.get_html函数
在网站https://lajifenleiapp.com/中获取其网页源码。
5.main函数
相关步骤如下:
1)根据API返回的内容爬取垃圾分类内容
借助beautifulsoup库,对网页https://lajifenleiapp.com/sk/和查询的关键字进行爬取,使用soup.find函数查找标签为div class=“col-md-9 col-xs-12” /div的节点,如果节点存在,则代表没有关键字相匹配的内容;如果soup.find的结果是None,则说明有该垃圾的相关信息,用string获得内容。
2)根据输入的关键字进行垃圾分类
输入关键字,爬取垃圾分类相应结果,如果未搜索到,则返回“没有与此物品名称匹配的词条”。
6.GUI
#此部分为GUI界面设计class Classification(object):def init(self):
#创建主窗口用于容纳其他组件
self.root =tkinter.Tk()
#给主窗口设置标题内容self.root.title("智能垃圾分类")
#创建一个输入框,并设置尺寸
self.trash input= tkinter.Entry(self.root,width=30,text="请输人垃圾的名称"self.trash input.grid(row=0,column=1)
#创建一个回显列表
self.display info =tkinter.Listbox(self.root, width=50,height = 10)self.display info.grid(row=10,columnspan=8,sticky= tkinter.E)
#创建查询按钮self,result button1 = tkinter.Button(self.root,comand = self.waste sortingl"文字查询")text =
self.result button1.grid(row=0,column=0)
self.result button2=tkinter.Button(self.root,command =self.waste sorting2text="图片查询")
self.result button2.grid(row=1,column=0)
#完成布局