如何转换C++;tesseract ocr代码到Python?
我想把TestSerAtOCR文档中的C++版本转换成Python。如何转换C++;tesseract ocr代码到Python?,python,c++,tesseract,python-tesseract,Python,C++,Tesseract,Python Tesseract,我想把TestSerAtOCR文档中的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); tes
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 >识别(0)<代码>到Python(我尝试过的代码是最后一行(注释),但它是错误的),我没有经验C++,所以我不能继续下去,有人能帮助转换吗?API:
- 来自tess4j:
- 从源代码:
tesseract::RIL_WORD
,所以请为我提供转换的完整版本,谢谢
我知道有一个名为can save me的项目可以避免转换,但该项目的问题是他们没有提供最新的windows Python wheels,这是我进行转换的主要原因 我认为问题在于
api->Recognize()
需要一个指针作为第一个参数0
和nullptr
都具有相同的值,但在64位系统上,它们的大小不同(通常;我假设在一些奇怪的非x86系统上,这也可能不正确)
他们的例子仍然适用于C++编译器,因为编译器意识到函数需要一个指针(64位)并且默默地修复它。
在您的示例中,似乎尚未指定确切的ctypes。因此,ctypes无法知道此函数需要一个指针(64位)。相反,它假定此函数需要一个整数(32位)-->它会崩溃 我的建议是:如果你需要进一步的帮助,你可以看看你的工作是如何完成的。如果您决定在项目中使用,请注意PyOCR的许可证是GPLv3+,这意味着一些限制。“C/C++”不是一种语言。以上是清楚的C++,所以根本没有提到C。另外,尽量不要把问题的标题放在标签上。后者更适合有效搜索。您对
0
和nullptr
之间差异的描述不准确<在此上下文中,code>0不是int
literal`而是空指针文本,因此它与nullptr
对象指针大小相同。编译器不会“静默修复”。谢谢您的帮助!我使用了tesseractLib.tesserbaseApiRecognite(tesseractHandle,None),然后就没有异常了,这让我觉得不指定函数原型并不重要。你介意帮我回答另一个类似的问题吗