使用 tesseract /tess4j OCR 进行文本嵌入图像方向检测
text embeded image orientation detection using tesseract /tess4j OCR
我有一个项目可以找到文本嵌入图像的旋转角度,我正在使用 Tess4j,所以我怎样才能获得图像的正确方向角 Tess4j 中是否有任何选项可以以正确的方向旋转图像...
如果我将图像作为输入,那么输出应该是正确方向的图像...第一张图像作为输入,第二张图像输出,所以我该怎么做....请帮助我
input image
desire output image
您可以使用 OpenCV 进行此操作。首先你需要计算图像的倾斜角度。然后,您可以按照找到的角度旋转图像。
你可以看看这个link。这真的很有帮助。但是你需要把它实现到Java.
Tess4J 支持确定图像的倾斜角度和旋转它。查看其 API documentation 页面了解更多信息。
用于图像方向和页面分割
public class TestOrientation {
public static void D() throws Exception {
TessAPI api=LoadLibs.getTessAPIInstance();
TessBaseAPI handle=TessAPI1.TessBaseAPICreate();
File tiff = new File("C:/Users/atul/Desktop/test1.tif");
String datapath = "C:/Tesseract/tessdata";
String language = "eng";
int expResult = TessPageSegMode.PSM_AUTO_OSD;
IntBuffer orientation = IntBuffer.allocate(1);
IntBuffer direction = IntBuffer.allocate(1);
IntBuffer order = IntBuffer.allocate(1);
FloatBuffer deskew_angle = FloatBuffer.allocate(1);
BufferedImage image = ImageIO.read(new FileInputStream(tiff)); // require jai-imageio lib to read TIFF
ByteBuffer buf = ImageIOHelper.convertImageData(image);
int bpp = image.getColorModel().getPixelSize();
int bytespp = bpp / 8;
int bytespl = (int) Math.ceil(image.getWidth() * bpp / 8.0);
api.TessBaseAPIInit3(handle, datapath, language);
api.TessBaseAPISetPageSegMode(handle, TessPageSegMode.PSM_AUTO_OSD);
int actualResult = api.TessBaseAPIGetPageSegMode(handle);
api.TessBaseAPISetImage(handle, buf, image.getWidth(), image.getHeight(), bytespp, bytespl);
int success = api.TessBaseAPIRecognize(handle, null);
if (success == 0) {
TessPageIterator pi = api.TessBaseAPIAnalyseLayout(handle);
api.TessPageIteratorOrientation(pi, orientation, direction, order, deskew_angle);
System.out.println("Orientation:" + orientation.get()+
"\nWritingDirection:"+Utils.getConstantName(direction.get(), TessWritingDirection.class)+
" \nTextlineOrder:" + Utils.getConstantName(order.get(), TessTextlineOrder.class)+
"\nDeskew angle: %.4f\n"+deskew_angle.get());
}
}
public static void main(String[] args) {
try {
D();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
BufferedImage image = ImageIO.read(new File("C:\myimg-tilt.jpg"));
ImageDeskew id = new ImageDeskew(image);
image = ImageHelper.rotateImage(image, -id.getSkewAngle());
我有一个项目可以找到文本嵌入图像的旋转角度,我正在使用 Tess4j,所以我怎样才能获得图像的正确方向角 Tess4j 中是否有任何选项可以以正确的方向旋转图像...
如果我将图像作为输入,那么输出应该是正确方向的图像...第一张图像作为输入,第二张图像输出,所以我该怎么做....请帮助我 input image desire output image
您可以使用 OpenCV 进行此操作。首先你需要计算图像的倾斜角度。然后,您可以按照找到的角度旋转图像。
你可以看看这个link。这真的很有帮助。但是你需要把它实现到Java.
Tess4J 支持确定图像的倾斜角度和旋转它。查看其 API documentation 页面了解更多信息。
用于图像方向和页面分割
public class TestOrientation {
public static void D() throws Exception {
TessAPI api=LoadLibs.getTessAPIInstance();
TessBaseAPI handle=TessAPI1.TessBaseAPICreate();
File tiff = new File("C:/Users/atul/Desktop/test1.tif");
String datapath = "C:/Tesseract/tessdata";
String language = "eng";
int expResult = TessPageSegMode.PSM_AUTO_OSD;
IntBuffer orientation = IntBuffer.allocate(1);
IntBuffer direction = IntBuffer.allocate(1);
IntBuffer order = IntBuffer.allocate(1);
FloatBuffer deskew_angle = FloatBuffer.allocate(1);
BufferedImage image = ImageIO.read(new FileInputStream(tiff)); // require jai-imageio lib to read TIFF
ByteBuffer buf = ImageIOHelper.convertImageData(image);
int bpp = image.getColorModel().getPixelSize();
int bytespp = bpp / 8;
int bytespl = (int) Math.ceil(image.getWidth() * bpp / 8.0);
api.TessBaseAPIInit3(handle, datapath, language);
api.TessBaseAPISetPageSegMode(handle, TessPageSegMode.PSM_AUTO_OSD);
int actualResult = api.TessBaseAPIGetPageSegMode(handle);
api.TessBaseAPISetImage(handle, buf, image.getWidth(), image.getHeight(), bytespp, bytespl);
int success = api.TessBaseAPIRecognize(handle, null);
if (success == 0) {
TessPageIterator pi = api.TessBaseAPIAnalyseLayout(handle);
api.TessPageIteratorOrientation(pi, orientation, direction, order, deskew_angle);
System.out.println("Orientation:" + orientation.get()+
"\nWritingDirection:"+Utils.getConstantName(direction.get(), TessWritingDirection.class)+
" \nTextlineOrder:" + Utils.getConstantName(order.get(), TessTextlineOrder.class)+
"\nDeskew angle: %.4f\n"+deskew_angle.get());
}
}
public static void main(String[] args) {
try {
D();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
BufferedImage image = ImageIO.read(new File("C:\myimg-tilt.jpg"));
ImageDeskew id = new ImageDeskew(image);
image = ImageHelper.rotateImage(image, -id.getSkewAngle());