光学式文字認識 (OCR) は、コンピューター ビジョンと機械学習技術を使用して画像から文字を認識するプロセスです。このリファレンス アプリは、TensorFlow Lite を使用して OCR を実行する方法をデモします。テキスト検出モデルとテキスト認識モデルを組み合わせて OCR パイプラインとして使用し、テキスト文字を認識します。
始めましょう
TensorFlow Lite を初めて使用し、Android を使用している場合は、開始に役立つ次のサンプル アプリケーションを検討することをお勧めします。
Android 以外のプラットフォームを使用している場合、またはすでにTensorFlow Lite APIに精通している場合は、 TF Hubからモデルをダウンロードできます。
使い方
OCR タスクは多くの場合 2 つの段階に分けられます。まず、テキスト検出モデルを使用して、テキストの可能性のある周囲の境界ボックスを検出します。次に、処理された境界ボックスをテキスト認識モデルに入力して、境界ボックス内の特定の文字を決定します (テキスト認識の前に、非最大抑制、透視変換などを行う必要もあります)。私たちの場合、両方のモデルは TensorFlow Hub からのものであり、FP16 量子化モデルです。
パフォーマンスのベンチマーク
パフォーマンス ベンチマークの数値は、ここで説明するツールを使用して生成されます。
モデル名 | モデルサイズ | デバイス | CPU | GPU |
---|---|---|---|---|
テキスト検出 | 45.9MB | ピクセル 4 (Android 10) | 181.93ミリ秒* | 89.77ミリ秒* |
テキスト認識 | 16.8MB | ピクセル 4 (Android 10) | 338.33ミリ秒* | 該当なし** |
※糸は4本使用。
** このモデルを実行するには TensorFlow 演算が必要なため、このモデルは GPU デリゲートを使用できませんでした
入力
テキスト検出モデルは、(1, 320, 320, 3) の 4 次元float32
テンソルを入力として受け入れます。
テキスト認識モデルは、(1, 31, 200, 1) の 4 次元float32
テンソルを入力として受け入れます。
出力
テキスト検出モデルは、形状 (1, 80, 80, 5) の 4 次元float32
テンソルを境界ボックスとして返し、形状 (1,80, 80, 5) の 4 次元float32
テンソルを検出スコアとして返します。
テキスト認識モデルは、アルファベット リスト '0123456789abcdefghijklmnopqrstuvwxyz' へのマッピング インデックスとして、形状 (1, 48) の 2 次元float32
テンソルを返します。
制限事項
現在のテキスト認識モデルは、英語の文字と数字を含む合成データを使用してトレーニングされているため、英語のみがサポートされています。
これらのモデルは、実際の OCR には十分一般的ではありません (たとえば、暗い照明条件でスマートフォンのカメラで撮影されたランダムな画像など)。
したがって、TensorFlow Lite で OCR を実行する方法を示すためにのみ、3 つの Google 製品ロゴを選択しました。すぐに使用できる実稼働グレードの OCR 製品をお探しの場合は、 Google ML Kitを検討してください。 TFLite を下位に使用する ML Kit は、ほとんどの 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/