文字识别应用程序

问题描述 投票:0回答:1

现在我正在尝试制作可以识别文本的相机应用程序。为此,我使用来自谷歌指南的信息。该网站介绍了如何制作全屏阅读器。但我需要在小矩形中设置移动视觉文本扫描仪处于活动状态(如图所示)。条形码阅读器应用程序的屏幕截图(我需要相同的文本解决方案)。请帮助我)。

所需结果

computer-vision ocr text-recognition android-vision
1个回答
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(textRecognizer);
lineDetector.setProcessor(...);
...
Camera2Source camera2Source = new Camera2Source.Builder(getContext(), lineDetector).build();

如果您有任何疑问,请询问

汤姆

© www.soinside.com 2019 - 2024. All rights reserved.