Android - Обрезать текст из изображения (используя openCV или что-то еще) - PullRequest
0 голосов
/ 08 октября 2018

Я новичок, и я пытаюсь сделать модуль Android для процесса OCR.Чтобы оптимизировать процесс, я пытаюсь автоматически обрезать текстовую часть изображения.Я боролся, но я просто не могу это сделать.Я нашел пару обучающих программ, таких как , этот , но он не в java, и мой мозг просто не будет работать.Любая помощь будет оценена, я все еще пытаюсь учиться.Уже несколько дней занимаюсь исследованиями.

В настоящее время использую openCV для некоторой постобработки для повышения точности и извлечения данных из изображения (поступления от некоторых машин). Я использую регулярные выражения для получения соответствующих данных (данных,время, номер машины 5 цифр и некоторые цифры, которые 6 цифр, а иногда это не работает, это все, что я мог придумать на данный момент).

Попытка максимально улучшить процесс.При необходимости я могу предоставить код, но это полный беспорядок.Я создал отдельный андроид студийный проект только для обработки opencv.

Извините за длинный текст, ищущий улучшения (я думаю, я действительно новичок).Большое спасибо!

Забыл упомянуть - Используя TESSERACT для процесса распознавания, 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;
}

1 Ответ

0 голосов
/ 08 октября 2018

Является ли ML Kit Распознавание текста то, что вам нужно?

...