研發(fā)干貨丨基于OK3399-C平臺(tái)android系統(tǒng)下實(shí)現(xiàn)圖像識(shí)別
首先我們了解下android系統(tǒng)常用的圖像識(shí)別框架
一:調(diào)用一些不開(kāi)源庫(kù)進(jìn)行識(shí)別
曠視的圖像識(shí)別及OCR文字識(shí)別庫(kù),及其他廠家如阿里,百度,華為,騰訊的OCR文字識(shí)別庫(kù)等。
二:調(diào)用一些開(kāi)源庫(kù)進(jìn)行識(shí)別
一):tensorflow 訓(xùn)練自定義圖像并識(shí)別
1.是先在ubuntu上對(duì)很多圖片進(jìn)行訓(xùn)練得到自己的類(lèi)別模型文件,xxx.pb文件及xxx_labels.txt文件
2.把上一步生成的文件放到Android studio(AS)工程里
3.AS添加tensorflow依賴(lài)
4.在tensorflow 給的android 工程上做改動(dòng),寫(xiě)出自己的工程
5.運(yùn)行工程開(kāi)始識(shí)別。
要在 android 上使用 tensorflow ,官方提供兩種方式工程:
一)tensorflow for mobile,成熟,功能方法多
只需配置buildgradle,調(diào)用tensorflow相關(guān)接口進(jìn)行識(shí)別
2) tensorflow lite.輕量,允許設(shè)備端的機(jī)器學(xué)習(xí)模型的低延遲推斷
下載移動(dòng)端的模型model和標(biāo)簽labels文件并解壓到assert下,導(dǎo)入tensorflow項(xiàng)目,調(diào)用tensorflow相關(guān)接口進(jìn)行識(shí)別
注意此種方法不能直接使用tensorflow的模型,需要對(duì)模型進(jìn)行轉(zhuǎn)換。
二): opencv訓(xùn)練自定義圖像并識(shí)別
1.配置AS中opencv的環(huán)境,下載并配置opencv的sdk
2.在windows上用opencv工具訓(xùn)練自定義圖像數(shù)據(jù)集
3.將訓(xùn)練好的數(shù)據(jù)集加載到AS
4.編寫(xiě)自己的android 工程
5.運(yùn)行android 工程進(jìn)行識(shí)別
三): tensorflow 訓(xùn)練自定義圖像,實(shí)時(shí)處理openCV獲取的攝像頭圖像(openCV對(duì)圖像進(jìn)行分割)并識(shí)別(https://blog.csdn.net/qq_33200967/article/details/82773677)
此方法與單獨(dú)使用tensorflow的區(qū)別是使用了opencv中的圖像分割,將所有分割物體進(jìn)行識(shí)別
四)其他:
另外有些開(kāi)源的圖像識(shí)別方法,Tesseract(支持OCR文字識(shí)別)等,可以將其加入android并進(jìn)行識(shí)別。
OK3399-C 平臺(tái) android 系統(tǒng)的圖像識(shí)別實(shí)現(xiàn)
OK3399的android圖像識(shí)別實(shí)現(xiàn)是使用tensorflow在ubuntu上訓(xùn)練自定義圖像,用tensorflow lite在android上進(jìn)行的識(shí)別,識(shí)別部分使用了 rk3399 內(nèi)部的 mali400 gpu。
關(guān)于模型
首先,我們有訓(xùn)練好的tensorflow模型文件:xxx.pb。
其次,將模型文件進(jìn)行轉(zhuǎn)換,先轉(zhuǎn)換成tensorflow lite支持的xxx.tflite模型文件,然后轉(zhuǎn)換成 rk3399 的 SSD ( Single Shot MultiBox Detector )支持的xxx.rkl模型文件。
然后,把此轉(zhuǎn)換后的模型文件加入android 工程。
此android例程的基本實(shí)現(xiàn)為:
打開(kāi)camera的預(yù)覽,同時(shí)創(chuàng)建一個(gè)跟蹤線(xiàn)程。跟蹤線(xiàn)程不斷的檢測(cè)是否有可用的圖片,一旦有可用圖片就調(diào)用識(shí)別api進(jìn)行識(shí)別,識(shí)別函數(shù)會(huì)返回識(shí)別目標(biāo)的位置及類(lèi)型,然后得到物體在圖片中的范圍,并繪制出來(lái)。
此例程除java實(shí)現(xiàn)的部分外,還涉及到三個(gè)庫(kù):librkssd4j.so,librga.so和librkssd.so。
以下是三個(gè)庫(kù)的介紹。
librkssd4j.so
調(diào)用說(shuō)明:由android 例程直接調(diào)用的庫(kù)。
源碼位置: rk_ssd_demo_rk3399\app\src\main\cpp
作用:調(diào)用librga.so對(duì)于圖像進(jìn)行格式轉(zhuǎn)換或翻轉(zhuǎn)及壓縮,然后調(diào)用librkssd.so進(jìn)行識(shí)別。
librga.so
調(diào)用說(shuō)明:被librkssd4j.so加載
源碼位置: OK3399-android7-source/hardware/rockchip/librga/
作用:用來(lái)判斷平臺(tái)是否支持rga,及做yuv轉(zhuǎn)rgb處理,rga主要對(duì)圖片數(shù)據(jù)進(jìn)行一些格式轉(zhuǎn)換,翻轉(zhuǎn),縮放等運(yùn)算。
librkssd.so
調(diào)用說(shuō)明:被librkssd4j.so加載
作用:對(duì)圖片進(jìn)行識(shí)別。其使用了rk3399內(nèi)部的Mali400 gpu。
以下為運(yùn)行效果:
參考資料:
瑞芯微原廠資料RKDocs/rk3399/RK3399_SSD_Android&Linux_V1.0_20180522.pdf
https://github.com/tesseract-ocr/tesseract.git
https://github.com/tensorflow/tensorflow.git
相關(guān)產(chǎn)品 >
-
FET3399-C核心板
飛凌RK3399安卓高性能核心板采用 采用六核Rockchip RK3399芯片,雙Cortex-A72大核+四Cortex-A53小核結(jié)構(gòu),對(duì)整數(shù)、浮點(diǎn)、內(nèi)存等作了大幅優(yōu)化,在整體性能、功耗及核心面積三個(gè)方面提升。以下將對(duì)瑞芯微芯片RK3399參數(shù),RK3399核心板方案及其性能做具體介紹。如您對(duì)飛凌RK3399系列核心板有興趣,歡迎咨詢(xún)了解。
了解詳情 -
FET3399K-C核心板
飛凌RK3399K安卓高性能核心板采用 采用六核Rockchip RK3399K芯片,雙Cortex-A72大核+四Cortex-A53小核結(jié)構(gòu),對(duì)整數(shù)、浮點(diǎn)、內(nèi)存等作了大幅優(yōu)化,在整體性能、功耗及核心面積三個(gè)方面提升。以下將對(duì)瑞芯微芯片RK3399參數(shù),RK3399核心板方案及其性能做具體介紹。如您對(duì)飛凌RK3399系列核心板有興趣,歡迎咨詢(xún)了解。 了解詳情