Как мне отделить текстовую область от изображения в Java

Я работаю над распознаванием паспортных данных, так как я использую Tesseract Java API. Чтобы добиться большей точности, мне нужно разделить все изображение (может быть.png,.jpeg,.tiff) только на текстовые области. Есть ли библиотека Java с открытым исходным кодом, которая отделяет текстовые области от изображения. Пожалуйста, дайте мне какие-либо предложения по этому поводу.

2 ответа

Марвин предоставляет метод именно для этой цели.

public static java.util.List<MarvinSegment> findTextRegions(MarvinImage imageIn,
                                        int maxWhiteSpace,
                                        int maxFontLineWidth,
                                        int minTextWidth,
                                        int grayScaleThreshold)

Входное изображение:

введите описание изображения здесь

Выходное изображение:

введите описание изображения здесь

Исходный код:

import static marvin.MarvinPluginCollection.*;

public class TextRegions{

        public static void main(String[] args) {

        MarvinImage image = MarvinImageIO.loadImage("./res/passport.png");
        MarvinImage originalImage = image.clone();
        List<MarvinSegment> segments = findTextRegions(image, 15, 8, 30, 150);

        for(MarvinSegment s:segments){
            if(s.height >= 5){
                originalImage.drawRect(s.x1, s.y1, s.x2-s.x1, s.y2-s.y1, Color.red);
            }
        }

        MarvinImageIO.saveImage(originalImage, "./res/passport_2.png");
    }
}

Лучше всего использовать OpenCV (есть привязки для Java).

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

Другие вопросы по тегам