首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地从tess-two中提取文本和boxRects?

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

Stack Overflow用户
提问于 2019-02-27 20:21:05
回答 1查看 558关注 0票数 2

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

代码语言:javascript
复制
val Text = tesseract.getUTF8Text()

给了我文本。

代码语言:javascript
复制
val Words = tesseract.getWords.boxRects

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

遍历tesseract.getWords中的数据对象并尝试将其转换为字符串会让我感觉有点胡言乱语。

代码语言:javascript
复制
val Words = tesseract.getWords
for(i in Words) {
    Log.i(TAG, i.data.toString())
}

我发现了一个非常糟糕的变通方法,使用.getHOCRText并在生成的内容上执行正则表达式来获取文本和方框。

代码语言:javascript
复制
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呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 06:27:45

我解决了!

代码语言:javascript
复制
// 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指定为要返回的文本结构类型(段落、单词、行或按字符)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54905387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档