/**
   * Test of ChoiceIterator.
   *
   * @throws Exception
   */
  @Test
  public void testChoiceIterator() throws Exception {
    logger.info("TessResultIteratorGetChoiceIterator");
    String filename = String.format("%s/%s", this.testResourcesDataPath, "eurotext.tif");
    File tiff = new File(filename);
    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.TessBaseAPISetImage(
        handle, buf, image.getWidth(), image.getHeight(), bytespp, bytespl);
    TessAPI1.TessBaseAPISetVariable(handle, "save_blob_choices", "T");
    TessAPI1.TessBaseAPISetRectangle(handle, 37, 228, 548, 31);
    ETEXT_DESC monitor = new ETEXT_DESC();
    ProgressMonitor pmo = new ProgressMonitor(monitor);
    pmo.start();
    TessAPI1.TessBaseAPIRecognize(handle, monitor);
    logger.info("Message: " + pmo.getMessage());
    TessResultIterator ri = TessAPI1.TessBaseAPIGetIterator(handle);
    int level = TessPageIteratorLevel.RIL_SYMBOL;

    if (ri != null) {
      do {
        Pointer symbol = TessAPI1.TessResultIteratorGetUTF8Text(ri, level);
        float conf = TessAPI1.TessResultIteratorConfidence(ri, level);
        if (symbol != null) {
          logger.info(String.format("symbol %s, conf: %f", symbol.getString(0), conf));
          boolean indent = false;
          TessChoiceIterator ci = TessAPI1.TessResultIteratorGetChoiceIterator(ri);
          do {
            if (indent) {
              System.out.print("\t");
            }
            System.out.print("\t- ");
            String choice = TessAPI1.TessChoiceIteratorGetUTF8Text(ci);
            logger.info(
                String.format("%s conf: %f", choice, TessAPI1.TessChoiceIteratorConfidence(ci)));
            indent = true;
          } while (TessAPI1.TessChoiceIteratorNext(ci) == TessAPI1.TRUE);
          TessAPI1.TessChoiceIteratorDelete(ci);
        }
        logger.info("---------------------------------------------");
        TessAPI1.TessDeleteText(symbol);
      } while (TessAPI1.TessResultIteratorNext(ri, level) == TessAPI1.TRUE);
    }

    assertTrue(true);
  }
  /**
   * Test of TessBaseAPIGetComponentImages method, of class TessAPI1.
   *
   * @throws java.lang.Exception
   */
  @Test
  public void testTessBaseAPIGetComponentImages() throws Exception {
    logger.info("TessBaseAPIGetComponentImages");
    File image = new File(this.testResourcesDataPath, "eurotext.png");
    int expResult = 12; // number of lines in the test image
    Pix pix = Leptonica1.pixRead(image.getPath());
    TessAPI1.TessBaseAPIInit3(handle, datapath, language);
    TessAPI1.TessBaseAPISetImage2(handle, pix);
    PointerByReference pixa = null;
    PointerByReference blockids = null;
    Boxa boxes =
        TessAPI1.TessBaseAPIGetComponentImages(
            handle, TessPageIteratorLevel.RIL_TEXTLINE, TRUE, pixa, blockids);
    //        boxes = TessAPI1.TessBaseAPIGetRegions(handle, pixa); // equivalent to
    // TessPageIteratorLevel.RIL_BLOCK
    int boxCount = Leptonica1.boxaGetCount(boxes);
    for (int i = 0; i < boxCount; i++) {
      Box box = Leptonica1.boxaGetBox(boxes, i, L_CLONE);
      if (box == null) {
        continue;
      }
      TessAPI1.TessBaseAPISetRectangle(handle, box.x, box.y, box.w, box.h);
      Pointer utf8Text = TessAPI1.TessBaseAPIGetUTF8Text(handle);
      String ocrResult = utf8Text.getString(0);
      TessAPI1.TessDeleteText(utf8Text);
      int conf = TessAPI1.TessBaseAPIMeanTextConf(handle);
      System.out.print(
          String.format(
              "Box[%d]: x=%d, y=%d, w=%d, h=%d, confidence: %d, text: %s",
              i, box.x, box.y, box.w, box.h, conf, ocrResult));
    }

    // release Pix resource
    PointerByReference pRef = new PointerByReference();
    pRef.setValue(pix.getPointer());
    Leptonica1.pixDestroy(pRef);

    assertEquals(expResult, boxCount);
  }
 /**
  * Test of TessBaseAPIGetUTF8Text method, of class TessDllAPI1.
  *
  * @throws Exception while processing the image
  */
 @Test
 public void testTessBaseAPIGetUTF8Text() throws Exception {
   logger.info("TessBaseAPIGetUTF8Text");
   String expResult = expOCRResult;
   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);
   TessAPI1.TessBaseAPISetRectangle(handle, 0, 0, 1024, 800);
   Pointer utf8Text = TessAPI1.TessBaseAPIGetUTF8Text(handle);
   String result = utf8Text.getString(0);
   TessAPI1.TessDeleteText(utf8Text);
   logger.info(result);
   assertEquals(expResult, result.substring(0, expResult.length()));
 }