有没有办法使用Google's Text Recognition API检测图像中的全尺寸水平线(最大宽度)而不是文本块?比如说,如果我想从这样的收据图像中检索到的总金额:
...因为到目前为止,API会以块的形式检测文本,而不是像这样的任意顺序:
...并且不,TextBlock' s getComponents()
仅检索每个TextBlock中的Lines,因为TextBlock位于Text层次结构的顶部(TextBlock包含Line),如文档{{3}中所述}。如果只有这个API可以使用Lines而不是TextBlocks来开始图像位图的帧......
我甚至尝试调整文本块的大小。带有硬编码坐标的边界框(矩形)有望检测整行文字,#34;鸡碗...... 7.15",但无效,如下图所示:
val textRecognizer = TextRecognizer.Builder(this).build()
if (textRecognizer.isOperational) {
val imageFrame = Frame.Builder()
.setBitmap(imageBitmap)
.build()
val textBlocks = textRecognizer.detect(imageFrame)
for (i in 0 until textBlocks.size()) {
val textBlock = textBlocks.get(textBlocks.keyAt(i))
textBlock.boundingBox.set(97, 1244, 1235, 1292)
val textValue = textBlock.value
Log.d(LOG_TAG, "textValue: " + textValue)
}
}
答案 0 :(得分:0)
您是对的-API仅为您提供文本块和块内各行的坐标。因此,您必须自己整理所有行。
在开始此操作之前,应以使基线(或多或少)为水平的方式旋转坐标。请注意,边界框的坐标有时顺序错误。计算所需的旋转角度时,应将这些误导性的框整理掉。
旋转所有坐标后,可以开始匹配所有单词边界框并创建所需的行。在我的代码中,我通过比较盒子的垂直中心来做到这一点。注意高度很小或很大的碎片(与平均高度相比)。您必须给他们特殊待遇。
我可以向您保证,这可以与示例中显示的收据配合使用。