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

原創(chuàng) 2020-06-29 09:25:00 RK3399 rk3399 圖像識別

首先我們了解下android系統(tǒng)常用的圖像識別框架

 

一:調(diào)用一些不開源庫進行識別

曠視的圖像識別及OCR文字識別庫,及其他廠家如阿里,百度,華為,騰訊的OCR文字識別庫等。

 

二:調(diào)用一些開源庫進行識別

一):tensorflow 訓(xùn)練自定義圖像并識別

1.是先在ubuntu上對很多圖片進行訓(xùn)練得到自己的類別模型文件,xxx.pb文件及xxx_labels.txt文件

2.把上一步生成的文件放到Android studioAS)工程里

3.AS添加tensorflow依賴

4.tensorflow 給的android 工程上做改動,寫出自己的工程

5.運行工程開始識別。

 

要在 android 上使用 tensorflow ,官方提供兩種方式工程:

一)tensorflow for mobile,成熟,功能方法多

只需配置buildgradle,調(diào)用tensorflow相關(guān)接口進行識別

2) tensorflow lite.輕量,允許設(shè)備端的機器學(xué)習(xí)模型的低延遲推斷

下載移動端的模型model和標(biāo)簽labels文件并解壓到assert下,導(dǎo)入tensorflow項目,調(diào)用tensorflow相關(guān)接口進行識別

注意此種方法不能直接使用tensorflow的模型,需要對模型進行轉(zhuǎn)換。

 

二): opencv訓(xùn)練自定義圖像并識別

1.配置ASopencv的環(huán)境,下載并配置opencvsdk

2.windows上用opencv工具訓(xùn)練自定義圖像數(shù)據(jù)集

3.將訓(xùn)練好的數(shù)據(jù)集加載到AS

4.編寫自己的android 工程

5.運行android 工程進行識別

 

三): tensorflow 訓(xùn)練自定義圖像,實時處理openCV獲取的攝像頭圖像(openCV對圖像進行分割)并識別(https://blog.csdn.net/qq_33200967/article/details/82773677

此方法與單獨使用tensorflow的區(qū)別是使用了opencv中的圖像分割,將所有分割物體進行識別

 

四)其他:

另外有些開源的圖像識別方法,Tesseract(支持OCR文字識別)等,可以將其加入android并進行識別。

OK3399-C 平臺 android 系統(tǒng)的圖像識別實現(xiàn)

OK3399android圖像識別實現(xiàn)是使用tensorflowubuntu上訓(xùn)練自定義圖像,用tensorflow liteandroid上進行的識別,識別部分使用了 rk3399 內(nèi)部的 mali400 gpu

 

關(guān)于模型

首先,我們有訓(xùn)練好的tensorflow模型文件:xxx.pb。

其次,將模型文件進行轉(zhuǎn)換,先轉(zhuǎn)換成tensorflow lite支持的xxx.tflite模型文件,然后轉(zhuǎn)換成 rk3399 SSD Single Shot MultiBox Detector 支持的xxx.rkl模型文件。

然后,把此轉(zhuǎn)換后的模型文件加入android 工程。

android例程的基本實現(xiàn)為:

打開camera的預(yù)覽,同時創(chuàng)建一個跟蹤線程。跟蹤線程不斷的檢測是否有可用的圖片,一旦有可用圖片就調(diào)用識別api進行識別,識別函數(shù)會返回識別目標(biāo)的位置及類型,然后得到物體在圖片中的范圍,并繪制出來。

 

此例程除java實現(xiàn)的部分外,還涉及到三個庫:librkssd4j.solibrga.solibrkssd.so。

以下是三個庫的介紹。

librkssd4j.so

調(diào)用說明:由android 例程直接調(diào)用的庫。

源碼位置: rk_ssd_demo_rk3399\app\src\main\cpp

作用:調(diào)用librga.so對于圖像進行格式轉(zhuǎn)換或翻轉(zhuǎn)及壓縮,然后調(diào)用librkssd.so進行識別。

 

librga.so

調(diào)用說明:被librkssd4j.so加載

源碼位置: OK3399-android7-source/hardware/rockchip/librga/

作用:用來判斷平臺是否支持rga,及做yuv轉(zhuǎn)rgb處理,rga主要對圖片數(shù)據(jù)進行一些格式轉(zhuǎn)換,翻轉(zhuǎn),縮放等運算。


librkssd.so

調(diào)用說明:被librkssd4j.so加載

作用:對圖片進行識別。其使用了rk3399內(nèi)部的Mali400 gpu。

 

以下為運行效果:

 

基于OK3399-C平臺android系統(tǒng)下實現(xià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),對整數(shù)、浮點、內(nèi)存等作了大幅優(yōu)化,在整體性能、功耗及核心面積三個方面提升。以下將對瑞芯微芯片RK3399參數(shù),RK3399核心板方案及其性能做具體介紹。如您對飛凌RK3399系列核心板有興趣,歡迎咨詢了解。

    了解詳情
    FET3399-C核心板
  • FET3399K-C核心板

    飛凌RK3399K安卓高性能核心板采用 采用六核Rockchip RK3399K芯片,雙Cortex-A72大核+四Cortex-A53小核結(jié)構(gòu),對整數(shù)、浮點、內(nèi)存等作了大幅優(yōu)化,在整體性能、功耗及核心面積三個方面提升。以下將對瑞芯微芯片RK3399參數(shù),RK3399核心板方案及其性能做具體介紹。如您對飛凌RK3399系列核心板有興趣,歡迎咨詢了解。 了解詳情
    FET3399K-C核心板

推薦閱讀 換一批 換一批