調用CPP功能我想打電話給this cpp function從蟒蛇:分段故障而從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;
}
此函數的最後一個參數是TessResultRenderer
。有another cpp function創建TessResultRenderer
TESS_API TessResultRenderer* TESS_CALL TessTextRendererCreate(const char* outputbase)
{
return new TessTextRenderer(outputbase);
}
趁現在從我的蟒蛇叫這個,我做了以下內容:
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
,但我不斷收到Segmentation fault
錯誤。
我的問題是我怎麼能從Python中調用TessBaseAPIProcessPages
?
一些更多的引用鏈接到代碼庫:
Implementation of processPages(...)
編輯
嘗試評論建議後,我做了以下,但我得到一個錯誤: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'。這也是整數參數的默認轉換類型。學習如何設置'restype'和'argtypes'。 – eryksun
@eryksun'TessTextRendererCreate'的結果類型是'new TessTextRenderer'。我知道這些argtypes,但不知道如何在這裏應用它。 – Anthony
使用不透明類型:'class TessResultRenderer(ctypes.Structure):pass'。爲它創建一個指針類型:'PTessResultRenderer = ctypes.POINTER(TessResultRenderer)'。然後設置'tesseract.TessTextRendererCreate.restype = PTessResultRenderer'。 – eryksun