从android中的图像中检测数字

Posted

技术标签:

【中文标题】从android中的图像中检测数字【英文标题】:digit detection from the image in android 【发布时间】:2014-10-30 06:28:23 【问题描述】:

我正在寻找如何从 android 中的图像中提取数字数字。我必须拍照,然后我需要从图像中获取数字。 OpenCV 是一种选择。我们可以将 opencv 转换为 android 吗?请建议我任何适当的方法。我会很感激你的。

【问题讨论】:

实际要求是什么? 检查this和this post 【参考方案1】:

Android 有很多 OCR 检查那里的链接

    https://github.com/rmtheis/android-ocr https://github.com/GautamGupta/Simple-Android-OCR http://www.abbyy.com/mobileocr/android/ best OCR (Optical character recognition) example in android

【讨论】:

【参考方案2】:

OpenCV 支持 Android 平台。您必须设置 OpenCV4Android,这里是一步一步的说明。

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

然而,OpenCV 不是一个选项,而只是一个步骤。然后你必须使用字符识别引擎。最受欢迎的是 Tesseract-ocr。但这确实不是一件容易的事。

此外,它们通常可以识别所有字符。如果你能做到,提取数字将是 Java 中最简单的部分。

【讨论】:

【参考方案3】:

这对我有用,你只需要指定数字大小` ArrayList output=new ArrayList();

    cvtColor(input,input,COLOR_BGRA2GRAY);


    Mat img_threshold = new Mat();
    threshold(input, img_threshold, 60, 255,THRESH_BINARY_INV);
    Mat img_contours =copy(img_threshold);
    //Find contours of possibles characters


    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    findContours(img_contours, contours,new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE); // all pixels of each contours
    contours=sort(contours);


    // Draw blue contours on a white image
    Mat result=copy(img_threshold);
    cvtColor(result, result, COLOR_GRAY2BGR);
    drawContours(result,contours,
            -1, // draw all contours
            new Scalar(0,0,255), // in blue
            1); // with a thickness of 1


    //Start to iterate to each contour founded
    ListIterator<MatOfPoint> itc = contours.listIterator();

    //Remove patch that are no inside limits of aspect ratio and area.
    while (itc.hasNext())
    
        //Create bounding rect of object
        MatOfPoint mp = new MatOfPoint(itc.next().toArray());
        Rect mr = boundingRect(mp);
        rectangle(result,new Point(mr.x,mr.y),new Point(mr.x+mr.width,mr.y+mr.height),new Scalar(0,255,0));

        Mat auxRoi=new Mat(img_threshold,mr);


        if (OCR_verifySizes(auxRoi))
        
            output.add(preprocessChar(auxRoi));
        
    

    return output;`

【讨论】:

以上是关于从android中的图像中检测数字的主要内容,如果未能解决你的问题,请参考以下文章

Android自动裁剪相机捕获的图像

如何在android中的图像中获取单个数字文本位置?

如何在 android 中提高 OpenCV 人脸检测性能?

Android:如何在设置图像视图时检测从图库中选择的图像方向(纵向或横向)?

扫描图像并检测文本android [关闭]

如何从android中的jpeg图像中提取文本[关闭]