c++ - Tesseract:如何导出文本和边界框?

标签 c++ ocr tesseract bounding-box document-layout-analysis

我想将文档图像转换为 XML,并导出在页面中找到特定单词的位置。为了访问边界框信息,可以使用 tesseract 的布局分析:

 tess.SetImage(...); 
 tess.SetPageSegMode( tesseract::PSM_AUTO_OSD); 
 tesseract::PageIterator* it = tess.AnalyseLayout(); 
 while(it->Next(tesseract::RIL_WORD)
 {
      int top, bottom, left, right; 
      it->BoundingBox(tesseract::RIL_WORD, &left, &top, &right, &bottom); 

 }

然而,那时我不知道边界框的实际内容,通过执行以下代码,对当前图像执行 OCR,因此 text 包含整个文本页面。

 tess.Recognize(0); 
 std::string text = tess.GetUTF8Text(); 

目前我暂时将所有边界框存储在一个 vector 中。对于每个框,我从原始图像中剪下一个子图像,并对每个边界框执行 OCR。基本上这是可行的,但是当我将结果与 Tesseract 命令行工具进行比较时,会出现更多的 OCR 错误。

因此我想知道如何逐字遍历 OCR 结果并获得相应的边界框。

最佳答案

tess.Recognize(0);

PAGE_RES_IT resultIter(page_res_);

for (resultIter.start_page(false); resultIter.block() != NULL; resultIter.forward()) 
{

            WERD_RES* wordResult = resultIter.word();
            WERD_CHOICE* word = wordResult->best_choice;

            TBOX& box = wordResult->word->bounding_box();
}

关于c++ - Tesseract:如何导出文本和边界框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369126/

相关文章:

c++ - 在编译时将两个或多个不同大小的数组合并为一个数组

c++ - 接收字符串,检查大写字母

c++ - 在继承的虚函数中调用子类的方法?

apache - 如何使用 TikaConfig 和 Tika 命令行实用程序启用 TesseractOCRParser?

Tesseract 错误 : Warning. 分辨率 0 dpi 无效。改用 70

c++ - 带有 load_system_dawg 和 load_freq_dawg 的 tesseract api

c++ - 使用 C++ MJPEG 流媒体服务器时缺少 boost::asio 随机 header

c++ - opencv 中的 OCR - 如何传递对象

ocr - 当我使用tesseract识别表格时,我无法得到任何输出,我怎样才能识别表格

android - Android 中的 Tesseract 字符识别问题(但 iOS 上没有?)