Less4j table detection in java

Viewed 43

I'm a newbie in OCR and I'm trying to use java to detect tables in images (my job requires java as a development language). I used less4j and I managed to display in the console "Table found" less4j debugging message but I need to put this detection in a variable (i.e. I need a variable that tells me if there is a table in the image or not, not a debugging message).

Here is my piece of code:

import static net.sourceforge.lept4j.ILeptonica.L_CLONE;

import java.io.File;

import com.sun.jna.Pointer;
import com.sun.jna.ptr.PointerByReference;

import net.sourceforge.lept4j.Box;
import net.sourceforge.lept4j.Boxa;
import net.sourceforge.lept4j.Leptonica;
import net.sourceforge.lept4j.Leptonica1;
import net.sourceforge.lept4j.Pix;
import net.sourceforge.lept4j.util.LeptUtils;
import net.sourceforge.tess4j.ITessAPI;
import net.sourceforge.tess4j.ITessAPI.TessBaseAPI;
import net.sourceforge.tess4j.ITessAPI.TessPageIteratorLevel;
import net.sourceforge.tess4j.ITessAPI.TessPageSegMode;
import net.sourceforge.tess4j.TessAPI;
import net.sourceforge.tess4j.TessAPI1;
import net.sourceforge.tess4j.TesseractException;

public class Scritte {
    
    static TessAPI api = new TessAPIImpl().getInstance();
    static TessBaseAPI handle = TessAPI1.TessBaseAPICreate();
    private final static String datapath = "./tessdata";
    static String language = "eng+fra";
   
    public static void main(String[] args) throws TesseractException {
         File image = new File("./images/facture.jpg");
         Leptonica leptInstance = Leptonica.INSTANCE;
         Pix pix = leptInstance.pixRead(image.getPath());
         api.TessBaseAPIInit3(handle, datapath, language);
         api.TessBaseAPISetImage2(handle, pix);
         api.TessBaseAPISetVariable(handle,"textord_tabfind_find_tables", "1");
         api.TessBaseAPISetVariable(handle,"textord_tablefind_recognize_tables", "1");
         api.TessBaseAPISetVariable(handle,"enable_new_segsearch", "1");
         api.TessBaseAPISetVariable(handle,"textord_dump_table_images", "1");
         api.TessBaseAPISetVariable(handle,"gapmap_debug", "1");
         api.TessBaseAPISetPageSegMode(handle, TessPageSegMode.PSM_AUTO);
         PointerByReference pixa = new PointerByReference();
         PointerByReference blockids = new PointerByReference();
         Boxa boxes = api.TessBaseAPIGetComponentImages(handle, TessPageIteratorLevel.RIL_BLOCK, ITessAPI.TRUE, pixa, blockids);
         int boxCount = leptInstance.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);
             TessAPI1.TessDeleteText(utf8Text);
             LeptUtils.dispose(box);
         }
         // release Pix and Boxa resources
         LeptUtils.dispose(pix);
         LeptUtils.dispose(boxes);
         
    }
}

is there is any solution?

PS: Itried to use "TessAPI1.TessPageIteratorBlockType" but it does not work correctly and here is my piece of code:

TessResultIterator ri = TessAPI1.TessBaseAPIGetIterator(api);
TessPageIterator pi = TessAPI1.TessResultIteratorGetPageIterator(ri);
int indicator = TessAPI1.TessPageIteratorBlockType(pi);
System.out.println(indicator);
0 Answers
Related