I really like the idea of moving to pure Java for deskewing. We chose not
to use tess4j earlier as a Java binding for tesseract because it requires
native code....[1]

If we can do it with another call to tesseract from the command line or if
there is a fairly lightweight pure Java, ASL 2.0 friendly image library
that works well, that would be great.

[1]
https://issues.apache.org/jira/browse/TIKA-2293

On Tue, Jan 12, 2021 at 8:28 PM Peter Kronenberg <[email protected]>
wrote:

> I'd been meaning to ask why you calculate the rotation with a Python
> script.  As far as I can tell, that is the only reason for the Python
> dependency, which just adds a little (lot?) more complexity to the whole
> project, as well as who knows how much extra overhead there is to make the
> Python call. (not to mention, it took me practically a whole day last week
> to get all the dependencies working on a Linux system in order to be able
> to run Rotation.py)
>
> But now, I have a more important reason to question this.  The Rotation
> script does not work very well.  I ran it on the attached files.  I started
> with the straight file and rotated them using Irfanview (15 = 1.5, 25 = 2.5)
> Rotation.py returns 0 for the 1 and 1.5 degree file.  And it returns 1 for
> the 2 degree file.  And it seems to always return an integer, or at least
> rounded to an integer.
>
> Here is a simple Java routine which does the same thing and it appears to be 
> far more accurate.  It uses Tess4j
>
> <dependency>
>   <groupId>net.sourceforge.tess4j</groupId>
>   <artifactId>tess4j</artifactId>
>   <version>4.5.4</version>
> </dependency>
>
>
> import com.recognition.software.jdeskew.ImageDeskew;
>
> import javax.imageio.ImageIO;
> import java.awt.image.BufferedImage;
> import java.io.File;
> import java.io.IOException;
>
> public class GetAngle {
>
>     public static void main(String[] args) throws IOException {
>         BufferedImage bi = ImageIO.read(new 
> File("c:\\Testfiles\\Dickens_skew25.png"));
>         ImageDeskew id = new ImageDeskew(bi);
>         double imageSkewAngle = id.getSkewAngle(); // determine skew angle
>         System.out.println(imageSkewAngle);
>     }
> }
>
> I've been poking around this code and might actually do the change we
> discussed about not doing the rotation when the angle is 0, as well as
> allowing rotation even if you're not doing the pre-processing.  I'd be glad
> to take a look at this as well if you think it's a worthwhile direction.
>

Reply via email to