/** * Test of ResultIterator and PageIterator. * * @throws Exception */ @Test public void testResultIterator() throws Exception { logger.info("TessBaseAPIGetIterator"); File tiff = new File(this.testResourcesDataPath, "eurotext.tif"); 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); TessAPI1.TessBaseAPIInit3(handle, datapath, language); TessAPI1.TessBaseAPISetPageSegMode(handle, TessPageSegMode.PSM_AUTO); TessAPI1.TessBaseAPISetImage( handle, buf, image.getWidth(), image.getHeight(), bytespp, bytespl); ETEXT_DESC monitor = new ETEXT_DESC(); ITessAPI.TimeVal timeout = new ITessAPI.TimeVal(); timeout.tv_sec = new NativeLong(0L); // time > 0 causes blank ouput monitor.end_time = timeout; ProgressMonitor pmo = new ProgressMonitor(monitor); pmo.start(); TessAPI1.TessBaseAPIRecognize(handle, monitor); logger.error("Message: " + pmo.getMessage()); TessResultIterator ri = TessAPI1.TessBaseAPIGetIterator(handle); TessPageIterator pi = TessAPI1.TessResultIteratorGetPageIterator(ri); TessAPI1.TessPageIteratorBegin(pi); logger.info("Bounding boxes:\nchar(s) left top right bottom confidence font-attributes"); int level = TessPageIteratorLevel.RIL_WORD; // int height = image.getHeight(); do { Pointer ptr = TessAPI1.TessResultIteratorGetUTF8Text(ri, level); String word = ptr.getString(0); TessAPI1.TessDeleteText(ptr); float confidence = TessAPI1.TessResultIteratorConfidence(ri, level); IntBuffer leftB = IntBuffer.allocate(1); IntBuffer topB = IntBuffer.allocate(1); IntBuffer rightB = IntBuffer.allocate(1); IntBuffer bottomB = IntBuffer.allocate(1); TessAPI1.TessPageIteratorBoundingBox(pi, level, leftB, topB, rightB, bottomB); int left = leftB.get(); int top = topB.get(); int right = rightB.get(); int bottom = bottomB.get(); System.out.print( String.format("%s %d %d %d %d %f", word, left, top, right, bottom, confidence)); // logger.info(String.format("%s %d %d %d %d", str, left, height - bottom, right, height - // top)); // // training box coordinates IntBuffer boldB = IntBuffer.allocate(1); IntBuffer italicB = IntBuffer.allocate(1); IntBuffer underlinedB = IntBuffer.allocate(1); IntBuffer monospaceB = IntBuffer.allocate(1); IntBuffer serifB = IntBuffer.allocate(1); IntBuffer smallcapsB = IntBuffer.allocate(1); IntBuffer pointSizeB = IntBuffer.allocate(1); IntBuffer fontIdB = IntBuffer.allocate(1); String fontName = TessAPI1.TessResultIteratorWordFontAttributes( ri, boldB, italicB, underlinedB, monospaceB, serifB, smallcapsB, pointSizeB, fontIdB); boolean bold = boldB.get() == TRUE; boolean italic = italicB.get() == TRUE; boolean underlined = underlinedB.get() == TRUE; boolean monospace = monospaceB.get() == TRUE; boolean serif = serifB.get() == TRUE; boolean smallcaps = smallcapsB.get() == TRUE; int pointSize = pointSizeB.get(); int fontId = fontIdB.get(); logger.info( String.format( " font: %s, size: %d, font id: %d, bold: %b," + " italic: %b, underlined: %b, monospace: %b, serif: %b, smallcap: %b", fontName, pointSize, fontId, bold, italic, underlined, monospace, serif, smallcaps)); } while (TessAPI1.TessPageIteratorNext(pi, level) == TRUE); assertTrue(true); }