私は(画像の中心から私の場合にテキストの行を)画像をトリミング検出器の前に「フィルタ」を統合することによって、この機能を実装しています。
public class LineDetector extends Detector {
Detector mDelegate;
public LineDetector(Detector delegate) {
mDelegate = delegate;
}
@Override
public SparseArray detect(Frame frame) {
int width = frame.getMetadata().getWidth();
int height = frame.getMetadata().getHeight();
int mBoxHeight = height;
int mBoxWidth = Math.toIntExact(Math.round(mBoxHeight * ConstantsPool.CROP_BOX_ASPECT_RATIO));
int right = (width/2) + (mBoxWidth/2);
int left = (width/2) - (mBoxWidth/2);
int bottom = height;
int top = 0;
YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(left, top, right, bottom), 100, byteArrayOutputStream);
byte[] jpegArray = byteArrayOutputStream.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);
Frame croppedFrame = new Frame.Builder()
.setBitmap(bitmap)
.setRotation(frame.getMetadata().getRotation())
.build();
return mDelegate.detect(croppedFrame);
}
@Override
public boolean isOperational() {
return mDelegate.isOperational();
}
@Override
public boolean setFocus(int id) {
return mDelegate.setFocus(id);
}
}
そして、あなたは、次の方法でそれを使用することができます:以下のコードを見てください
TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build();
LineDetector lineDetector = new LineDetector(barcodeDetector);
lineDetector.setProcessor(...);
...
Camera2Source camera2Source = new Camera2Source.Builder(getContext(), lineDetector).build();
ご質問があれば、ちょうど(
トム
小さな長方形を尋ねます写真のように) - これは不明です。画像内のその矩形は、デバイス画面を通してユーザによって制御されているのですか?画像内のその矩形の座標情報を持っていますか?あなたの質問にいくつかの詳細を教えてください。 – flamelite
私は必要な結果の写真を追加しました。 この場合、アプリケーションはすべての情報を読み取るのではなく、四角形の情報のみを読み取ることができます(カメラはフルスクリーンですが、読み取りはその領域でのみ機能します)。 –