Android - 从图像中裁剪文本(使用 openCV 或其他任何东西)

Posted

技术标签:

【中文标题】Android - 从图像中裁剪文本(使用 openCV 或其他任何东西)【英文标题】:Android - Crop text from image (using openCV or anything else) 【发布时间】:2018-10-08 10:44:17 【问题描述】:

我是一个初学者,我正在尝试为 OCR 进程制作一个 android 模块。为了优化这个过程,我试图自动裁剪图像的文本部分。我一直在挣扎,但我就是做不到。我找到了几个教程,比如this one,但它不在 java 中,我的大脑无法工作。任何帮助将不胜感激,我仍在努力学习。已经研究了几天了。

目前使用 openCV 进行一些后期处理以提高准确性,并从图像中提取数据(来自某些机器的收据)我正在使用正则表达式来获取相关数据(数据、时间、机器编号 5 位和一些是 6 位数,有时它不起作用,这是我现在所能想到的)。

尽量改进流程。如果需要,我可以提供代码,但这完全是一团糟。我已经为 opencv 处理创建了一个单独的 android studio 项目。

抱歉,文字太长,希望改进(我认为我真的是初学者)。非常感谢!

忘了提 - 使用 TESSERACT 进行 OCR 处理,使用 openCV 进行图像处理。该应用程序将被一些不太懂技术的人使用,我想使用手动裁剪工具,但它不会有太大用处。 全部在设备上完成,无法连接互联网。

需要裁剪图片的文字部分

还有在文本上创建框的附加代码(具有一定的准确性)

仍然愿意接受有关如何提高准确性的建议,谢谢!

public Vector<Rect> detectLetters(Mat img)
    Mat img_gray = new Mat();
    Mat img_sobel = new Mat();
    Mat img_threshold = new Mat();
    Mat element = new Mat();
    Mat contourOutput = new Mat();

    Vector<Rect> boundRect = new Vector<>();

    Imgproc.cvtColor(img, img_gray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.Sobel(img_gray, img_sobel, CvType.CV_8U, 1,0,3,1,0,BORDER_DEFAULT);
    Imgproc.threshold(img_sobel, img_threshold, 0, 255, Imgproc.THRESH_OTSU+Imgproc.THRESH_BINARY);
    element = getStructuringElement(MORPH_RECT, new Size(30,30));
    Imgproc.morphologyEx(img_threshold, img_threshold, 3, element);

    List<MatOfPoint> contours = new ArrayList<>();
    Imgproc.findContours(img_threshold, contours, contourOutput, 0, 1);
    Iterator<MatOfPoint> iterator = contours.iterator();

    List<MatOfPoint> contours_poly = new ArrayList<>(contours.size());

    for (int i=0; i<contours.size(); i++)
        if(contours.get(i).toArray().length > 100)
            double epsilon = 0.1*Imgproc.arcLength(new MatOfPoint2f(contours.get(1).toArray()),true);
            MatOfPoint2f approx = new MatOfPoint2f();
            Imgproc.approxPolyDP(new MatOfPoint2f(contours.get(1).toArray()),approx,epsilon,true);
            Rect appRect = Imgproc.boundingRect(contours.get(i));

            if(appRect.width > appRect.height);
            boundRect.add(appRect);
        
    
    return boundRect;

【问题讨论】:

maketecheasier.com/convert-image-to-text-ocr-android ? @IshitaSinha 谢谢,但目前希望自动检测文本区域。 【参考方案1】:

你需要ML Kit Text Recognition吗?

【讨论】:

我也遇到过,不记得我是否没有尝试过使用它或者使用它时存在一些问题。该过程无法在 Cloud 中完成,也不是个人项目,因此可能包含价格和限制,不确定。将尝试调查它,谢谢! 你也可以查看这个项目Mobile Vision Text Recognition API它是ML Kit的前身。 好的,会调查的,谢谢。虽然我认为使用谷歌视觉/它的派生仍然有一些限制。

以上是关于Android - 从图像中裁剪文本(使用 openCV 或其他任何东西)的主要内容,如果未能解决你的问题,请参考以下文章

android从图库中裁剪图像nullpointerexception

无法在android中裁剪图像

如何裁剪从android资源文件夹(@mipmap)获取的图像?

如何使用默认裁剪意图裁剪 android marshmallow 中的图像?

Android 从 Intent 获取裁剪图像的 URI

从相机裁剪图像(android)