基于Google ML模型開發(fā)Android物體檢測(cè)應(yīng)用
ML Kit
ML Kit是Google提供的機(jī)器學(xué)習(xí)SDK,包含了一系列預(yù)訓(xùn)練模型,可以在Android和iOS應(yīng)用中快速添加機(jī)器學(xué)習(xí)功能。ML Kit工具包將谷歌在機(jī)器學(xué)習(xí)方面的專業(yè)知識(shí)帶給了普通的移動(dòng)應(yīng)用開發(fā)者,可以借助ML Kit在幾行代碼中實(shí)現(xiàn)所需的功能。
ML Kit的功能非常全面且易于使用,提供了基于API的現(xiàn)有解決方案,如文字識(shí)別、條碼識(shí)別、圖像標(biāo)簽、人臉檢測(cè)、對(duì)象檢測(cè)等。同時(shí),還提供了便利的API,允許在移動(dòng)應(yīng)用中使用自定義的TensorFlow Lite模型。
ML Kit針對(duì)移動(dòng)設(shè)備進(jìn)行了優(yōu)化,使得機(jī)器學(xué)習(xí)套件的處理過(guò)程可以在設(shè)備上進(jìn)行,保證了快速性,并解鎖了處理相機(jī)輸入等實(shí)時(shí)用例的能力。即使在離線狀態(tài)下,也可以使用這項(xiàng)功能來(lái)處理需要保留在設(shè)備上的圖片和文本。
項(xiàng)目描述
ML Kit
的默認(rèn)模型在物體檢測(cè)方面表現(xiàn)非常出色。當(dāng)你將圖像傳遞給物體檢測(cè)器時(shí),它會(huì)返回一個(gè)物體列表,其中包含邊界框,這些邊界框可用于確定圖像中物體可能的位置。
本項(xiàng)目首先對(duì)圖像中的物體進(jìn)行分類檢測(cè),獲取分類物體的位置區(qū)域,然后結(jié)合圖像標(biāo)記,逐個(gè)獲取單個(gè)物體的標(biāo)簽。
開發(fā)工具
- Android Studio Koala
- Kotlin
- Gradle 8.7
代碼設(shè)計(jì)
界面設(shè)計(jì)
界面上方是一個(gè)ImageView
,用于呈現(xiàn)示例圖片;用戶點(diǎn)擊中間按鈕,調(diào)用物體檢測(cè)處理代碼;待處理完畢,將結(jié)果展示在下方的 TextView
中。
物體檢測(cè)處理
ML Kit物體檢測(cè)器提供多種物體檢測(cè)方法,這些方法由ObjectDetectorOptions
對(duì)象控制。該檢測(cè)器是一個(gè)強(qiáng)大的API,不僅可以檢測(cè)物體,還能在視頻流中跟蹤它們,實(shí)現(xiàn)逐幀跟蹤功能。
創(chuàng)建物體檢測(cè)器,將Bitmap
轉(zhuǎn)換為InputImage,并使用物體檢測(cè)器進(jìn)行處理。 這將在成功時(shí)返回檢測(cè)到的物體列表,或在失敗時(shí)返回異常物體。
val objectDetector = ObjectDetection.getClient(options) var image = InputImage.fromBitmap(bitmap!!, 0) txtOutput.text = "" objectDetector.process(image) .addOnSuccessListener { detectedObjects -> // 任務(wù)執(zhí)行成功 getLabels(bitmap, detectedObjects, txtOutput) bitmap?.apply{ img.setImageBitmap(drawWithRectangle(detectedObjects)) } } .addOnFailureListener { e -> // 任務(wù)執(zhí)行失敗 Log.e("MainActivity", e.toString()) }
用戶點(diǎn)擊按鈕后,調(diào)用物體檢測(cè)器以獲取圖像中物體的邊界框。然后,使用這些邊界框裁剪圖像,得到定義的子圖像,并將其傳遞給圖像標(biāo)記器。
標(biāo)記物體
使用已有的邊界框創(chuàng)建新的臨時(shí)圖像(croppedBitmap
),將其傳遞給圖像標(biāo)記器,并返回結(jié)果。重復(fù)此操作以處理每個(gè)邊界框(即每個(gè)物體),以獲取每個(gè)檢測(cè)到物體的詳細(xì)標(biāo)簽!
val labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) for(obj in objects) { val bounds = obj.boundingBox val croppedBitmap = Bitmap.createBitmap( bitmap, bounds.left, bounds.top, bounds.width(), bounds.height() ) var image = InputImage.fromBitmap(croppedBitmap!!, 0) labeler.process(image) .addOnSuccessListener { labels -> // 任務(wù)執(zhí)行成功 var labelText = "" if(labels.isNotEmpty()) { labelText = txtOutput.text.toString() for (thisLabel in labels){ labelText += thisLabel.text + " , " } labelText += "\n" } else { labelText = "Not found." + "\n" } txtOutput.text = labelText.toString() } }
該代碼遍歷每個(gè)檢測(cè)到的物體,使用邊界框創(chuàng)建名為croppedBitmap
的新位圖。接下來(lái),它使用一個(gè)設(shè)置了默認(rèn)選項(xiàng)的圖像標(biāo)記器(稱為labeler
)處理新圖像。處理成功后,從標(biāo)簽中獲取多個(gè)結(jié)果,并將這些標(biāo)簽寫入逗號(hào)分隔的字符串,最終呈現(xiàn)在TextView
中。
項(xiàng)目演示
到此這篇關(guān)于基于Google ML模型開發(fā)Android物體檢測(cè)應(yīng)用的文章就介紹到這了,更多相關(guān)Android AI應(yīng)用開發(fā):物體檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android仿優(yōu)酷圓形菜單學(xué)習(xí)筆記分享
這篇文章主要為大家分享了Android仿優(yōu)酷圓形菜單學(xué)習(xí)筆記,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05Android利用SurfaceView實(shí)現(xiàn)簡(jiǎn)單計(jì)時(shí)器
這篇文章主要為大家詳細(xì)介紹了Android利用SurfaceView實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)時(shí)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android文字匹配度算法及實(shí)際應(yīng)用示例
本文介紹了Android應(yīng)用中常用的文字匹配度算法Levenshtein Distance,并給出了實(shí)際應(yīng)用示例,通過(guò)合理選擇和應(yīng)用文字匹配度算法,可以實(shí)現(xiàn)多種功能,提升用戶體驗(yàn),增強(qiáng)應(yīng)用的實(shí)用性,需要的朋友可以參考下2024-05-05Android 谷歌推薦的VR實(shí)現(xiàn)方式(分享)
下面小編就為大家分享一篇Android 谷歌推薦的VR實(shí)現(xiàn)方式。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android Drawerlayout側(cè)拉欄事件傳遞問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了Android Drawerlayout側(cè)拉欄事件傳遞問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android SQLite數(shù)據(jù)庫(kù)加密的操作方法
因?yàn)锳ndroid自帶的SQLite數(shù)據(jù)庫(kù)本身是沒有實(shí)現(xiàn)加密的,那我們?nèi)绾螌?shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的加密呢?今天通過(guò)本文給大家介紹下Android SQLite數(shù)據(jù)庫(kù)加密的操作方法,一起看看吧2021-09-09Kotlin?掛起函數(shù)CPS轉(zhuǎn)換原理解析
這篇文章主要為大家介紹了Kotlin?掛起函數(shù)CPS轉(zhuǎn)換原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Android Lock鎖實(shí)現(xiàn)原理詳細(xì)分析
這篇文章主要介紹了Android Lock鎖實(shí)現(xiàn)原理,Lock接口的實(shí)現(xiàn)類提供了比使用synchronized關(guān)鍵字更加靈活和廣泛的鎖定對(duì)象操作,而且是以面向?qū)ο蟮姆绞竭M(jìn)行對(duì)象加鎖2023-02-02