【发布时间】:2012-11-08 22:12:29
【问题描述】:
我开始使用 Tess4J 来看看它可以做什么。从我到目前为止所做的测试中,如果我像现在这样在图像文件中以结构化的水平方式输入文本,我可以拾取文本。但是,如果我开始旋转文本,我无法使用 Tess4J 拾取文本。 Tess4J 是否应该能够处理垂直、45 度等不同角度的文本?
【问题讨论】:
我开始使用 Tess4J 来看看它可以做什么。从我到目前为止所做的测试中,如果我像现在这样在图像文件中以结构化的水平方式输入文本,我可以拾取文本。但是,如果我开始旋转文本,我无法使用 Tess4J 拾取文本。 Tess4J 是否应该能够处理垂直、45 度等不同角度的文本?
【问题讨论】:
使用 Tess4j 进行校正
看看源代码Tess4j (Java JNA wrapper for Tesseract)。
我最近发布了这个答案 (Java image library to deskew and crop images)
回答:
您可以将ImageDeskew.getSkewAngle() 与ImageHelper.rotate(BufferedImage image, double angle) 结合使用。
tess4j项目的test文件夹Tesseract1Test.java有一个使用示例
public void testDoOCR_SkewedImage() throws Exception {
logger.info("doOCR on a skewed PNG image");
File imageFile = new File(this.testResourcesDataPath, "eurotext_deskew.png");
BufferedImage bi = ImageIO.read(imageFile);
ImageDeskew id = new ImageDeskew(bi);
double imageSkewAngle = id.getSkewAngle(); // determine skew angle
if ((imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))) {
bi = ImageHelper.rotateImage(bi, -imageSkewAngle); // deskew image
}
String expResult = "The (quick) [brown] {fox} jumps!\nOver the $43,456.78 <lazy> #90 dog";
String result = instance.doOCR(bi);
logger.info(result);
assertEquals(expResult, result.substring(0, expResult.length()));
}
【讨论】:
osdetect.cpp 在 Tesseract 中有一些方向和脚本检测机制。 Tess4J 没有带来这种情况,因此在这种情况下,最好与原始 c++ 代码进行交互。使用 Tesseract,可以使用 psm 参数(请参阅 this SO question 以获取完整的值列表)来表示“自动定向”。例如,psm -0 应该提供自动定向。
【讨论】:
除了作为 Tesseract 之上的简单包装器之外,Tess4J 不提供任何额外功能。因此,您必须在 OCR 之前确定倾斜角度并旋转图像。
【讨论】: