光學字元辨識 (OCR) 是使用電腦視覺和機器學習技術從圖片中辨識字元的程序。這個參考應用程式示範如何使用 TensorFlow Lite 執行 OCR。它結合了文字偵測模型和文字辨識模型作為 OCR 管線,以辨識文字字元。
開始使用
如果您是 TensorFlow Lite 新手,並且正在使用 Android,建議您探索下列範例應用程式,協助您開始使用。
如果您使用的平台不是 Android,或者您已熟悉 TensorFlow Lite API,可以從 TF Hub 下載模型。
運作方式
OCR 工作通常分為兩個階段。首先,我們使用文字偵測模型偵測可能文字周圍的邊界框。其次,我們將處理過的邊界框饋送到文字辨識模型,以判斷邊界框內的特定字元 (在文字辨識之前,我們也需要執行非極大值抑制、透視轉換等等)。在本例中,這兩個模型均來自 TensorFlow Hub,並且是 FP16 量化模型。
效能基準
效能基準數字是使用這裡所述的工具產生。
模型名稱 | 模型大小 | 裝置 | CPU | GPU |
---|---|---|---|---|
文字偵測 | 45.9 Mb | Pixel 4 (Android 10) | 181.93 毫秒* | 89.77 毫秒* |
文字辨識 | 16.8 Mb | Pixel 4 (Android 10) | 338.33 毫秒* | 不適用** |
* 使用 4 個執行緒。
** 此模型無法使用 GPU 委派,因為我們需要 TensorFlow 運算元才能執行它
輸入
文字偵測模型接受 4D float32
張量,形狀為 (1, 320, 320, 3) 作為輸入。
文字辨識模型接受 4D float32
張量,形狀為 (1, 31, 200, 1) 作為輸入。
輸出
文字偵測模型傳回 4D float32
張量,形狀為 (1, 80, 80, 5) 作為邊界框,以及 4D float32
張量,形狀為 (1, 80, 80, 5) 作為偵測分數。
文字辨識模型傳回 2D float32
張量,形狀為 (1, 48) 作為字母列表「0123456789abcdefghijklmnopqrstuvwxyz」的對應索引
限制
目前的文字辨識模型是使用包含英文字母和數字的合成資料進行訓練,因此僅支援英文。
這些模型不夠通用,無法在實際環境中進行 OCR (例如,在低光源條件下使用智慧型手機相機拍攝的隨機圖片)。
因此,我們僅選擇 3 個 Google 產品標誌來示範如何使用 TensorFlow Lite 執行 OCR。如果您正在尋找可立即使用的生產級 OCR 產品,應考慮使用 Google ML Kit。ML Kit 在底層使用 TFLite,對於大多數 OCR 使用案例來說應該已足夠,但在某些情況下,您可能想要使用 TFLite 建構自己的 OCR 解決方案。以下是一些範例:
- 您有自己的文字偵測/辨識 TFLite 模型想要使用
- 您有特殊的業務需求 (亦即,辨識顛倒的文字),並且需要自訂 OCR 管線
- 您想要支援 ML Kit 未涵蓋的語言
- 您的目標使用者裝置不一定有安裝 Google Play 服務
參考資料
- OpenCV 文字偵測/辨識範例:https://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- 社群貢獻者提供的 OCR TFLite 社群專案:https://github.com/tulasiram58827/ocr_tflite
- OpenCV 文字偵測:https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
- 使用 OpenCV 的深度學習文字偵測:https://learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/