2

Google CodeLabs サンプル コードと同じように、パイプラインを使用してテキストを検出しています。CameraSource が TextRecognizer に送信するプレビュー フレームを取得するにはどうすればよいですか?

4

1 に答える 1

5

プレビュー フレームは、テキスト認識エンジンを超えて送信されません。ただし、テキスト認識エンジンをラップして、検出前にプレビュー フレームを受け取るクラスを作成することもできます。ここで同様の議論を参照してください。

まず、テキスト認識エンジンをラップする検出器クラスを実装します。

class MyTextRecognizer extends Detector<TextBlock> {
  private Detector<TextBlock> mDelegate;

  MyTextRecognizer(Detector<TextBlock> delegate) {
    mDelegate = delegate;
  }

  public SparseArray<TextBlock> detect(Frame frame) {
    // *** add your code to access the preview frame here
    return mDelegate.detect(frame);
  }

  public boolean isOperational() {
    return mDelegate.isOperational();
  }

  public boolean setFocus(int id) {
    return mDelegate.setFocus(id);
  }
}

テキスト認識エンジンをクラスでラップし、クラスをカメラ ソースに渡します。次のようになります。

TextRecognizer textRecognizer = new TextRecognizer.Builder(context)
        .build();
TextRecognizer myTextRecognizer = new MyTextRecognizer(textRecognizer);

myTextRecognizer.setProcessor(/* include your processor here */);

mCameraSource = new CameraSource.Builder(context, myTextRecognizer)
        .build();

MyTextRecognizer は、生のフレーム データで最初に呼び出されます。

デバイスが回転している場合、画像が垂直にならない場合があることに注意してください。フレームの metadata.getRotation メソッドを使用して方向を取得できます。

1 つの注意点: 検出メソッドが返されたら、フレーム ピクセル データにアクセスしないでください。カメラ ソースはイメージ バッファをリサイクルするため、フレーム オブジェクトの内容は、メソッドが戻ると最終的にオーバーライドされます。

于 2016-09-06T15:15:27.337 に答える