I am trying to call this cpp function from python:
TESS_API BOOL TESS_CALL TessBaseAPIProcessPages(TessBaseAPI* handle, const char* filename,
const char* retry_config, int timeout_millisec, TessResultRenderer* renderer)
{
if (handle->ProcessPages(filename, retry_config, timeout_millisec, renderer))
return TRUE;
else
return FALSE;
}
The last parameter of this function is TessResultRenderer. There is another cpp function for creating TessResultRenderer
TESS_API TessResultRenderer* TESS_CALL TessTextRendererCreate(const char* outputbase)
{
return new TessTextRenderer(outputbase);
}
Now while calling this from my python, I did the following:
outputbase = "stdout"
renderer = tesseract.TessTextRendererCreate(outputbase)
text_out = tesseract.TessBaseAPIProcessPages(api,
ctypes.create_string_buffer(path),
None, 0, renderer) //Segmentation fault (core dumped) error on this line
but I keep getting Segmentation fault error.
My question is how can I called TessBaseAPIProcessPages from Python?
Some more reference links into the codebase:
Implementation of processPages(...)
Edit
After trying the commented suggestions, I did the following but I get an error: item 1 in _argtypes_ has no from_param method
PTessResultRenderer = ctypes.POINTER(TessResultRenderer)
self.tesseract.TessTextRendererCreate.restype = PTessResultRenderer
outputbase = "stdout"
self.tesseract.TessTextRendererCreate.argtypes = [outputbase] #error here
self.tesseract.TessTextRendererCreate
ReturnVal = ctypes.c_bool
self.tesseract.TessBaseAPIProcessPages.argtypes = [self.api, path, None, 0, PTessResultRenderer]
self.tesseract.TessBaseAPIProcessPages.restype = ReturnVal
self.tesseracto.TessBaseAPIProcessPages
class TessResultRenderer(ctypes.Structure):
pass
c_int. It's also the default conversion type for integer arguments. Learn how to setrestypeandargtypes.TessTextRendererCreateisnew TessTextRenderer. I'm aware of the argtypes but not sure how to apply it here.class TessResultRenderer(ctypes.Structure): pass. Create a pointer type for it:PTessResultRenderer = ctypes.POINTER(TessResultRenderer). Then settesseract.TessTextRendererCreate.restype = PTessResultRenderer.argtypesis to specify the types of the parameters, not for calling the function. For example:tesseract.TessTextRendererCreate.argtypes = [ctypes.c_char_p]andtesseract.TessBaseAPIProcessPages.argtypes = [PTessBaseAPI, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_int, PTessResultRenderer].