光学式文字認識(OCR)は、コンピュータービジョンと機械学習技術を使用して画像から文字を認識するプロセスです。このリファレンスアプリは、TensorFlowLiteを使用してOCRを実行する方法をデモします。テキスト文字を認識するためのOCRパイプラインとして、テキスト検出モデルとテキスト認識モデルの組み合わせを使用します。
始めましょう
TensorFlow Liteを初めて使用し、Androidを使用している場合は、開始に役立つ次のサンプルアプリケーションを調べることをお勧めします。
Android以外のプラットフォームを使用している場合、またはTensorFlow Lite APIに既に精通している場合は、TFHubからモデルをダウンロードできます。
使い方
OCRタスクは多くの場合2つの段階に分けられます。まず、テキスト検出モデルを使用して、可能なテキストの周囲の境界ボックスを検出します。次に、処理されたバウンディングボックスをテキスト認識モデルにフィードして、バウンディングボックス内の特定の文字を決定します(テキスト認識の前に、非最大抑制、遠近法変換なども実行する必要があります)。この場合、両方のモデルはTensorFlow Hubからのものであり、FP16量子化モデルです。
パフォーマンスベンチマーク
パフォーマンスベンチマークの数値は、ここで説明するツールを使用して生成されます。
モデル名 | モデルサイズ | デバイス | CPU | GPU |
---|---|---|---|---|
テキスト検出 | 45.9 Mb | Pixel 4(Android 10) | 181.93ms * | 89.77ms * |
テキスト認識 | 16.8 Mb | Pixel 4(Android 10) | 338.33ms * | 該当なし** |
*使用される4つのスレッド。
**このモデルを実行するにはTensorFlowopsが必要なため、このモデルはGPUデリゲートを使用できませんでした
入力
テキスト検出モデルは、入力として(1、320、320、3)の4- float32
テンソルを受け入れます。
テキスト認識モデルは、入力として(1、31、200、1)の4次元float32
テンソルを受け入れます。
出力
テキスト検出モデルは、形状(1、80、80、5)の4-D float32
テンソルを境界ボックスとして返し、形状(1,80、80、5)の4- float32
テンソルを検出スコアとして返します。
テキスト認識モデルは、アルファベットリスト「0123456789abcdefghijklmnopqrstuvwxyz」へのマッピングインデックスとして、形状(1、48)の2次元float32
テンソルを返します。
制限事項
現在のテキスト認識モデルは、英語の文字と数字を含む合成データを使用してトレーニングされているため、英語のみがサポートされています。
モデルは、実際のOCRには十分に一般的ではありません(たとえば、低照明条件でスマートフォンのカメラによって撮影されたランダムな画像)。
そのため、TensorFlow LiteでOCRを実行する方法を示すために、3つのGoogle製品ロゴのみを選択しました。すぐに使用できる製品グレードのOCR製品をお探しの場合は、 GoogleMLキットを検討する必要があります。 TFLiteを使用するMLキットは、ほとんどのOCRユースケースに十分なはずですが、TFLiteを使用して独自のOCRソリューションを構築したい場合もあります。いくつかの例は次のとおりです。
- 使用したい独自のテキスト検出/認識TFLiteモデルがあります
- 特別なビジネス要件(つまり、逆さまになっているテキストの認識)があり、OCRパイプラインをカスタマイズする必要があります
- MLキットでカバーされていない言語をサポートしたい
- ターゲットユーザーのデバイスに必ずしもGooglePlayサービスがインストールされているとは限りません
参考文献
- OpenCVテキスト検出/認識の例: https ://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- コミュニティ貢献者によるOCRTFLiteコミュニティプロジェクト: 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/