APPInvenor安卓应用开发之《AI图像识别》
Posted 钥匙编程入门
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APPInvenor安卓应用开发之《AI图像识别》相关的知识,希望对你有一定的参考价值。
APPInvenor安卓应用开发之《AI图像识别》
本程序使用wxbit在线版(app.wxbit.com)。
一、思路
由之前做的植物识别,就想到了动物识别,又想到了其它的智能识别,应该有很多种类,大家可以去百度智能云查看支持文档,这里我们只添加3种:动物识别、菜品识别、果蔬识别,其它的大家可以自行研究。
那么添加的识别种类需要什么数据呢?
二、准备工作
1、制作智能植物识别时,我们已经申请了apiKey和secretkey,可以直接使用,如果没有申请apiKey和secretkey,则需要去百度智能云申请,再继来续制作APP。
2、GET请求获取Access_token令牌
(1)请求头格式如下:
(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/image-classify/v1/animal?access_token=【access_token令牌口令】
(3)果蔬识别:
https://aip.baidubce.com/rest/2.0/image-classify/v1/classify/ingredient?access_token=【access_token令牌口令】
(4)菜品识别:
https://aip.baidubce.com/rest/2.0/image-classify/v2/dish?access_token=【access_token令牌口令】
三、组件设计
组件 |
所属面板 |
命名 |
作用 |
属性 |
Screen1 |
Screen1 |
主屏幕 |
标题:AI图像识别 是否允许滚动:勾选 |
|
标签 |
用户界面 |
标题标签 |
文本:AI图像识别 文本颜色:红 字号:25 粗体:勾选: 背景颜色 :橙色 |
|
标签 |
用户界面 |
版权标签 |
文本:2021.4.8 Copyright By WZY 字号:16 粗体:勾选 |
|
水平布局 |
页面布局 |
类别选择布局 |
||
列表选择框 |
用户界面 |
类别选择框 |
选择类别 |
文本:选择分类 字号:18 字色:白 水平对齐:居中 背景颜色:品红 |
标签 |
用户界面 |
图像识别标签 |
||
水平布局 |
页面布局 |
水平布局1 |
放置按键 |
水平对齐:居中 宽度:充满 |
按钮 |
用户界面 |
按钮_拍照 |
拍照按钮 |
文本:拍照 文本对齐:居中 背景:#c79c00ff 字号:18 宽度:100 |
图像选择框 |
多媒体 |
图像选择框_选择图片 |
选择植物图片 |
文本对齐:居中 文本:选择图片 背景:蓝色 字号:18 宽度:100 是否粗体:勾选 |
按钮 |
用户界面 |
按钮_开始识别 |
识别图片 |
文本:拍照 文本对齐:居中 背景:#c79c00ff 字号:18 宽度:100 |
垂直布局 |
界面布局 |
垂直布局1 |
||
标签 |
用户界面 |
名称标签 |
文本:空 字号:16 粗体:勾选 |
|
标签 |
用户界面 |
置信度标签 |
文本:空 字号:16 粗体:勾选 |
|
标签 |
用户界面 |
简介标签 |
文本:空 字号:14 粗体:勾选 |
|
图像 |
用户界面 |
图像 |
显示植物图片 |
|
照相机 |
多媒体 |
照相机1 |
拍照 |
|
SimpleBase64 |
插件 |
SimpleBase641 |
图像编码 |
|
TaifunImage |
插件 |
TaifunImage1 |
图像转换 |
|
Http客户端 |
通讯连接 |
Http客户端1 |
GET请求 |
|
Http客户端 |
通讯连接 |
Http客户端2 |
POST请求 |
四、程序设计
程序设计主要是以下几个部分。
(1)变量和初始化
变量Apikey和Secretkey存储两个KEY,因为是个人申请,所以隐藏。
初始化程序利用Apikey和Secretkey,通过HTTP客户端1GET请求的实时申请,得到JSON文本,然后将返回的JSON保存在列表Access_token_list中,再提取令牌值保存在变量Access_token中。
列表变量returnplant、plantlist、highscoreplant和baike分别存储通过HTTP客户端2POST请求返回的JSON文本、种类列表、最高置信度的种类列表和相关的百科简介。
变量image存储待识别照片。
(2)GET请求文本处理(HTTP客户端1)
初始化GET请求成功后,从获得的JSON文本中提取令牌口令,保存在变量Access_token中备用。
(3)选择识别种类(这是需要添加的)
4种:植物识别,动物识别,果蔬食材,菜品识别。注意这4个是有顺序的。
(4)重设图片尺寸函数
由于拍摄照片或植物图片大小不一,识别过程可能会很长,于是确定图片的最大宽度为500像素,高度则按比例调整。
这里需要一个图像处理插件TaifunImage.aix,可以百度搜索在网上下载。
(5)选择待识别图片
点击选择要识别的图片,可以事先拍摄好,然后导入图像组件中,调整大小后,显示出来,同时清空上一次识别的所有数据。
(5)拍照植物图片:通过手机的拍照功能,把待识别种类的照片直接拍照,注意一定尽量的清晰,对比度适中,否则识别可能会出错,或是识别不准确。拍摄完成后,处理图片过程与选择图片一样。
(6)开始识别:
POST请求网址在前面已经介绍。
POST请求时,必须将待识别图片转换成BASE64编码,存储在HTTP客户端创建的列表中,然后通过HTTP客户端2获取这些数据后,进行处理和提取,得到我们想要的有用数据。
BASE64编码是数据传输中常用的编码,以前有相关文章介绍过,大家可以去参考一下。SimpleImage.aix组件是BASE64编码插件,需要去网上下载,导入后即可使用。也就是说,POST请求数据时,是按照BASE64编码请求的。
(7)POST请求获得文本(HTTP客户端2)(这是需要添加大部分内容):
如果请求成功(响应代码为200),返回参数如下表(3个层级)。将返回的数组解码为JSON文本,保存在列表变量returnplant中。然后将识别结果存储在列表plantlist中,它包括所有置信度的植物信息,即识别的种类可能很多,但置信度(也可以理解为可信度)不同,其值从高到低排列,我们只取置信度最高的一项,存储在列表highscoreplant中。并从中提取植物的名字和置信度值,在文本中显示出来。
在列表highscoreplant中还有相关百科知识,只是列表维度太高,提取时稍有难度。百科简介显示出来,从中也能学到很多相关知识。
五、调试
写一个种类,测试一下,正确以后再进行下一个种类的代码,以保证每一步的正确性。最后完善程序设计和UI设计。本例程序只添加了3个,与植物识别相比改动不多,不是很难,就是在处理数据列表时,稍微复杂一点。检索数据时,需要一步步测试,才能了解数组(列表或字典)的意义。
可以添加的项目,还有很多的,比如货币、车辆、红酒、地标、Logo等等,可以根据自己的兴趣添加。参考资料可以在百度智能云申请Apikey时,查看相关说明文档。
六、相关说明。图片和程序均在百度网盘,如有问题也可以和我联系,加我微信。
微信二维码
以上是关于APPInvenor安卓应用开发之《AI图像识别》的主要内容,如果未能解决你的问题,请参考以下文章