[英]how to convert C++ tesseract-ocr code to Python?
我想将 tesseract-ocr doc 中的 C++ 版本结果迭代器示例转换为 Python。
Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
api->Init(NULL, "eng");
api->SetImage(image);
api->Recognize(0);
tesseract::ResultIterator* ri = api->GetIterator();
tesseract::PageIteratorLevel level = tesseract::RIL_WORD;
if (ri != 0) {
do {
const char* word = ri->GetUTF8Text(level);
float conf = ri->Confidence(level);
int x1, y1, x2, y2;
ri->BoundingBox(level, &x1, &y1, &x2, &y2);
printf("word: '%s'; \tconf: %.2f; BoundingBox: %d,%d,%d,%d;\n",
word, conf, x1, y1, x2, y2);
delete[] word;
} while (ri->Next(level));
}
到目前为止我能做的是:
import ctypes
liblept = ctypes.cdll.LoadLibrary('liblept-5.dll')
pix = liblept.pixRead('11.png'.encode())
print(pix)
tesseractLib = ctypes.cdll.LoadLibrary(r'C:\Program Files\tesseract-OCR\libtesseract-4.dll')
tesseractHandle = tesseractLib.TessBaseAPICreate()
tesseractLib.TessBaseAPIInit3(tesseractHandle, '.', 'eng')
tesseractLib.TessBaseAPISetImage2(tesseractHandle, pix)
#tesseractLib.TessBaseAPIRecognize(tesseractHandle, tesseractLib.TessMonitorCreate())
我无法将 C++ api->Recognize(0)
为 Python(我尝试的是在代码的最后一行(注释),但它是错误的),我对 C++ 没有经验,所以我不能再继续了,任何人都可以帮助转换? API:
来自 tess4j: http ://tess4j.sourceforge.net/docs/docs-3.0/net/sourceforge/tess4j/TessAPI1.html#TessBaseAPIAnalyseLayout-net.sourceforge.tess4j.ITessAPI.TessBaseAPI-
从源代码: https : //github.com/tesseract-ocr/tesseract/blob/420cbac876b06beeee271d9f44ba800d943a8a83/include/tesseract/capi.h
我想我在后续的转换上也有一些困难,例如,我不知道如何在 Python 中表示tesseract::RIL_WORD
,所以最好提供完整版的转换,谢谢!
我知道有一个名为tesserocr的项目可以让我免于转换,但该项目的问题是他们不提供最新的 Windows Python 轮子,这是我进行转换的主要原因。
我认为问题在于api->Recognize()
需要一个指针作为第一个参数。 他们错误地将0
放在他们的示例中,但它应该是nullptr
。 0
和nullptr
都具有相同的值,但在 64 位系统上它们的大小不同(通常;我假设在一些奇怪的非 x86 系统上这可能也不是真的)。
他们的示例仍然适用于 C++ 编译器,因为编译器知道该函数需要一个指针(64 位)并静默修复它。
在您的示例中,您似乎还没有为 ctypes 指定TessBaseAPIRecognize()
的确切原型。 所以 ctypes 不能知道这个函数需要一个指针(64 位)。 相反,它假设这个函数需要一个整数(32 位)--> 它崩溃了。
我的建议:
ctypes.c_void_p(None)
而不是 0如果您需要进一步的帮助,您可以查看PyOCR中的工作方式。 如果您决定在您的项目中使用PyOCR ,请注意 PyOCR 的许可证是 GPLv3+,这意味着一些限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.