如果在线程 (C++) 中,Tesseract OCR 在 GetUTF8Text() 上崩溃

问题描述

我使用 Tesseract 从图像中读取数字。 只要我在一个线程中完成所有操作,这就会起作用。一旦我将 tesseract 初始化和识别外包给一个单独的线程,我的程序就会在调用 GetUTF8Text() 方法时崩溃。

我在 Windows 10 x64 系统上使用 Tesseract 4.1.1 和 leptonica-1.78.0。我的程序是一个 x64 QT 应用程序。

这是我的代码

screenshot(_image);                            //taking a Screenshot from Desktop
cv::Mat imgBlackWhite;                         //will later hold the Screen in Black/White
cv::Rect asRect = cv::Rect(580,1035,36,20); //to extract a sub-image 

//setup tesseract
tesseract::TessBaseAPI *tessAPI = new tesseract::TessBaseAPI();
tessAPI->Init(NULL,"eng",tesseract::OEM_LSTM_ONLY);
tessAPI->SetPageSegMode(tesseract::PSM_AUTO);
tessAPI->Setvariable("user_defined_dpi","300");
tessAPI->Setvariable("tessedit_char_whitelist","0123456789.");



cv::Mat subASImg(_image,asRect);                    // creating the image for tesseract

cvtColor(subASImg,imgBlackWhite,cv::COLOR_BGR2GRAY);

cv::resize(imgBlackWhite,cv::Size(imgBlackWhite.cols * 3,imgBlackWhite.rows * 3));
cv::threshold(imgBlackWhite,100,255,cv::THRESH_BINARY_INV);

//Send image to recognition engine of tesseract
tessAPI->Setimage(imgBlackWhite.data,imgBlackWhite.cols,imgBlackWhite.rows,1,imgBlackWhite.step);

//print the detected result:  ----> CRASH
qDebug() << tessAPI->GetUTF8Text();  // ----> CRASH (Access violation) 

tessAPI->End();

如果我在程序的主线程中做完全相同的事情,它就会工作。

有人可以帮忙吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)