我在做一个大文本识别程序。我试图在多线程模式下使用Tesseract (最多50个线程)。有时,当我调试我的程序时,我会在这一行中得到一个错误(分段错误):
/// Returns true if the edge spot in this location is occupied.
inline bool edge_occupied(EDGE_REF edge_ref) const
{
return (edges_[edge_ref] != next_node_mask_);
}在文件中.\tesseract-ocr\dict\dawg.h
我正在每个线程中创建tesseract的每个实例,如下所示:
tesseract::TessBaseAPI *text_ocr = new tesseract::TessBaseAPI();
if (text_ocr->Init(NULL,"eng",tesseract::OEM_DEFAULT))
{
qDebug() << "fail to init tessract in the thread" << _id;
return;
}我在使用Tesseract 3 dll
发布于 2014-01-07 02:16:27
在我开始在msvc2012中使用新的qt5.2.0之后,我设法消除了这个错误,所以我为win32使用了预构建的tesseract 3.02 (msvc)二进制文件。实际上,如果您创建了太多相同的tesseract实例,应用程序就会崩溃。
发布于 2013-12-10 18:13:30
尝试检查变量"edges_“、"edge_ref”、"next_node_mask",它可能同时在其他线程中被修改,而修改会导致段错误。如果有分段错误,则可以看到其他线程的调用堆栈,以及该变量在其他线程中的使用情况。
https://stackoverflow.com/questions/20480076
复制相似问题