【问题标题】:How do I properly extract text and boxRects from tess-two?如何从 tess-two 中正确提取文本和 boxRects?
【发布时间】:2019-02-27 12:21:05
【问题描述】:

我有一个带有返回对象的 TessBaseAPI() 对象。我想提取带有边界框的单词,但似乎无法正常工作。

val Text = tesseract.getUTF8Text()

给我文字。

val Words = tesseract.getWords.boxRects

给了我可以循环的边界框,但它们与 getUTF8Text() 不匹配。

循环遍历 tesseract.getWords 中的数据对象并尝试将其转换为字符串让我很乱。

val Words = tesseract.getWords
for(i in Words) {
    Log.i(TAG, i.data.toString())
}

我发现一个非常糟糕的解决方法是使用 .getHOCRText 并对生成的内容执行正则表达式来获取文本和框。

val result = tesseract.getHOCRText(0)

val BoxPattern = Pattern.compile("(?<=title='bbox ).*?(?=; x_wconf)")
val BoxMatch = BoxPattern.matcher(result)
while(BoxMatch.find()) {
    Log.i(TAG, BoxMatch.group().toString())
}

val TextPattern = Pattern.compile("(?<='>).*?(?=<\\/span>)")
val TextMatch = TextPattern.matcher(result)
while(TextMatch.find()) {
    Log.i(TAG, TextMatch.group().toString())
}

那么,如何正确地从 tess-two 中提取文本和 boxRects?

【问题讨论】:

    标签: android kotlin tess-two


    【解决方案1】:

    我解决了!

    // As before
    val tesseract = TessBaseAPI()
    tesseract.init("/storage/emulated/0/com.ubft/", "eng")
    tesseract.setImage(bm)
    
    // Call utF8Text. Otherwise iterator returns null
    tesseract.utF8Text
    
    // Initiate an iterator
    val iterator = tesseract.getResultIterator()
    
    iterator.begin()
    do {
        val text = iterator.getUTF8Text(TessBaseAPI.PageIteratorLevel.RIL_TEXTLINE)
        val boundingBox = iterator.getBoundingRect(TessBaseAPI.PageIteratorLevel.RIL_TEXTLINE)
    
        // Do what you want with the result...
    
        } while (iterator.next(TessBaseAPI.PageIteratorLevel.RIL_TEXTLINE))
    
    iterator.delete()
    

    可以将 TessbaseAPI.PageIteratorLevel 指定为您想要返回的文本结构类型(段落、单词、行或按字符)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多