研發(fā)干貨丨基于OK3399-C平臺(tái)android系統(tǒng)下實(shí)現(xiàn)圖像識(shí)別

原創(chuàng) 2020-06-29 09:25:00 RK3399 rk3399 圖像識(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 studioAS)工程里

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.配置ASopencv的環(huán)境,下載并配置opencvsdk

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)

OK3399android圖像識(shí)別實(shí)現(xiàn)是使用tensorflowubuntu上訓(xùn)練自定義圖像,用tensorflow liteandroid上進(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è)跟蹤線程。跟蹤線程不斷的檢測(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.solibrkssd.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)行效果:

 

基于OK3399-C平臺(tái)android系統(tǒng)下實(shí)現(xiàn)圖像識(shí)別 


參考資料:

瑞芯微原廠資料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)了解。

    了解詳情
    FET3399-C核心板
  • 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)了解。 了解詳情
    FET3399K-C核心板

推薦閱讀 換一批 換一批