论文部分内容阅读
一、思路
在本报第15期《AppInvenor开发——拍照识花》中我们已经实现了手机的植物识别App,那么很自然我们就希望这个App能够进行动物识别和其他的图像智能识别,这类AI应用百度已经开发出很多种类,你可以去百度智能云查看支持文档,这里我们在拍照识花的基础上再添加3种:动物识别、菜品识别、果蔬识别,通过本文你有其他需求就可以自行添加其他功能了(图1)。
二、准备工作
1制作智能植物识别时,我们已经申请了Apikey和Secretkey,可以直接使用,如果还没有申请Apikey和Secretkey,则需要去百度智能云申请,再来继续制作App。
2 GET请求获取Access_token令牌
(1)请求头格式(Header)如下:
(2)请求网址格式为(中括号中的变量用你的Apikey和Scretkey替换):
https:∥aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的Apikey】&client_secret=【你的Scretkey】
3.POST请求获取AI数据(中括号中的变量用access_token令牌口令替换):
(1)植物识别
https:∥aip.baidubce.com/rest/2.0/image-classify/v1/plant?access_token=【access_token令牌口令】
(2)动物识别
https:∥aip.baidubce.com/rest/2.0/irnage-classify/v1/anirnal?access_token=【access_token令牌口令】
(3)果蔬识别
https:∥aip.baidubce.com/rest/2.0/irnageclassify/v1/classify/ingredient? access_token=【access_token令牌口令】
(4)菜品識别
https:∥aip.baidubce.com/rest/2.0/image-classify/v2/dish?access_token=【access_token令牌口令】
三、组件设计
本程序使用wxbit在线版(app.wxbit.com)(图2)。
四、程序设计
(1)变量和初始化
变量Apikey和Secretkey存储两个KEY,需要你自行申请。
初始化程序利用Apikey和Secretkey,通过HTTP客户端1GET请求的实时申请,得到JSON文本,然后将返回的JSON保存在列表Access_token_list中,再提取令牌值保存在变量Access_token中。
列表变量returnplant、plantlist、highscoreplant和baike分别存储通过HTTP客户端2POST请求返回的JSON文本、种类列表、最高置信度的种类列表和相关的百科简介。
变量image存储待识别照片(图3)。
(2)GET请求文本处理(HTTP客户端1)
初始化GET请求成功后,从获得的JSON文本中提取令牌口令,保存在变量Access_token中备用(图4)。
(3)选择识别种类
这就是本例新添加的部分了,种类有4种:植物识别,动物识别,果蔬食材,菜品识别。注意这4种是有顺序的(图5)。 这里需要一个图像处理插件TaifunImage.aix,可以百度搜索在网上下载(图6)。
(4)选择待识别图片
点击选择要识别的图片,可以事先拍摄好,然后导入图像组件中,调整大小后,显示出来,同时清空上一次识别的所有数据(图7)。
(5)拍照植物图片
通过手机的拍照功能,把待识别种类的照片直接拍照,注意一定尽量的清晰,对比度适中,否则识别可能会出错,或是识别不准确。拍摄完成后,处理图片过程与选择图片类似(图8)。
(6)开始识别
先将图片路径中的无用字符清除,作为HTTP客户端2的POST请求地址。请求地址需要符合格式要求,要有请求头和令牌口令才能请求成功。
POST请求网址前文已经介绍过不再详述。
POST请求时,必须将待识别图片转换成BASE64编码,存储在HTTP客户端创建的列表中,然后通过HTTP客户端2获取这些数据后,进行处理和提取,得到我们想要的数据。
BASE64编码是数据传输中常用的编码,本报今年第4、5期有相关文章,可以参考。SirnpleImage.aix组件是BASE64编码插件,需要去网上下载,导入后即可使用。也就是说,POST请求数据时,是按照BASE64编码请求的(图9)。
(7)POST請求获得文本(HTTP客户端2)
这部分是功能升级的主要更新部分,如果请求成功(响应代码为200),返回参数如表(3个层级)(图10)。
将返回的数组解码为JSON文本,保存在列表变量retumplant中。然后将识别结果存储在列表plantlist中,它包括所有置信度的植物信息,即识别的种类可能很多,但置信度(也可以理解为可信度)不同,其值从高到低排列,我们只取置信度最高的一项,存储在列表highscoreplant中。并从中提取植物的名字和置信度值,在文本中显示出来。
在列表highscoreplant中还有相关百科知识,只是列表维度太高,提取时稍有难度。百科简介显示出来,从中也能学到很多相关知识(图11)。
五、调试
每增加一个种类,就需要测试一遍,正确以后再进行下一个种类的代码,以保证每一步的正确性。最后完善程序设计和uI设计。本例程序只在植物识别的基础上添加了3个种类,改动不多。主要难点在于处理数据列表时,由于种类的增加更复杂了。检索数据时,需要一步步测试,才能了解数组(列表或字典)的意义。
百度AI可以添加的项目还有很多,比如货币、车辆、红酒、地标、Logo等,可以根据自己的兴趣添加。参考资料可以在百度智能云申请Apikey时,查看相关说明文档(图12)。
相关源代码和素材均在百度网盘,下载链接请添加微信公众号壹零社,如有问题也可以和壹零社小助理联系。