2017-11-14 14 views
1

今、私はテキストを認識できるカメラアプリを作ろうとしています。このため私は情報from guides by googleを使用します。このサイトでは、フルスクリーンリーダーの作成方法について説明します。しかし、私はMobile Visionのテキストスキャナを小さな矩形でアクティブにする必要があります(写真のように)。 Screenshot of barcode reader app(i need the same solution for text). Please help me).テキスト認識アプリ

required result

+0

小さな長方形を尋ねます写真のように) - これは不明です。画像内のその矩形は、デバイス画面を通してユーザによって制御されているのですか?画像内のその矩形の座標情報を持っていますか?あなたの質問にいくつかの詳細を教えてください。 – flamelite

+0

私は必要な結果の写真を追加しました。 この場合、アプリケーションはすべての情報を読み取るのではなく、四角形の情報のみを読み取ることができます(カメラはフルスクリーンですが、読み取りはその領域でのみ機能します)。 –

答えて

1

私は(画像の中心から私の場合にテキストの行を)画像をトリミング検出器の前に「フィルタ」を統合することによって、この機能を実装しています。

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(); 

ご質問があれば、ちょうど(

トム

関連する問題