劉杰 于啟紅 戈軍 王璐






摘要:針對人們對日常生活中見到的事物進行靈活、實時地識別分類的需求,設(shè)計開發(fā)了一款基于Android的圖像識別系統(tǒng)。通過百度AI開放平臺中圖像識別數(shù)據(jù)服務(wù)接口與圖像庫,對用戶上傳的圖像數(shù)據(jù)進行實時抓取和識別,達到圖像識別的核心功能。系統(tǒng)實現(xiàn)了圖像識別的移動化、實時化、便捷化,能夠有效地提高對物體的識別精度、識別速度,并且具有占用手機存儲資源低的優(yōu)點。
關(guān)鍵詞:Android;圖像識別;SVM;百度AI;OKHttp協(xié)議
中圖分類號:TP319? ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2021)36-0092-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
Design and Implementation of Image Recognition System Based on Android
LIU Jie, YU Qi-hong, GE Jun, WANG Lu
(Institute of Information Engineering, Suqian College, Suqian 223800, China)
Abstract: Aiming at the demand of people's flexible and real-time recognition and classification of things seen in daily life, an image recognition system based on Android is designed and developed. Through the image recognition data service interface and image library in Baidu AI open platform, the image data uploaded by users are captured and recognized in real time to achieve the core function of image recognition. The system realizes the mobility, real-time and convenience of image recognition, can effectively improve the recognition accuracy and recognition speed of objects, and has the advantages of low occupation of mobile phone storage resources.
Key words: Android; image recognition; SVM; Baidu AI; OKHttp protocol
1 背景
日常生活中,在人們的身邊伴隨著形形色色的事物,其中最直觀的展現(xiàn)形式就是人們通過自己的肉眼觀察這些事物[1]。得益于當(dāng)今計算機視覺和圖像處理技術(shù)的發(fā)展,對圖像進行識別分類的研究和應(yīng)用場景越來越多,一些軟件公司也成功研發(fā)了許多圖像識別應(yīng)用系統(tǒng),比如小米的智能識物,錘子科技的圖像處理等[2-3]。但是目前大多數(shù)圖像識別應(yīng)用系統(tǒng)都是在計算機上操作實現(xiàn)的,難以滿足數(shù)量龐大的移動用戶的需求[4]。在人們不斷地追求物質(zhì)生活與精神生活的今天,用戶也渴望著能夠擁有更方便更快捷的方式方法去解決問題,能夠?qū)崟r地對圖像進行識別分類的工作,在自己的手機上實現(xiàn)物體圖像識別無疑會給人們帶來極大的便利。所以,設(shè)計和開發(fā)一款基于Android的圖像識別系統(tǒng),用戶可以隨時隨地拍攝或從手機相冊上傳待識別對象,系統(tǒng)能夠高精度識別圖像,在移動化圖像識別的同時能提高圖像識別的精度和及時性。
2 需求分析
本系統(tǒng)旨在設(shè)計出一款手機App,方便人們隨時隨地可以拿出手機來識別自己身邊想要知道的事物。系統(tǒng)在上傳圖片之前可以顯示用戶拍攝的圖片;經(jīng)用戶確認(rèn)后通過網(wǎng)絡(luò)上傳至服務(wù)器;服務(wù)器接收到圖片后,開始執(zhí)行識別程序,并將識別結(jié)果返回到客戶端,系統(tǒng)的識別精度也會隨之相應(yīng)地給出。具體需求如下:
1)運用本系統(tǒng)可以做到對絕大多數(shù)事物進行識別,如動物、植物、汽車、菜品;
2)App操作便捷,系統(tǒng)不可過于煩瑣,需要面向大部分人群,老人幼兒都可使用;
3)識別的精確度較肉眼識別的準(zhǔn)確,確保對相似物體的識別準(zhǔn)確率,要求達到0.7以上;
4)除了可以利用手機攝像頭拍照之外,還可以訪問手機相冊中的圖片,使得圖像采集更加人性化;
5)識別圖像需要快速,效率要高,要求達到1秒以下;
6)手機App在使用一段時間之后,不可占用大量的手機內(nèi)存,要求在50MB以下。
3 系統(tǒng)設(shè)計
3.1 系統(tǒng)功能設(shè)計
本系統(tǒng)主要識別4類常見的物體:動物識別、植物識別、汽車識別以及菜品識別。在識別物體之前,首先預(yù)判待識別物體是否滿足這4類,經(jīng)預(yù)判后,進入待識別物體界面進行圖像采集,采集之后的圖像經(jīng)OKhttp協(xié)議上傳至服務(wù)器,進行圖像的特征提取并識別,然后通過信息交互模塊將識別的信息回傳至客戶端,保存識別數(shù)據(jù)。系統(tǒng)的流程圖如圖1所示。
3.2 系統(tǒng)功能模塊設(shè)計
系統(tǒng)的主要功能是采集用戶的待識別圖像的信息,并且通過設(shè)計數(shù)據(jù)接口向App提供數(shù)據(jù)源,同時經(jīng)OKhttp協(xié)議上傳至服務(wù)器,進行圖像的特征提取并識別,然后通過信息交互模塊將識別的信息回傳至客戶端,保存識別數(shù)據(jù)。后臺服務(wù)程序設(shè)計分為:客戶端模塊、數(shù)據(jù)服務(wù)接口和信息交互模塊,系統(tǒng)功能模塊圖如圖2所示。
1)客戶端模塊:此模塊主要設(shè)計系統(tǒng)的界面及功能交互,對待識別物體主要分為四類以及數(shù)據(jù)的記錄的顯示。
2)數(shù)據(jù)服務(wù)接口:當(dāng)App客戶端向數(shù)據(jù)服務(wù)接口發(fā)出請求,處理程序根據(jù)對應(yīng)的請求對圖像進行特征提取與識別的操作,同時返回響應(yīng)數(shù)據(jù)提供給App客戶端進行顯示。
3)信息交互模塊:通過OKHttp協(xié)議實現(xiàn)攔截器攔截請求,往請求頭里面添加 token,發(fā)送同步的GET請求與異步的POST請求。
4 系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)
4.1 線性多分類SVM
線性多分類SVM大致可分為兩類[5],本系統(tǒng)使用SVM n(n=2)分類器,它允許不完整的分類和異常的懲罰因子C;內(nèi)核函數(shù)是一個線性的內(nèi)核函數(shù),不需要任何的指向高維空間的方向映射以及線性的區(qū)別。核心代碼如下:
vector<Mat> vecImages;
vector<int> vecLabels;
CvSVM *mySVM = new CvSVM();
CvSVMParams params = CvSVMParams();
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-10);
vector<float> vecDescriptors;
4.2 圖形庫的建立
建立相關(guān)的圖片庫,并進行了base64格式的字符串與圖片相互轉(zhuǎn)化,每樣各30萬張,如表1所示。
服務(wù)器端是整個系統(tǒng)的核心,實現(xiàn)的功能主要有:調(diào)用百度AI圖像識別接口對圖像的預(yù)處理、圖像特征的提取與圖像識別、建立百度AI圖像庫。
4.3 客戶端模塊實現(xiàn)
客戶端模塊的功能是:獲取待識別圖片并上傳至服務(wù)器。實現(xiàn)的邏輯表述如下:
1)系統(tǒng)初始界面設(shè)計:主要用來展現(xiàn)系統(tǒng)的名稱以及作者,體現(xiàn)了本設(shè)計的嚴(yán)謹(jǐn)性,該界面主要由ImageView與TextView兩個控件組成。
2)系統(tǒng)主界面設(shè)計:用handler處理機制,使初始界面在三秒后進入主界面activity_main,該界面按照系統(tǒng)的實際需求,分為4種常見的圖像種類識別,分別為動物、植物、汽車、菜品。系統(tǒng)主界面上每個圖標(biāo)點擊時可以識別不同的事件,空白部分用于存儲用戶的使用記錄,如圖3所示。
3)圖片上傳界面設(shè)計:將拍照所得或圖庫中的圖片上傳到服務(wù)器,點擊拍照/圖庫按鈕,響應(yīng)上傳圖片事件。此處,通過OKHttp協(xié)議,向Web站點發(fā)送GET請求、POST請求,并從Web站點取得響應(yīng),獲取圖片相關(guān)信息以及可信度的評估,圖4所示為動物上傳后的識別測試。
4.4 服務(wù)器模塊實現(xiàn)
服務(wù)器端是整個系統(tǒng)的核心,實現(xiàn)的功能主要有:調(diào)用百度AI圖像識別接口對圖像的預(yù)處理、圖像特征的提取與圖像識別、建立百度AI圖像庫。實現(xiàn)的邏輯表述如下:
1)百度相同圖/相似圖/商品圖檢索:API服務(wù)支持開發(fā)者基于自建圖片庫進行入庫、檢索、刪除、更新操作。開發(fā)者在控制臺創(chuàng)建應(yīng)用后,需要在控制臺-應(yīng)用詳情頁申請建庫,建庫成功后相關(guān)接口能力可正常調(diào)用。
2)申請建庫時,圖庫的圖片數(shù)量上限為50萬,避免浪費資源;如果容量不夠用,可以申請擴容,每次擴容的申請上限也是50萬,可以反復(fù)申請擴容,原則上圖庫總量無上限。
3)圖像搜索已上線圖庫管理功能:支持對圖庫里的圖片進行可視化管理,可小批量上傳圖片、預(yù)覽大圖、修改摘要和分類信息、刪除圖片、查詢某張圖是否在庫里,入口在控制臺-應(yīng)用詳情頁管理圖庫。識別的前提是需要對識別功能做一個簡單的訓(xùn)練:先對圖片進行預(yù)處理,更加突出特征,然后采用的特征來進行訓(xùn)練,所以提取圖像的HOG特征,加入SVM訓(xùn)練器,經(jīng)過幾分鐘后將會得到一個識別模型,該模型將是后期識別物體所需要的模型[6],也就是說,機器通過該模型就具備了識別所選物體種類的能力。
4.5 信息交換模塊實現(xiàn)
信息交互模塊主要功能就是將客戶端與服務(wù)器連接起來。為了在Android項目中使用OkHttp,首先需要登錄http://square.github.io.okttp/站點下載OKHttp的兩個JAR包,即okhttp-3.10.0.jar和okio-1.14.0.jar (版本號可能更新)。在Android Studio中添加第三方JAR包只需如下兩步。
Step1:拷貝JAR包:將okhttp-3.10.0.jar和okio-l.14.0jar添加到Android項目中的libs目錄下。
Step2:添加庫:在AndroidStudio左上角的項目管理界面中切換為Project視圖,在該視圖下選中okhttp-3. 10.0.jar和okio-l.14.0.jar兩個JAR包,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中單擊Add As Library即可。
為Android項目添加了OKHttp之后,接下來即可使用OKHttp來實現(xiàn)網(wǎng)絡(luò)通信了。客戶端與服務(wù)器端的信息交互主要通過使用OkHttp來完成,主要代碼如下:
public HttpResponseListener(Context context, Request<?> request,
HttpListener<T> httpCallback, boolean canCancel, boolean isLoading) {
this.mContext = context;
this.mRequest = request;
if (context != null && isLoading) {
mWaitDialog = DialogUtils.initLoadingDialog(context, "正在加載中...");
}
this.callback = httpCallback;
}
@Override
public void onStart(int what) {
}
5 測試結(jié)果分析
系統(tǒng)的測試結(jié)果的分析主要從圖像識別的精度、圖像識別的速度以及識別之后占用手機內(nèi)存空間的大小進行分析。以圖像識別精度為例,手機上經(jīng)過多次測試之后,得到了大量的測試結(jié)果,經(jīng)過精心的比較與分析之后,得出了如表2所示統(tǒng)計表。
最終測試結(jié)果經(jīng)過分析后,平均識別率已經(jīng)可以達到0.7以上,達到了系統(tǒng)設(shè)計預(yù)期要求。
6 結(jié)束語
基于Android的圖像識別分類系統(tǒng)主要包括客戶端模塊、數(shù)據(jù)服務(wù)接口和信息交互模塊等。客戶端通過拍照或從手機相冊中獲取一個待識別的圖片對象,之后通過使用OKHttp協(xié)議將圖片上傳至網(wǎng)絡(luò),圖片接收服務(wù)器接收圖片并保存到指定目錄,經(jīng)過圖像識別服務(wù)器讀取指定目錄識別目錄下的圖片,然后將結(jié)果信息返回Android 客戶端進行顯示,并使得識別的精度達到0.7以上,系統(tǒng)實現(xiàn)了圖像識別的移動化、實時化、便捷化。
參考文獻:
[1] 陳新磊.基于灰度變換及邊緣檢測的腦地形圖像識別算法的研究[J].電腦編程技巧與維護,2019(3):131-133.
[2] 張寶燕.基于深度學(xué)習(xí)模型的圖像識別應(yīng)用研究[J].山西電子技術(shù),2020(6):87-89,93.
[3] 倪凡,舒彧,馮光璐.圖像識別技術(shù)的應(yīng)用與發(fā)展[J].產(chǎn)業(yè)創(chuàng)新研究,2020(22):44-45,48.
[4] 黃曉璐.基于計算機智能圖像識別的算法與技術(shù)研究[J].電子制作,2020(22):67-68.
[5] 管峻,毛保磊,劉慧英.利用單分類SVM算法檢測Android應(yīng)用程序[J].計算機系統(tǒng)應(yīng)用,2021,30(6):148-153.
[6] 劉思,馬靖瑜,袁倩,等.基于邊緣計算的人臉識別系統(tǒng)[J].軟件工程,2020,23(12):40-42.
【通聯(lián)編輯:謝媛媛】