diff --git a/engine/pom.xml b/engine/pom.xml new file mode 100644 index 00000000..626047c4 --- /dev/null +++ b/engine/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + + + de.vorb + tesseract4java + 0.2.0-SNAPSHOT + + + engine + + + 0.6.0 + 0.6.0 + + 1.7.21 + 1.1.7 + + + + + org.deeplearning4j + deeplearning4j-core + ${dl4j.version} + + + org.deeplearning4j + deeplearning4j-nlp + ${dl4j.version} + + + org.deeplearning4j + deeplearning4j-ui + ${dl4j.version} + + + + org.nd4j + nd4j-native-platform + ${nd4j.version} + + + org.nd4j + nd4j-cuda-7.5 + ${nd4j.version} + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + + ch.qos.logback + logback-classic + ${logback.version} + + + + ch.qos.logback + logback-core + ${logback.version} + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.5.0 + + ${mainClass} + + + + + + diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/Box.java b/engine/src/main/java/de/vorb/tesseract/engine/model/Box.java new file mode 100644 index 00000000..ba016e82 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/Box.java @@ -0,0 +1,60 @@ +package de.vorb.tesseract.engine.model; + +import com.google.common.base.Objects; +import com.google.common.base.Preconditions; + +public class Box { + + private final Offset offset; + private final Dimension dimension; + + private Box(Offset offset, Dimension dimension) { + + Preconditions.checkNotNull(offset); + Preconditions.checkNotNull(dimension); + + this.offset = offset; + this.dimension = dimension; + } + + public Offset getOffset() { + return offset; + } + + public Dimension getDimension() { + return dimension; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + Box box = (Box) o; + + return offset.equals(box.offset) && dimension.equals(box.dimension); + } + + @Override + public int hashCode() { + int result = offset.hashCode(); + result = 31 * result + dimension.hashCode(); + return result; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("offset", offset) + .add("dimension", dimension) + .toString(); + } + + public static Box of(Offset offset, Dimension dimension) { + return new Box(offset, dimension); + } +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/DefaultTextSegment.java b/engine/src/main/java/de/vorb/tesseract/engine/model/DefaultTextSegment.java new file mode 100644 index 00000000..70c539fe --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/DefaultTextSegment.java @@ -0,0 +1,22 @@ +package de.vorb.tesseract.engine.model; + +class DefaultTextSegment implements TextSegment { + + private final Box boundingBox; + private final TextSegmentationLevel segmentationLevel; + + DefaultTextSegment(Box boundingBox, TextSegmentationLevel segmentationLevel) { + this.boundingBox = boundingBox; + this.segmentationLevel = segmentationLevel; + } + + @Override + public Box getBoundingBox() { + return null; + } + + @Override + public TextSegmentationLevel getLevel() { + return null; + } +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/Dimension.java b/engine/src/main/java/de/vorb/tesseract/engine/model/Dimension.java new file mode 100644 index 00000000..d21d973d --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/Dimension.java @@ -0,0 +1,55 @@ +package de.vorb.tesseract.engine.model; + +import com.google.common.base.Objects; + +public class Dimension { + + private final int width; + private final int height; + + private Dimension(int width, int height) { + this.width = width; + this.height = height; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + Dimension that = (Dimension) o; + + return width == that.width && height == that.height; + } + + @Override + public int hashCode() { + int result = width; + result = 31 * result + height; + return result; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("width", width) + .add("height", height) + .toString(); + } + + public static Dimension of(int width, int height) { + return new Dimension(width, height); + } +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/Offset.java b/engine/src/main/java/de/vorb/tesseract/engine/model/Offset.java new file mode 100644 index 00000000..75972763 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/Offset.java @@ -0,0 +1,55 @@ +package de.vorb.tesseract.engine.model; + +import com.google.common.base.Objects; + +public class Offset { + + private final int left; + private final int top; + + private Offset(int left, int top) { + this.left = left; + this.top = top; + } + + public int getLeft() { + return left; + } + + public int getTop() { + return top; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + Offset that = (Offset) o; + + return left == that.left && top == that.top; + } + + @Override + public int hashCode() { + int result = left; + result = 31 * result + top; + return result; + } + + @Override + public String toString() { + return Objects.toStringHelper(this) + .add("left", left) + .add("top", top) + .toString(); + } + + public static Offset of(int left, int top) { + return new Offset(left, top); + } +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/Segment.java b/engine/src/main/java/de/vorb/tesseract/engine/model/Segment.java new file mode 100644 index 00000000..72337c22 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/Segment.java @@ -0,0 +1,9 @@ +package de.vorb.tesseract.engine.model; + +public interface Segment { + + Box getBoundingBox(); + + + +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/TextSegment.java b/engine/src/main/java/de/vorb/tesseract/engine/model/TextSegment.java new file mode 100644 index 00000000..6909285b --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/TextSegment.java @@ -0,0 +1,7 @@ +package de.vorb.tesseract.engine.model; + +public interface TextSegment extends Segment { + + TextSegmentationLevel getLevel(); + +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/model/TextSegmentationLevel.java b/engine/src/main/java/de/vorb/tesseract/engine/model/TextSegmentationLevel.java new file mode 100644 index 00000000..614d3689 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/model/TextSegmentationLevel.java @@ -0,0 +1,15 @@ +package de.vorb.tesseract.engine.model; + +public enum TextSegmentationLevel { + + SYMBOL, + WORD, + TEXT_LINE, + PARAGRAPH, + BLOCK; + + public TextSegment getSegmentWith(Box boundingBox) { + return new DefaultTextSegment(boundingBox, this); + } + +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/segmentation/ImageSegmentationOptions.java b/engine/src/main/java/de/vorb/tesseract/engine/segmentation/ImageSegmentationOptions.java new file mode 100644 index 00000000..38971cf6 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/segmentation/ImageSegmentationOptions.java @@ -0,0 +1,4 @@ +package de.vorb.tesseract.engine.segmentation; + +public class ImageSegmentationOptions { +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/segmentation/ImageSegmenter.java b/engine/src/main/java/de/vorb/tesseract/engine/segmentation/ImageSegmenter.java new file mode 100644 index 00000000..b1160c66 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/segmentation/ImageSegmenter.java @@ -0,0 +1,4 @@ +package de.vorb.tesseract.engine.segmentation; + +public interface ImageSegmenter { +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/segmentation/impl/SimpleImageSegmenter.java b/engine/src/main/java/de/vorb/tesseract/engine/segmentation/impl/SimpleImageSegmenter.java new file mode 100644 index 00000000..63f22efa --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/segmentation/impl/SimpleImageSegmenter.java @@ -0,0 +1,4 @@ +package de.vorb.tesseract.engine.segmentation.impl; + +public class ParallelImageSegmenter { +} diff --git a/engine/src/main/java/de/vorb/tesseract/engine/util/ImageUtils.java b/engine/src/main/java/de/vorb/tesseract/engine/util/ImageUtils.java new file mode 100644 index 00000000..771cb496 --- /dev/null +++ b/engine/src/main/java/de/vorb/tesseract/engine/util/ImageUtils.java @@ -0,0 +1,19 @@ +package de.vorb.tesseract.engine.util; + +import de.vorb.tesseract.engine.model.Box; + +import java.awt.image.BufferedImage; + +public final class ImageHelper { + + private ImageHelper() {} + + public static BufferedImage getSubImageForBoundingBox(BufferedImage source, Box boundingBox) { + return source.getSubimage( + boundingBox.getOffset().getLeft(), + boundingBox.getOffset().getTop(), + boundingBox.getDimension().getWidth(), + boundingBox.getDimension().getHeight()); + } + +} diff --git a/pom.xml b/pom.xml index 7e55dd78..20cd9041 100644 --- a/pom.xml +++ b/pom.xml @@ -9,9 +9,17 @@ 0.2.0-SNAPSHOT pom + + io.spring.platform + platform-bom + 2.0.8.RELEASE + + + gui tools + engine @@ -20,4 +28,16 @@ 1.8 + + + org.springframework + spring-context + + + + com.google.guava + guava + + +