王德貴
在本報第15期《AppInvenor開發(fā)——拍照識花》中我們已經(jīng)實現(xiàn)了手機的植物識別App,那么很自然我們就希望這個App能夠進行動物識別和其他的圖像智能識別,這類AI應(yīng)用百度已經(jīng)開發(fā)出很多種類,你可以去百度智能云查看支持文檔,這里我們在拍照識花的基礎(chǔ)上再添加3種:動物識別、菜品識別、果蔬識別,通過本文你有其他需求就可以自行添加其他功能了(圖1)。
1制作智能植物識別時,我們已經(jīng)申請了Apikey和Secretkey,可以直接使用,如果還沒有申請Apikey和Secretkey,則需要去百度智能云申請,再來繼續(xù)制作App。
2 GET請求獲取Access_token令牌
(1)請求頭格式(Header)如下:
(2)請求網(wǎng)址格式為(中括號中的變量用你的Apikey和Scretkey替換):
https:∥aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的Apikey】&client_secret=【你的Scretkey】
3.POST請求獲取AI數(shù)據(jù)(中括號中的變量用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文本、種類列表、最高置信度的種類列表和相關(guān)的百科簡介。
變量image存儲待識別照片(圖3)。
(2)GET請求文本處理(HTTP客戶端1)
初始化GET請求成功后,從獲得的JSON文本中提取令牌口令,保存在變量Access_token中備用(圖4)。
(3)選擇識別種類
這就是本例新添加的部分了,種類有4種:植物識別,動物識別,果蔬食材,菜品識別。注意這4種是有順序的(圖5)。
這里需要一個圖像處理插件TaifunImage.aix,可以百度搜索在網(wǎng)上下載(圖6)。
(4)選擇待識別圖片
點擊選擇要識別的圖片,可以事先拍攝好,然后導(dǎo)入圖像組件中,調(diào)整大小后,顯示出來,同時清空上一次識別的所有數(shù)據(jù)(圖7)。
(5)拍照植物圖片
通過手機的拍照功能,把待識別種類的照片直接拍照,注意一定盡量的清晰,對比度適中,否則識別可能會出錯,或是識別不準(zhǔn)確。拍攝完成后,處理圖片過程與選擇圖片類似(圖8)。
(6)開始識別
先將圖片路徑中的無用字符清除,作為HTTP客戶端2的POST請求地址。請求地址需要符合格式要求,要有請求頭和令牌口令才能請求成功。
POST請求網(wǎng)址前文已經(jīng)介紹過不再詳述。
POST請求時,必須將待識別圖片轉(zhuǎn)換成BASE64編碼,存儲在HTTP客戶端創(chuàng)建的列表中,然后通過HTTP客戶端2獲取這些數(shù)據(jù)后,進行處理和提取,得到我們想要的數(shù)據(jù)。
BASE64編碼是數(shù)據(jù)傳輸中常用的編碼,本報今年第4、5期有相關(guān)文章,可以參考。SirnpleImage.aix組件是BASE64編碼插件,需要去網(wǎng)上下載,導(dǎo)入后即可使用。也就是說,POST請求數(shù)據(jù)時,是按照BASE64編碼請求的(圖9)。
(7)POST請求獲得文本(HTTP客戶端2)
這部分是功能升級的主要更新部分,如果請求成功(響應(yīng)代碼為200),返回參數(shù)如表(3個層級)(圖10)。
將返回的數(shù)組解碼為JSON文本,保存在列表變量retumplant中。然后將識別結(jié)果存儲在列表plantlist中,它包括所有置信度的植物信息,即識別的種類可能很多,但置信度(也可以理解為可信度)不同,其值從高到低排列,我們只取置信度最高的一項,存儲在列表highscoreplant中。并從中提取植物的名字和置信度值,在文本中顯示出來。
在列表highscoreplant中還有相關(guān)百科知識,只是列表維度太高,提取時稍有難度。百科簡介顯示出來,從中也能學(xué)到很多相關(guān)知識(圖11)。
每增加一個種類,就需要測試一遍,正確以后再進行下一個種類的代碼,以保證每一步的正確性。最后完善程序設(shè)計和uI設(shè)計。本例程序只在植物識別的基礎(chǔ)上添加了3個種類,改動不多。主要難點在于處理數(shù)據(jù)列表時,由于種類的增加更復(fù)雜了。檢索數(shù)據(jù)時,需要一步步測試,才能了解數(shù)組(列表或字典)的意義。
百度AI可以添加的項目還有很多,比如貨幣、車輛、紅酒、地標(biāo)、Logo等,可以根據(jù)自己的興趣添加。參考資料可以在百度智能云申請Apikey時,查看相關(guān)說明文檔(圖12)。
相關(guān)源代碼和素材均在百度網(wǎng)盤,下載鏈接請?zhí)砑游⑿殴娞栆剂闵?,如有問題也可以和壹零社小助理聯(lián)系。