c++ - Tesseract OCR QT 错误

标签 c++ multithreading qt segmentation-fault tesseract

我正在制作一个大文本识别程序。我正在尝试在多线程模式下使用 Tesseract(最多 50 个线程)。 有时当我调试我的程序时,我会在这一行出现错误(Segmentation Fault):

/// 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

最佳答案

尝试检查变量“edges_”、“edge_ref”、“next_node_mask”,它可能同时在其他线程中被修改,修改会导致段错误。如果你得到段错误,你可以看到其他线程的调用堆栈,以及这个变量在其他线程中的使用情况。

关于c++ - Tesseract OCR QT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20480076/

相关文章:

c++ - 同时支持C++98和C++11

java - Java中的两个线程不是多线程

multithreading - C++11 编译器是否允许引入额外的原子变量负载?

multithreading - QThread使程序崩溃?

c++ - 为什么这个 QWidget 不更新它的几何图形?

c++ - 对符号的 undefined reference ,即使库已链接

c++ - QT Creator 的函数重载代码补全有问题

C++ 双重分派(dispatch)示例

c++ - Qt5多线程: signals work in one-way only

Qt QFont Kerning - 不影响/字距调整字体