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