吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用TensorFlow Lite從Android設備圖像提取文本

Tensorflowers ? 來源:TensorFlow ? 作者:魏巍 ? 2021-11-02 15:34 ? 次閱讀

俗話說:“一圖勝千言”。圖像包含豐富的視覺信息,但有時關鍵信息位于圖像的文本當中。雖然識字的人可以輕松理解圖像中嵌入的文字,但我們如何利用計算機視覺機器學習來教計算機做到這一點呢?

今天,我們將向您展示如何使用 TensorFlow Lite 從 Android 設備上的圖像中提取文本。我們將引導您完成最近開源的光學字符識別 (OCR) Android 參考應用的關鍵步驟,您可參考該處獲取完整代碼。在下方動畫中,可以看到該應用如何從三款 Google 產品徽標圖片中提取產品名稱。

該處

https://github.com/tensorflow/examples/tree/master/lite/examples/optical_character_recognition/android

從圖像中識別文本的過程即為 OCR,該技術在多個領域中廣泛使用。例如,Google 地圖運用 OCR 技術從地理定位圖像中提取信息,進而完善 Google 地圖。

Google 地圖運用 OCR 技術

https://ai.googleblog.com/2017/05/updating-google-maps-with-deep-learning.html

一般來說,OCR 是一個包含多個步驟的流水線。相關步驟通常包含文本檢測和文本識別:

使用文本檢測模型查找文本周圍的邊界框;

執行一些后處理操作,以轉換邊界框;

將這些邊界框內的圖像轉換為灰度圖像,如此一來,文本識別模型便可繪制出文字和數字。

在示例中,我們將利用 TensorFlow Hub 中的文本檢測和文本識別模型。多個不同的模型版本可用來權衡速度/準確率的取舍;我們在此使用的是 float16 量化模型。如需有關模型量化的更多信息,請參閱 TensorFlow Lite 量化文檔。

文本檢測

https://hub.tensorflow.google.cn/sayakpaul/lite-model/east-text-detector/fp16/1

文本識別

https://hub.tensorflow.google.cn/tulasiram58827/lite-model/keras-ocr/float16/2

TensorFlow Lite 量化

https://tensorflow.google.cn/lite/performance/model_optimization

我們還會使用 OpenCV,這是一款廣泛使用的計算機視覺庫,適用于非極大值抑制 (NMS) 和透視變換(我們稍后會對此展開討論),以對檢測結果進行后處理。此外,我們還會使用 TFLite 支持庫對圖像進行灰度和標準化處理。

非極大值抑制

https://www.coursera.org/lecture/convolutional-neural-networks/non-max-suppression-dvrjH

TFLite 支持庫

https://tensorflow.google.cn/lite/inference_with_metadata/lite_support

對于文本檢測,由于檢測模型支持 320x320 的固定像素,我們會使用 TFLite 支持庫調整輸入圖像的大小并對其進行標準化處理:

檢測模型

https://hub.tensorflow.google.cn/sayakpaul/lite-model/east-text-detector/fp16/1

val imageProcessor =

ImageProcessor.Builder().add(ResizeOp(height, width, ResizeOp.ResizeMethod.BILINEAR)).add(NormalizeOp(means, stds)).build()

var tensorImage = TensorImage(DataType.FLOAT32)

tensorImage.load(bitmapIn)

tensorImage = imageProcessor.process(tensorImage)

接下來,我們使用 TFLite 運行檢測模型:

detectionInterpreter.runForMultipleInputsOutputs(detectionInputs, detectionOutputs)

檢測模型的輸出是一些經過旋轉且圖像內包含文本的邊界框。我們會運行非極大值抑制,借助 OpenCV 為每個文本塊確定一個邊界框:

NMSBoxesRotated(

boundingBoxesMat,

detectedConfidencesMat,

detectionConfidenceThreshold.toFloat(),

detectionNMSThreshold.toFloat(),

indicesMat

有些時候,圖像內的文本會出現變形(例如,我的筆記本電腦上的“kubernetes”貼紙),并伴隨一個透視角度:

如果我們只是將原始旋轉邊界框直接“喂”給識別模型,則該模型不太可能正確識別字符。在本例中,我們需要使用 OpenCV 來進行透視變換:

val rotationMatrix = getPerspectiveTransform(srcPtsMat, targetPtsMat)

warpPerspective(

srcBitmapMat,

recognitionBitmapMat,

rotationMatrix,

Size(recognitionImageWidth.toDouble(), recognitionImageHeight.toDouble()))

之后,我們會再次使用 TFLite 支持庫,在邊界框內調整變換圖像的大小,并對其進行灰度和歸一化處理:

val imageProcessor =

ImageProcessor.Builder().add(ResizeOp(height, width, ResizeOp.ResizeMethod.BILINEAR)).add(TransformToGrayscaleOp()).add(NormalizeOp(mean, std)).build()

最后,我們會運行文本識別模型、根據模型輸出繪制出字符與數字,然后更新應用界面:

recognitionInterpreter.run(recognitionTensorImage.buffer, recognitionResult)

var recognizedText = “”for (k in 0 until recognitionModelOutputSize) {

var alphabetIndex = recognitionResult.getInt(k * 8)if(alphabetIndex in 0..alphabets.length - 1)

recognizedText = recognizedText + alphabets[alphabetIndex]}

Log.d(“Recognition result:”, recognizedText)if (recognizedText != “”) {

ocrResults.put(recognizedText, getRandomColor())}

這樣就完成了,就是這么簡單。此時,我們可以在我們的應用中使用 TFLite 來提出輸入圖像中的文本。

最后我想指出的是,如果您只是需要一個即用型 OCR SDK,您可以直接使用 Google ML Kit 的文字識別功能。ML Kit 底層使用了 TFLite,并且對于大多數 OCR 用例而言足矣。在以下情況下,您可以使用 TFLite 來構建專屬 OCR 解決方案:

您有自己想要使用的專屬文本檢測/識別 TFLite 模型;

您有特殊的業務需求(例如識別顛倒的文本),并且需要自定義 OCR 流水線;

您希望支持 ML Kit 沒有覆蓋的語言;

您的目標用戶設備不一定要安裝 Google Play 服務;

您想要控制用于運行模型的硬件后端(CPUGPU 等)。

ML Kit

https://developers.google.cn/ml-kit/vision/text-recognition

Google Play 服務

https://developers.google.cn/android/guides/overview

在這些情況下,我希望本教程和我們的實現示例可以助您開啟在您的應用中構建專屬 OCR 功能的旅程。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 應用
    +關注

    關注

    2

    文章

    439

    瀏覽量

    34222
  • OCR
    OCR
    +關注

    關注

    0

    文章

    146

    瀏覽量

    16427
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60631
  • TensorFlow Lite
    +關注

    關注

    0

    文章

    26

    瀏覽量

    647

原文標題:基于 TensorFlow Lite 的 OCR:一款嶄新的示例應用

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-300:Blackfin EZ-KIT Lite電路板與CMOS圖像傳感器的接口

    電子發燒友網站提供《EE-300:Blackfin EZ-KIT Lite電路板與CMOS圖像傳感器的接口.pdf》資料免費下載
    發表于 01-05 10:00 ?0次下載
    EE-300:Blackfin EZ-KIT <b class='flag-5'>Lite</b>電路板與CMOS<b class='flag-5'>圖像</b>傳感器的接口

    高通AI Hub:輕松實現Android圖像分類

    高通AI Hub為開發者提供了一個強大的平臺,以優化、驗證和部署在Android設備上的機器學習模型。這篇文章將介紹如何使用高通AI Hub進行圖像分類的程式碼開發,并提供一個實際的例子來展示其在
    的頭像 發表于 11-26 01:03 ?338次閱讀
    高通AI Hub:輕松實現<b class='flag-5'>Android</b><b class='flag-5'>圖像</b>分類

    第四章:在 PC 交叉編譯 aarch64 的 tensorflow 開發環境并測試

    本文介紹了在 PC 端交叉編譯 aarch64 平臺的 tensorflow 庫而非 tensorflow lite 的心酸過程。
    的頭像 發表于 08-25 11:38 ?1364次閱讀
    第四章:在 PC 交叉編譯 aarch64 的 <b class='flag-5'>tensorflow</b> 開發環境并測試

    丟掉數據線,你還會調試Android設備嗎?

    ADB(AndroidDebugBridge)作為Android開發中非常重要的工具,開發者可以使用ADB設備在電腦上對Android設備
    的頭像 發表于 08-14 17:09 ?451次閱讀
    丟掉數據線,你還會調試<b class='flag-5'>Android</b><b class='flag-5'>設備</b>嗎?

    如何在Tensorflow中實現反卷積

    TensorFlow中實現反卷積(也稱為轉置卷積或分數步長卷積)是一個涉及多個概念和步驟的過程。反卷積在深度學習領域,特別是在圖像分割、圖像超分辨率、以及生成模型(如生成對抗網絡GANs)等任務中
    的頭像 發表于 07-14 10:46 ?704次閱讀

    利用TensorFlow實現基于深度神經網絡的文本分類模型

    要利用TensorFlow實現一個基于深度神經網絡(DNN)的文本分類模型,我們首先需要明確幾個關鍵步驟:數據預處理、模型構建、模型訓練、模型評估與調優,以及最終的模型部署(盡管在本文中,我們將重點放在前四個步驟上)。下面,我將詳細闡述這些步驟,并給出一個具體的示例。
    的頭像 發表于 07-12 16:39 ?956次閱讀

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發的一個開源深度學習框架,它允許開發者方便地構建、訓練和部署各種復雜的機器學習模型。TensorFlow憑借其高效的計算性能、靈活的架構以及豐富的工具和庫,在學
    的頭像 發表于 07-12 16:38 ?810次閱讀

    Android設備將SDK更新到1.4.0后無法連接到ESP SoftAP怎么解決?

    將 SDK 1.2.0 更新到 1.4.0 后,一切看起來都很好,但是某些設備(例如 Android 5.0、Android 4.4)
    發表于 07-08 07:41

    tensorflow和pytorch哪個更簡單?

    PyTorch更簡單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要一個易于使用、靈活且具有強大社區支持的框架,PyTorch可能是一個更好的選擇。如果您需要一個在
    的頭像 發表于 07-05 09:45 ?976次閱讀

    tensorflow和pytorch哪個好

    :2015年由Google Brain團隊發布。 語言支持 :主要使用Python,也支持C++、Java等。 設計哲學 :TensorFlow是一個端到端的機器學習平臺,支持研究到生產的所有階段
    的頭像 發表于 07-05 09:42 ?772次閱讀

    tensorflow簡單的模型訓練

    在本文中,我們將詳細介紹如何使用TensorFlow進行簡單的模型訓練。TensorFlow是一個開源的機器學習庫,廣泛用于各種機器學習任務,包括圖像識別、自然語言處理等。我們將從安裝
    的頭像 發表于 07-05 09:38 ?787次閱讀

    keras模型轉tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉換為TensorFlow session。 Keras和TensorFlow簡介 Keras是一個高級神經網絡API,它提供了一種簡單、快速的方式來構建
    的頭像 發表于 07-05 09:36 ?594次閱讀

    TensorFlow的定義和使用方法

    數據流圖,從而簡化機器學習模型的構建、訓練和部署。自2015年11月開源以來,TensorFlow迅速成為數據科學家、軟件開發者以及教育工作者廣泛使用的工具,廣泛應用于圖像識別、自然語言處理、推薦系統等多個領域。本文將深入解讀Tenso
    的頭像 發表于 07-02 14:14 ?890次閱讀

    卷積神經網絡在文本分類領域的應用

    在自然語言處理(NLP)領域,文本分類一直是一個重要的研究方向。隨著深度學習技術的飛速發展,卷積神經網絡(Convolutional Neural Network,簡稱CNN)在圖像識別領域取得了
    的頭像 發表于 07-01 16:25 ?812次閱讀

    如何提取、匹配圖像特征點

    我們習慣圖像中選取比較有代表性的點,然后,在此基礎上,討論相機位姿估計問題,以及這些點的定位問題。 在經典 SLAM 模型中,把它們稱為路標,而在視覺 SLAM 中,路標則是指圖像特征(Features)。
    的頭像 發表于 04-19 11:41 ?731次閱讀
    百家乐网上赌博| 金银岛百家乐官网的玩法技巧和规则| 亲朋棋牌捕鱼辅助| 百家乐官网电子| 百家乐官网技巧看路| 大发888网页版登录| 百家乐游戏客户端| 游戏百家乐官网押金| 综艺| 瑞鑫棋牌下载| 金海岸百家乐的玩法技巧和规则| 百家乐官网平注常赢玩法更| 百家乐官网视频游戏中心| 博彩e族777| 娱乐网百家乐的玩法技巧和规则 | 澳门百家乐博牌| 亚洲百家乐官网博彩的玩法技巧和规则 | 太阳城网上娱乐| 大发888主页优惠| 网上有百家乐玩吗| A8百家乐娱乐城| 678百家乐官网博彩娱乐场| 启东市| 凌龙棋牌游戏大厅| 送58百家乐的玩法技巧和规则 | 澳门百家乐官网怎赌才能赚钱| 百家乐的玩法和技巧| 真人百家乐官网赌城| 百家乐官网最低下注| 太阳城娱乐开户| 水果机小游戏| 百家乐凯时赌场娱乐网规则| 新葡京百家乐现金网| 新濠百家乐官网的玩法技巧和规则| 迷你百家乐官网论坛| 香港六合彩信息| 太阳城娱乐网88| 澳门玩百家乐的玩法技巧和规则| 百家乐打法内容介绍| 玩百家乐官网的玩法技巧和规则 | 百家乐官网反缆公式|