Как правильно извлечь текст и boxRects из tess-two? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть объект 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())
}

Iнашел действительно плохой обходной путь, используя .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())
}

Итак, как мне правильно извлечь текст и boxRects из tess-two?

1 Ответ

0 голосов
/ 05 марта 2019

Я решил это!

// 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 может быть указан для типа текстовой структуры, которую вы хотите вернуть (абзац, слова, строки или по символу).

...