RED-7669: improve ocr

* fix pmd
This commit is contained in:
Kilian Schuettler 2024-05-13 11:35:57 +02:00
parent 18ba1daaef
commit 7b5a175440
2 changed files with 30 additions and 17 deletions

View File

@ -34,12 +34,16 @@ public class NativeLibrariesInitializer {
System.setProperty("jna.library.path", System.getenv("VCPKG_DYNAMIC_LIB")); System.setProperty("jna.library.path", System.getenv("VCPKG_DYNAMIC_LIB"));
log.info("Asserting Native Libraries loaded"); log.info("Asserting Native Libraries loaded");
NativeLibrary leptonicaLib = NativeLibrary.getInstance("leptonica");
assert leptonicaLib != null; try (NativeLibrary leptonicaLib = NativeLibrary.getInstance("leptonica")) {
log.info("Leptonica library loaded from {}", leptonicaLib.getFile().getAbsolutePath()); assert leptonicaLib != null;
NativeLibrary tesseractLib = NativeLibrary.getInstance("tesseract"); log.info("Leptonica library loaded from {}", leptonicaLib.getFile().getAbsolutePath());
assert tesseractLib != null; }
log.info("Tesseract library loaded from {}", tesseractLib.getFile().getAbsolutePath());
try (NativeLibrary tesseractLib = NativeLibrary.getInstance("tesseract")) {
assert tesseractLib != null;
log.info("Tesseract library loaded from {}", tesseractLib.getFile().getAbsolutePath());
}
} }
} }

View File

@ -85,15 +85,16 @@ public class OcrResultWriter {
} }
@SuppressWarnings("PMD")
private List<Rectangle2D> getTextBBoxes(Page page) { private List<Rectangle2D> getTextBBoxes(Page page) {
List<Rectangle2D> textBBoxes = new ArrayList<>(); List<Rectangle2D> textBBoxes = new ArrayList<>();
try (var textExtractor = new TextExtractor()) { try (var textExtractor = new TextExtractor()) {
textExtractor.begin(page); textExtractor.begin(page);
try { try {
for (TextExtractor.Line line = textExtractor.getFirstLine(); line.isValid(); line = line.getNextLine()) {
for (var word = line.getFirstWord(); word.isValid(); word = word.getNextWord()) { for (TextExtractor.Line line = textExtractor.getFirstLine(); line.isValid(); line = getNextLine(line)) {
for (TextExtractor.Word word = line.getFirstWord(); word.isValid(); word = getNextWord(word)) {
textBBoxes.add(Converter.toRectangle2D(word.getBBox())); textBBoxes.add(Converter.toRectangle2D(word.getBBox()));
} }
} }
@ -105,9 +106,19 @@ public class OcrResultWriter {
} }
private static Function<Integer, Integer> pageNumber1IdxTo0IdxMapper() { private static TextExtractor.Word getNextWord(TextExtractor.Word word) {
// PDFBox uses a 0-based index for page numbers internally, while we use a 1-based index
return p -> p - 1; TextExtractor.Word nextWord = word.getNextWord();
word.close();
return nextWord;
}
private static TextExtractor.Line getNextLine(TextExtractor.Line line) {
TextExtractor.Line newLine = line.getNextLine();
line.close();
return newLine;
} }
@ -133,7 +144,6 @@ public class OcrResultWriter {
} }
private VisualizationsOnPage createDebugTextVisualizations(List<OcrResultToWrite> ocrResultsToWrite, List<Rectangle2D> textBBoxes) { private VisualizationsOnPage createDebugTextVisualizations(List<OcrResultToWrite> ocrResultsToWrite, List<Rectangle2D> textBBoxes) {
List<TextPositionInImage> wordsToDraw = new ArrayList<>(); List<TextPositionInImage> wordsToDraw = new ArrayList<>();
@ -175,7 +185,6 @@ public class OcrResultWriter {
} }
private VisualizationsOnPage createDebugBBoxVisualizations(List<OcrResultToWrite> ocrResultsToWrite) { private VisualizationsOnPage createDebugBBoxVisualizations(List<OcrResultToWrite> ocrResultsToWrite) {
List<TextPositionInImage> words = ocrResultsToWrite.stream() List<TextPositionInImage> words = ocrResultsToWrite.stream()
@ -199,9 +208,9 @@ public class OcrResultWriter {
private List<ColoredLine> quadPointAsLines(QuadPoint rect) { private List<ColoredLine> quadPointAsLines(QuadPoint rect) {
return List.of(new ColoredLine(new Line2D.Double(rect.a(), rect.b()), Color.ORANGE, 1), return List.of(new ColoredLine(new Line2D.Double(rect.a(), rect.b()), Color.ORANGE, 1),
new ColoredLine(new Line2D.Double(rect.b(), rect.c()), Color.BLUE, 1), new ColoredLine(new Line2D.Double(rect.b(), rect.c()), Color.BLUE, 1),
new ColoredLine(new Line2D.Double(rect.c(), rect.d()), Color.GREEN, 1), new ColoredLine(new Line2D.Double(rect.c(), rect.d()), Color.GREEN, 1),
new ColoredLine(new Line2D.Double(rect.d(), rect.a()), Color.MAGENTA, 1)); new ColoredLine(new Line2D.Double(rect.d(), rect.a()), Color.MAGENTA, 1));
} }