diff --git a/.gitignore b/.gitignore
index 2531f82e..6be03663 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,7 @@
*.iml
target/
/gui/hs_err_pid*.log
+**/.vscode
+**/.settings
+**/.classpath
+**/.project
\ No newline at end of file
diff --git a/README.md b/README.md
index 14b981c6..8b2fc31f 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,8 @@ by Paul Vorbach (German).
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LF8T2JP2YUUUE)
+## Usage
+Basic usage is documented on [our wiki page](https://github.com/tesseract4java/tesseract4java/wiki/Usage)
## Download
diff --git a/gui/pom.xml b/gui/pom.xml
index 64fa5ab6..d3f526fc 100644
--- a/gui/pom.xml
+++ b/gui/pom.xml
@@ -34,7 +34,7 @@
junit
junit
- 4.12
+ 4.13.1
test
diff --git a/gui/src/main/java/de/vorb/tesseract/gui/controller/TesseractController.java b/gui/src/main/java/de/vorb/tesseract/gui/controller/TesseractController.java
index d11f7db7..dc6a3513 100644
--- a/gui/src/main/java/de/vorb/tesseract/gui/controller/TesseractController.java
+++ b/gui/src/main/java/de/vorb/tesseract/gui/controller/TesseractController.java
@@ -1,5 +1,6 @@
package de.vorb.tesseract.gui.controller;
+import com.google.common.collect.Lists;
import de.vorb.tesseract.gui.io.BoxFileReader;
import de.vorb.tesseract.gui.io.BoxFileWriter;
import de.vorb.tesseract.gui.io.PlainTextWriter;
@@ -49,8 +50,6 @@
import de.vorb.tesseract.util.TraineddataFiles;
import de.vorb.tesseract.util.feat.Feature3D;
import de.vorb.util.FileNames;
-
-import com.google.common.collect.Lists;
import eu.digitisation.input.Batch;
import eu.digitisation.input.Parameters;
import eu.digitisation.input.WarningException;
@@ -231,6 +230,8 @@ public TesseractController() {
try {
pageRecognitionProducer.init();
+ pageRecognitionProducer.setPageSegmentationMode(getPageSegmentationMode());
+
} catch (IOException e) {
e.printStackTrace();
}
@@ -1141,6 +1142,21 @@ private void handlePreferences() {
final String editorFont = (String) prefDialog.getComboEditorFont().getSelectedItem();
globalPrefs.put(PreferencesDialog.KEY_EDITOR_FONT, editorFont);
+ // Update the page segmentation mode if necessary
+ int currentPageSegMode = getPageSegmentationMode();
+ int pageSegMode = prefDialog.getPageSegmentationMode();
+ boolean hasPageSegModeChanged = currentPageSegMode != pageSegMode;
+ if (hasPageSegModeChanged) {
+ globalPrefs.putInt(PreferencesDialog.KEY_PAGE_SEG_MODE, pageSegMode);
+ pageRecognitionProducer.setPageSegmentationMode(pageSegMode);
+
+ // Update model with new segmentation mode
+ if (activeComponent instanceof PageModelComponent) {
+ final Optional pm = ((PageModelComponent) activeComponent).getPageModel();
+ pm.ifPresent(it -> setImageModel(Optional.of(it.getImageModel())));
+ }
+ }
+
view.getRecognitionPane().setRenderingFont(renderingFont);
if (view.getActiveComponent() == view.getRecognitionPane()) {
view.getRecognitionPane().render();
@@ -1241,6 +1257,10 @@ private void handleTesseractTrainer() {
trainer.setVisible(true);
}
+ private int getPageSegmentationMode() {
+ return PreferencesUtil.getPreferences().getInt(PreferencesDialog.KEY_PAGE_SEG_MODE, PreferencesDialog.DEFAULT_PSM_MODE);
+ }
+
public void setPageModel(Optional model) {
if (projectModel.isPresent() && model.isPresent()) {
try {
diff --git a/gui/src/main/java/de/vorb/tesseract/gui/view/dialogs/PreferencesDialog.java b/gui/src/main/java/de/vorb/tesseract/gui/view/dialogs/PreferencesDialog.java
index ba9e8e61..f54c69ab 100644
--- a/gui/src/main/java/de/vorb/tesseract/gui/view/dialogs/PreferencesDialog.java
+++ b/gui/src/main/java/de/vorb/tesseract/gui/view/dialogs/PreferencesDialog.java
@@ -26,15 +26,35 @@
public class PreferencesDialog extends JDialog {
private static final long serialVersionUID = 1L;
+ private static final String[] PSM_MODES = {
+ "0 - PSM_OSD_ONLY",
+ "1 - PSM_AUTO_OSD",
+ "2 - PSM_AUTO_ONLY",
+ "3 - (DEFAULT) PSM_AUTO",
+ "4 - PSM_SINGLE_COLUMN",
+ "5 - PSM_SINGLE_BLOCK_VERT_TEXT",
+ "6 - PSM_SINGLE_BLOCK",
+ "7 - PSM_SINGLE_LINE",
+ "8 - PSM_SINGLE_WORD",
+ "9 - PSM_CIRCLE_WORD",
+ "10 - PSM_SINGLE_CHAR",
+ "11 - PSM_SPARSE_TEXT",
+ "12 - PSM_SPARSE_TEXT_OSD",
+ "13 - PSM_RAW_LINE",
+ };
+ public static final int DEFAULT_PSM_MODE = 3;
+
public static final String KEY_LANGDATA_DIR = "langdata_dir";
public static final String KEY_RENDERING_FONT = "rendering_font";
public static final String KEY_EDITOR_FONT = "editor_font";
+ public static final String KEY_PAGE_SEG_MODE = "page_seg_mode";
private final JPanel contentPanel = new JPanel();
private JTextField tfLangdataDir;
private final JComboBox comboRenderingFont;
private final JComboBox comboEditorFont;
+ private final JComboBox comboPageSegMode;
private ResultState resultState = ResultState.CANCEL;
@@ -134,48 +154,20 @@ public PreferencesDialog() {
final GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
final String[] availableFontFamilyNames = graphicsEnvironment.getAvailableFontFamilyNames();
- {
- JLabel lblRenderingFont = new JLabel("Rendering font:");
- GridBagConstraints gbc_lblRenderingFont = new GridBagConstraints();
- gbc_lblRenderingFont.anchor = GridBagConstraints.EAST;
- gbc_lblRenderingFont.insets = new Insets(0, 0, 0, 5);
- gbc_lblRenderingFont.gridx = 0;
- gbc_lblRenderingFont.gridy = 2;
- contentPanel.add(lblRenderingFont, gbc_lblRenderingFont);
- }
- {
- comboRenderingFont = new JComboBox<>();
- GridBagConstraints gbc_comboRenderingFont = new GridBagConstraints();
- gbc_comboRenderingFont.insets = new Insets(0, 0, 0, 5);
- gbc_comboRenderingFont.fill = GridBagConstraints.HORIZONTAL;
- gbc_comboRenderingFont.gridx = 1;
- gbc_comboRenderingFont.gridy = 2;
- contentPanel.add(comboRenderingFont, gbc_comboRenderingFont);
-
- Arrays.stream(availableFontFamilyNames).forEach(comboRenderingFont::addItem);
- comboRenderingFont.setSelectedItem(pref.get(PreferencesDialog.KEY_RENDERING_FONT, Font.SANS_SERIF));
- }
- {
- JLabel lblEditorFont = new JLabel("Editor font:");
- GridBagConstraints gbc_lblEditorFont = new GridBagConstraints();
- gbc_lblEditorFont.anchor = GridBagConstraints.EAST;
- gbc_lblEditorFont.insets = new Insets(0, 0, 0, 5);
- gbc_lblEditorFont.gridx = 0;
- gbc_lblEditorFont.gridy = 3;
- contentPanel.add(lblEditorFont, gbc_lblEditorFont);
- }
- {
- comboEditorFont = new JComboBox<>();
- GridBagConstraints gbc_comboEditorFont = new GridBagConstraints();
- gbc_comboEditorFont.insets = new Insets(0, 0, 0, 5);
- gbc_comboEditorFont.fill = GridBagConstraints.HORIZONTAL;
- gbc_comboEditorFont.gridx = 1;
- gbc_comboEditorFont.gridy = 3;
- contentPanel.add(comboEditorFont, gbc_comboEditorFont);
-
- Arrays.stream(availableFontFamilyNames).forEach(comboEditorFont::addItem);
- comboEditorFont.setSelectedItem(pref.get(PreferencesDialog.KEY_EDITOR_FONT, Font.MONOSPACED));
- }
+ // Rendering font
+ addGridLabel(0, 2, "Rendering font:");
+ final String initialFontFamilyName = pref.get(PreferencesDialog.KEY_EDITOR_FONT, Font.SANS_SERIF);
+ comboRenderingFont = createGridComboBox(1, 2, availableFontFamilyNames, initialFontFamilyName);
+
+ // Editor font
+ addGridLabel(0, 3, "Editor font:");
+ final String initialEditorFontFamilyName = pref.get(PreferencesDialog.KEY_RENDERING_FONT, Font.MONOSPACED);
+ comboEditorFont = createGridComboBox(1, 3, availableFontFamilyNames, initialEditorFontFamilyName);
+
+ // Page Segmentation Modes
+ addGridLabel(0, 4, "Page Segmentation Mode:");
+ final int pageSegMode = pref.getInt(PreferencesDialog.KEY_PAGE_SEG_MODE, DEFAULT_PSM_MODE);
+ comboPageSegMode = createGridComboBox(1, 4, PSM_MODES, PSM_MODES[pageSegMode]);
pack();
setMinimumSize(getSize());
@@ -197,9 +189,39 @@ public JComboBox getComboEditorFont() {
return comboEditorFont;
}
+ public int getPageSegmentationMode() {
+ return comboPageSegMode.getSelectedIndex();
+ }
+
public ResultState showPreferencesDialog(Component parent) {
setLocationRelativeTo(parent);
setVisible(true);
return resultState;
}
+
+ private Component addGridLabel(int gridX, int gridY, String label) {
+ JLabel jLabel = new JLabel(label);
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.anchor = GridBagConstraints.EAST;
+ constraints.insets = new Insets(0, 0, 0, 5);
+ constraints.gridx = gridX;
+ constraints.gridy = gridY;
+ contentPanel.add(jLabel, constraints);
+ return jLabel;
+ }
+
+ private JComboBox createGridComboBox(int gridX, int gridY, T[] options, T selectedItem) {
+ JComboBox jComboBox = new JComboBox<>();
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.insets = new Insets(0, 0, 0, 5);
+ constraints.fill = GridBagConstraints.HORIZONTAL;
+ constraints.gridx = gridX;
+ constraints.gridy = gridY;
+ contentPanel.add(jComboBox, constraints);
+
+ Arrays.stream(options).forEach(jComboBox::addItem);
+ jComboBox.setSelectedItem(selectedItem);
+ return jComboBox;
+ }
+
}
diff --git a/gui/src/main/java/de/vorb/tesseract/gui/work/PageRecognitionProducer.java b/gui/src/main/java/de/vorb/tesseract/gui/work/PageRecognitionProducer.java
index 11acc9a1..bb3e50ed 100644
--- a/gui/src/main/java/de/vorb/tesseract/gui/work/PageRecognitionProducer.java
+++ b/gui/src/main/java/de/vorb/tesseract/gui/work/PageRecognitionProducer.java
@@ -30,6 +30,7 @@ public class PageRecognitionProducer extends RecognitionProducer {
private final TesseractController controller;
private final HashMap variables = new HashMap<>();
+ private int pageSegmentationMode = tesseract.PSM_AUTO;
public PageRecognitionProducer(TesseractController controller,
Path tessdataDir, String trainingFile) {
@@ -67,7 +68,7 @@ public void reset() throws IOException {
tesseract.OEM_DEFAULT);
// set page segmentation mode
- tesseract.TessBaseAPISetPageSegMode(getHandle(), tesseract.PSM_AUTO);
+ tesseract.TessBaseAPISetPageSegMode(getHandle(), pageSegmentationMode);
// set variables
for (Entry var : variables.entrySet()) {
@@ -80,6 +81,11 @@ public void close() throws IOException {
tesseract.TessBaseAPIDelete(getHandle());
}
+ public void setPageSegmentationMode(int pageSegmentationMode) {
+ this.pageSegmentationMode = pageSegmentationMode;
+ tesseract.TessBaseAPISetPageSegMode(getHandle(), pageSegmentationMode);
+ }
+
public void loadImage(Path imageFile) {
if (lastPix.isPresent()) {
// destroy old pix
diff --git a/ocrevalUAtion/pom.xml b/ocrevalUAtion/pom.xml
index e12af5dd..45b5a58e 100644
--- a/ocrevalUAtion/pom.xml
+++ b/ocrevalUAtion/pom.xml
@@ -29,7 +29,7 @@
UTF-8
- 1.6
+ 1.7
@@ -39,8 +39,8 @@
maven-compiler-plugin
3.1
- 1.6
- 1.6
+ 1.7
+ 1.7
true
@@ -198,7 +198,7 @@
junit
junit
- 4.11
+ 4.13.1
test