Как мне отделить текстовую область от изображения в 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).
Проблема сложная, и нет решения, которое работает во всех случаях. Я бы проверил предложения из таких тем и попытался бы найти лучшее решение для вашего конкретного случая.