劉杰 于啟紅 戈軍 王璐
摘要:針對(duì)人們對(duì)日常生活中見到的事物進(jìn)行靈活、實(shí)時(shí)地識(shí)別分類的需求,設(shè)計(jì)開發(fā)了一款基于Android的圖像識(shí)別系統(tǒng)。通過百度AI開放平臺(tái)中圖像識(shí)別數(shù)據(jù)服務(wù)接口與圖像庫(kù),對(duì)用戶上傳的圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)抓取和識(shí)別,達(dá)到圖像識(shí)別的核心功能。系統(tǒng)實(shí)現(xiàn)了圖像識(shí)別的移動(dòng)化、實(shí)時(shí)化、便捷化,能夠有效地提高對(duì)物體的識(shí)別精度、識(shí)別速度,并且具有占用手機(jī)存儲(chǔ)資源低的優(yōu)點(diǎn)。
關(guān)鍵詞:Android;圖像識(shí)別;SVM;百度AI;OKHttp協(xié)議
中圖分類號(hào):TP319? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)36-0092-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(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)今計(jì)算機(jī)視覺和圖像處理技術(shù)的發(fā)展,對(duì)圖像進(jìn)行識(shí)別分類的研究和應(yīng)用場(chǎng)景越來(lái)越多,一些軟件公司也成功研發(fā)了許多圖像識(shí)別應(yīng)用系統(tǒng),比如小米的智能識(shí)物,錘子科技的圖像處理等[2-3]。但是目前大多數(shù)圖像識(shí)別應(yīng)用系統(tǒng)都是在計(jì)算機(jī)上操作實(shí)現(xiàn)的,難以滿足數(shù)量龐大的移動(dòng)用戶的需求[4]。在人們不斷地追求物質(zhì)生活與精神生活的今天,用戶也渴望著能夠擁有更方便更快捷的方式方法去解決問題,能夠?qū)崟r(shí)地對(duì)圖像進(jìn)行識(shí)別分類的工作,在自己的手機(jī)上實(shí)現(xiàn)物體圖像識(shí)別無(wú)疑會(huì)給人們帶來(lái)極大的便利。所以,設(shè)計(jì)和開發(fā)一款基于Android的圖像識(shí)別系統(tǒng),用戶可以隨時(shí)隨地拍攝或從手機(jī)相冊(cè)上傳待識(shí)別對(duì)象,系統(tǒng)能夠高精度識(shí)別圖像,在移動(dòng)化圖像識(shí)別的同時(shí)能提高圖像識(shí)別的精度和及時(shí)性。
2 需求分析
本系統(tǒng)旨在設(shè)計(jì)出一款手機(jī)App,方便人們隨時(shí)隨地可以拿出手機(jī)來(lái)識(shí)別自己身邊想要知道的事物。系統(tǒng)在上傳圖片之前可以顯示用戶拍攝的圖片;經(jīng)用戶確認(rèn)后通過網(wǎng)絡(luò)上傳至服務(wù)器;服務(wù)器接收到圖片后,開始執(zhí)行識(shí)別程序,并將識(shí)別結(jié)果返回到客戶端,系統(tǒng)的識(shí)別精度也會(huì)隨之相應(yīng)地給出。具體需求如下:
1)運(yùn)用本系統(tǒng)可以做到對(duì)絕大多數(shù)事物進(jìn)行識(shí)別,如動(dòng)物、植物、汽車、菜品;
2)App操作便捷,系統(tǒng)不可過于煩瑣,需要面向大部分人群,老人幼兒都可使用;
3)識(shí)別的精確度較肉眼識(shí)別的準(zhǔn)確,確保對(duì)相似物體的識(shí)別準(zhǔn)確率,要求達(dá)到0.7以上;
4)除了可以利用手機(jī)攝像頭拍照之外,還可以訪問手機(jī)相冊(cè)中的圖片,使得圖像采集更加人性化;
5)識(shí)別圖像需要快速,效率要高,要求達(dá)到1秒以下;
6)手機(jī)App在使用一段時(shí)間之后,不可占用大量的手機(jī)內(nèi)存,要求在50MB以下。
3 系統(tǒng)設(shè)計(jì)
3.1 系統(tǒng)功能設(shè)計(jì)
本系統(tǒng)主要識(shí)別4類常見的物體:動(dòng)物識(shí)別、植物識(shí)別、汽車識(shí)別以及菜品識(shí)別。在識(shí)別物體之前,首先預(yù)判待識(shí)別物體是否滿足這4類,經(jīng)預(yù)判后,進(jìn)入待識(shí)別物體界面進(jìn)行圖像采集,采集之后的圖像經(jīng)OKhttp協(xié)議上傳至服務(wù)器,進(jìn)行圖像的特征提取并識(shí)別,然后通過信息交互模塊將識(shí)別的信息回傳至客戶端,保存識(shí)別數(shù)據(jù)。系統(tǒng)的流程圖如圖1所示。
3.2 系統(tǒng)功能模塊設(shè)計(jì)
系統(tǒng)的主要功能是采集用戶的待識(shí)別圖像的信息,并且通過設(shè)計(jì)數(shù)據(jù)接口向App提供數(shù)據(jù)源,同時(shí)經(jīng)OKhttp協(xié)議上傳至服務(wù)器,進(jìn)行圖像的特征提取并識(shí)別,然后通過信息交互模塊將識(shí)別的信息回傳至客戶端,保存識(shí)別數(shù)據(jù)。后臺(tái)服務(wù)程序設(shè)計(jì)分為:客戶端模塊、數(shù)據(jù)服務(wù)接口和信息交互模塊,系統(tǒng)功能模塊圖如圖2所示。
1)客戶端模塊:此模塊主要設(shè)計(jì)系統(tǒng)的界面及功能交互,對(duì)待識(shí)別物體主要分為四類以及數(shù)據(jù)的記錄的顯示。
2)數(shù)據(jù)服務(wù)接口:當(dāng)App客戶端向數(shù)據(jù)服務(wù)接口發(fā)出請(qǐng)求,處理程序根據(jù)對(duì)應(yīng)的請(qǐng)求對(duì)圖像進(jìn)行特征提取與識(shí)別的操作,同時(shí)返回響應(yīng)數(shù)據(jù)提供給App客戶端進(jìn)行顯示。
3)信息交互模塊:通過OKHttp協(xié)議實(shí)現(xiàn)攔截器攔截請(qǐng)求,往請(qǐng)求頭里面添加 token,發(fā)送同步的GET請(qǐng)求與異步的POST請(qǐng)求。
4 系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)
4.1 線性多分類SVM
線性多分類SVM大致可分為兩類[5],本系統(tǒng)使用SVM n(n=2)分類器,它允許不完整的分類和異常的懲罰因子C;內(nèi)核函數(shù)是一個(gè)線性的內(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 圖形庫(kù)的建立
建立相關(guān)的圖片庫(kù),并進(jìn)行了base64格式的字符串與圖片相互轉(zhuǎn)化,每樣各30萬(wàn)張,如表1所示。
服務(wù)器端是整個(gè)系統(tǒng)的核心,實(shí)現(xiàn)的功能主要有:調(diào)用百度AI圖像識(shí)別接口對(duì)圖像的預(yù)處理、圖像特征的提取與圖像識(shí)別、建立百度AI圖像庫(kù)。
4.3 客戶端模塊實(shí)現(xiàn)
客戶端模塊的功能是:獲取待識(shí)別圖片并上傳至服務(wù)器。實(shí)現(xiàn)的邏輯表述如下:
1)系統(tǒng)初始界面設(shè)計(jì):主要用來(lái)展現(xiàn)系統(tǒng)的名稱以及作者,體現(xiàn)了本設(shè)計(jì)的嚴(yán)謹(jǐn)性,該界面主要由ImageView與TextView兩個(gè)控件組成。
2)系統(tǒng)主界面設(shè)計(jì):用handler處理機(jī)制,使初始界面在三秒后進(jìn)入主界面activity_main,該界面按照系統(tǒng)的實(shí)際需求,分為4種常見的圖像種類識(shí)別,分別為動(dòng)物、植物、汽車、菜品。系統(tǒng)主界面上每個(gè)圖標(biāo)點(diǎn)擊時(shí)可以識(shí)別不同的事件,空白部分用于存儲(chǔ)用戶的使用記錄,如圖3所示。
3)圖片上傳界面設(shè)計(jì):將拍照所得或圖庫(kù)中的圖片上傳到服務(wù)器,點(diǎn)擊拍照/圖庫(kù)按鈕,響應(yīng)上傳圖片事件。此處,通過OKHttp協(xié)議,向Web站點(diǎn)發(fā)送GET請(qǐng)求、POST請(qǐng)求,并從Web站點(diǎn)取得響應(yīng),獲取圖片相關(guān)信息以及可信度的評(píng)估,圖4所示為動(dòng)物上傳后的識(shí)別測(cè)試。
4.4 服務(wù)器模塊實(shí)現(xiàn)
服務(wù)器端是整個(gè)系統(tǒng)的核心,實(shí)現(xiàn)的功能主要有:調(diào)用百度AI圖像識(shí)別接口對(duì)圖像的預(yù)處理、圖像特征的提取與圖像識(shí)別、建立百度AI圖像庫(kù)。實(shí)現(xiàn)的邏輯表述如下:
1)百度相同圖/相似圖/商品圖檢索:API服務(wù)支持開發(fā)者基于自建圖片庫(kù)進(jìn)行入庫(kù)、檢索、刪除、更新操作。開發(fā)者在控制臺(tái)創(chuàng)建應(yīng)用后,需要在控制臺(tái)-應(yīng)用詳情頁(yè)申請(qǐng)建庫(kù),建庫(kù)成功后相關(guān)接口能力可正常調(diào)用。
2)申請(qǐng)建庫(kù)時(shí),圖庫(kù)的圖片數(shù)量上限為50萬(wàn),避免浪費(fèi)資源;如果容量不夠用,可以申請(qǐng)擴(kuò)容,每次擴(kuò)容的申請(qǐng)上限也是50萬(wàn),可以反復(fù)申請(qǐng)擴(kuò)容,原則上圖庫(kù)總量無(wú)上限。
3)圖像搜索已上線圖庫(kù)管理功能:支持對(duì)圖庫(kù)里的圖片進(jìn)行可視化管理,可小批量上傳圖片、預(yù)覽大圖、修改摘要和分類信息、刪除圖片、查詢某張圖是否在庫(kù)里,入口在控制臺(tái)-應(yīng)用詳情頁(yè)管理圖庫(kù)。識(shí)別的前提是需要對(duì)識(shí)別功能做一個(gè)簡(jiǎn)單的訓(xùn)練:先對(duì)圖片進(jìn)行預(yù)處理,更加突出特征,然后采用的特征來(lái)進(jìn)行訓(xùn)練,所以提取圖像的HOG特征,加入SVM訓(xùn)練器,經(jīng)過幾分鐘后將會(huì)得到一個(gè)識(shí)別模型,該模型將是后期識(shí)別物體所需要的模型[6],也就是說,機(jī)器通過該模型就具備了識(shí)別所選物體種類的能力。
4.5 信息交換模塊實(shí)現(xiàn)
信息交互模塊主要功能就是將客戶端與服務(wù)器連接起來(lái)。為了在Android項(xiàng)目中使用OkHttp,首先需要登錄http://square.github.io.okttp/站點(diǎn)下載OKHttp的兩個(gè)JAR包,即okhttp-3.10.0.jar和okio-1.14.0.jar (版本號(hào)可能更新)。在Android Studio中添加第三方JAR包只需如下兩步。
Step1:拷貝JAR包:將okhttp-3.10.0.jar和okio-l.14.0jar添加到Android項(xiàng)目中的libs目錄下。
Step2:添加庫(kù):在AndroidStudio左上角的項(xiàng)目管理界面中切換為Project視圖,在該視圖下選中okhttp-3. 10.0.jar和okio-l.14.0.jar兩個(gè)JAR包,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中單擊Add As Library即可。
為Android項(xiàng)目添加了OKHttp之后,接下來(lái)即可使用OKHttp來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)通信了。客戶端與服務(wù)器端的信息交互主要通過使用OkHttp來(lái)完成,主要代碼如下:
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 測(cè)試結(jié)果分析
系統(tǒng)的測(cè)試結(jié)果的分析主要從圖像識(shí)別的精度、圖像識(shí)別的速度以及識(shí)別之后占用手機(jī)內(nèi)存空間的大小進(jìn)行分析。以圖像識(shí)別精度為例,手機(jī)上經(jīng)過多次測(cè)試之后,得到了大量的測(cè)試結(jié)果,經(jīng)過精心的比較與分析之后,得出了如表2所示統(tǒng)計(jì)表。
最終測(cè)試結(jié)果經(jīng)過分析后,平均識(shí)別率已經(jīng)可以達(dá)到0.7以上,達(dá)到了系統(tǒng)設(shè)計(jì)預(yù)期要求。
6 結(jié)束語(yǔ)
基于Android的圖像識(shí)別分類系統(tǒng)主要包括客戶端模塊、數(shù)據(jù)服務(wù)接口和信息交互模塊等。客戶端通過拍照或從手機(jī)相冊(cè)中獲取一個(gè)待識(shí)別的圖片對(duì)象,之后通過使用OKHttp協(xié)議將圖片上傳至網(wǎng)絡(luò),圖片接收服務(wù)器接收?qǐng)D片并保存到指定目錄,經(jīng)過圖像識(shí)別服務(wù)器讀取指定目錄識(shí)別目錄下的圖片,然后將結(jié)果信息返回Android 客戶端進(jìn)行顯示,并使得識(shí)別的精度達(dá)到0.7以上,系統(tǒng)實(shí)現(xiàn)了圖像識(shí)別的移動(dòng)化、實(shí)時(shí)化、便捷化。
參考文獻(xiàn):
[1] 陳新磊.基于灰度變換及邊緣檢測(cè)的腦地形圖像識(shí)別算法的研究[J].電腦編程技巧與維護(hù),2019(3):131-133.
[2] 張寶燕.基于深度學(xué)習(xí)模型的圖像識(shí)別應(yīng)用研究[J].山西電子技術(shù),2020(6):87-89,93.
[3] 倪凡,舒彧,馮光璐.圖像識(shí)別技術(shù)的應(yīng)用與發(fā)展[J].產(chǎn)業(yè)創(chuàng)新研究,2020(22):44-45,48.
[4] 黃曉璐.基于計(jì)算機(jī)智能圖像識(shí)別的算法與技術(shù)研究[J].電子制作,2020(22):67-68.
[5] 管峻,毛保磊,劉慧英.利用單分類SVM算法檢測(cè)Android應(yīng)用程序[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2021,30(6):148-153.
[6] 劉思,馬靖瑜,袁倩,等.基于邊緣計(jì)算的人臉識(shí)別系統(tǒng)[J].軟件工程,2020,23(12):40-42.
【通聯(lián)編輯:謝媛媛】