【问题标题】:Get the text position in tesseract Ocr in iphone获取iphone中tesseract Ocr中的文本位置
【发布时间】:2012-08-27 20:29:18
【问题描述】:

使用 tesseract 我已经提取了文本 iPhone。现在想要提取文本以及 xml 中的文本位置。我使用 GetHocrText 检索 HTML 中的文本。

例如:-

<span class='ocr_word' id='word_3_28' title="bbox 55 226 123 243">
<span class='ocrx_word' id='xword_3_28' title="x_wconf -5">Beverage</span>
</span>

在tesseract OCR中有没有其他方法可以提取XML格式的文本?

感谢广告

斯里维迪亚

【问题讨论】:

  • 喜欢这种格式中的 10 10 500 50饮料
  • 嗨@srividya..你找到解决方案了吗?我也面临同样的问题。

标签: iphone tesseract


【解决方案1】:

更好的方法是使用 ResultIterator;您可以使用 tesseract::RIL_BLOCK、tesseract::RIL_PARA、tesseract::RIL_TEXTLINE、tesseract::RIL_WORD 或 tesseract::RIL_SYMBOL

来自https://code.google.com/p/tesseract-ocr/wiki/APIExample

tesseract::TessBaseAPI api;
// tesseract.Init here
api.SetVariable("save_blob_choices", "T");
// tesseract.SetImage/tesseract.SetRectangle here
api.Recognize(NULL);

tesseract::ResultIterator* ri = api.GetIterator();
tesseract::PageIteratorLevel level = tesseract::RIL_WORD;
if (ri) {
  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));
}

【讨论】:

    【解决方案2】:

    这不是 xml,但这是获取每个字符位置的一种方法:

    tesseract::TessBaseAPI tesseract;
    // tesseract.Init here
    tesseract.SetVariable("save_blob_choices", "T"); // for character-level confidence
    // tesseract.SetImage/tesseract.SetRectangle here
    char *results_as_text = tesseract.GetBoxText(0);  // characters without spaces/newlines artificially embedded
    std::istringstream results_as_stream(results_as_text);
    std::string result;
    char letter;
    int x1, y1, x2, y2;
    while (std::getline(results_as_stream,result)) {
        std::istringstream result_stream(result);
        result_stream >> letter;
        result_stream >> x1;
        result_stream >> y1;
        result_stream >> x2;
        result_stream >> y2;
        std::cout << letter << " ((" << x1 << "," << y1 << "),(" << x2 << "," << y2 << "))" << std::endl;
    }
    

    【讨论】:

    • 嗨@Kaolin Fire,我在这里获取单个字符的坐标。我需要每个单词的坐标,这里可以吗?
    • 添加了一个新的答案,用更好的方法展示了如何选择单词级别、字符级别、行级别等:)
    猜你喜欢
    • 2016-05-05
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多