Android の Mobile Vision API を使って バーコードを検出する
の続きです。
概要
前回の記事では、カメラからの連続画像からバーコードを検出した。
今回の記事では、カメラからの連続画像から文字列 (Text) を検出する。
下記の公式サンプルコードでは、カメラの制御に 旧来の Cameara API を使っている。
この記事では、Camera2 API を使って 同様の機能を持つ アプリを作成する。
前回の記事で作成したバーコード検出のアプリをベースにする。
余談 : 文字列検出 (Text Detection) のこともを OCR (光学的文字認識 Optical Character Recognition) とも言う。
(Text と Character, Detection とRecognition, 同じ意味合いだが、微妙な違いがある。
Mobile Vision API の設定
AndroidManifest.xml を変更する
<!-- バーコード検出のとき -->
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="face" />
<!-- 文字列検出のとき -->
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="ocr" />
文字列を検出する
顔検出やバーコード検出のときと同様の処理を行う。
TextRecognizer
TextRecognizer を生成する
OcrDetectorProcessor processor
TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();
textRecognizer.setProcessor( processor );
余談 : 検出器 (Detector) の名称は、
顔検出 と バーコード検出のときは、 FaceDetector とBarcodeDetector ですが、文字列検出は TextRecognizer です。
FrameProcessor
カメラからの連続画像を受け取り TextRecognizer に渡すためのFrameProcessor クラスを作成する。
このクラスは、バーコード検出のものをそのまま流用する。
余談 : 検出の結果を受け取るための クラス は、
顔検出やバーコード検出のときは、Tracker を継承していて、
名称も Tracker です。
文字列検出だけ、やり方が違う理由は、わからない。
reference : Detector.Processor
検出した文字列の上に長方形を表示する
顔検出やバーコード検出のときと同様の処理を行う。
ViewGroup を継承した CameraSourcePreview を作成する。
CameraSourcePreview の子のビューとして、カメラのプレビュー画面を表示する TextureView と長方形を表示するオーバーレイ用の View を作成する。
複数の文字列から1つを選ぶ
画面をタッチして選択する。
タッチした画面の位置と文字列の長方形の位置から、近くにあるものを選択する。
余談 : バーコード検出と、コードが微妙に違うが、気にしないことに。
スクリーンショット
サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Vision4