光学文字認識 (OCR) は、コンピュータビジョンと機械学習手法を使用して、画像から文字を認識するプロセスです。このリファレンスアプリでは、TensorFlow Lite を使用して OCR を実行する方法についてデモで説明します。テキスト検出モデルとテキスト認識モデルを組み合わせて OCR パイプラインとして使用し、テキスト文字を認識します。
はじめに
TensorFlow Lite を初めて使用する場合、Android を使用する場合は、以下のサンプルアプリをご覧ください。
Android 以外のプラットフォームを使用する場合、または、すでに TensorFlow Lite API に精通している場合は、TF Hub からモデルをダウンロードできます。
使い方
一般的に、OCR タスクは 2 つのステージに分けられます。まず、テキスト検出モデルを使用して、テキストの可能性がある部分の周辺でバウンディングボックスを検出します。次に、処理されたバウンディングボックスをテキスト認識モデルに入力し、バウンディングボックス内の特定の文字を判定します (テキスト認識の前に、Non-Maximal Suppression、透視変換なども実行する必要があります)。このケースでは、両方のモデルが TensorFlow Lite Hub のモデルで、FP16 量子化モデルです。
パフォーマンスベンチマーク
パフォーマンスベンチマークの数値は、ここで説明するツールで生成されます。
モデル名 | モデルサイズ | デバイス | CPU | GPU |
---|---|---|---|---|
テキスト検出 | 45.9 Mb | Pixel 4 (Android 10) | 181.93ms* | 89.77ms* |
テキスト認識 | 16.8 Mb | Pixel 4 (Android 10) | 338.33ms* | N/A** |
- 4 つのスレッドを使用。
** このモデルでは、実行するために TensorFlow 演算が必要であるため、GPU デリゲートを使用できません。
入力
テキスト検出モデルでは、(1, 320, 320, 3) の 4-D float32
テンソルを入力できます。
テキスト認識モデルでは、(1, 31, 200, 1) の 4-D float32
テンソルを入力できます。
出力
テキスト検出モデルは、形状 (1, 80, 80, 5) の 4-D float32
テンソルをバウンディングボックスとして返し、形状 (1,80, 80, 5) の 4-D float32
テンソルを検出スコアとして返します。
テキスト認識モデルは、形状 (1, 48) の 2-D float32
テンソルをアルファベットリスト '0123456789abcdefghijklmnopqrstuvwxyz' へのマッピングインデックスとして返します。
制限事項
現在のテキスト認識モデルは、英語の文字と数字の合成データを使用してトレーニングされているため、英語のみがサポートされています。
モデルはそのままでは OCR 向けに十分な一般性がありません (低い光条件でスマートフォンカメラで撮影されたランダム画像のような状態)。
このため、TensorFlow Lite で OCR を実行する方法を示す目的で、3 つの Google 製品ロゴを選びました。すぐに使用できる本番グレードの 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/