使用 Google 的文本识别 API 检测图像中的水平线而不是块
Posted
技术标签:
【中文标题】使用 Google 的文本识别 API 检测图像中的水平线而不是块【英文标题】:Using Google's Text Recognition API to detect horizontal lines instead of blocks in images 【发布时间】:2018-08-08 20:35:49 【问题描述】:有没有办法使用Google's Text Recognition API 检测图像中的全尺寸水平线(最大宽度)而不是文本块?比如说,如果我想从这样的收据图像中检索应付款总额:
...因为到目前为止,API 检测块中的文本,而不是像这样以任意顺序检测文本:
... 不,TextBlock 的 getComponents()
仅检索每个 TextBlock 中的行,因为 TextBlock 位于文本层次结构的顶部(TextBlock 包含行),如文档 here 中所述。如果这个 API 可以从 Lines 而不是 TextBlocks 开始用于图像位图的框架...
我什至尝试使用硬编码坐标调整文本块的边界框(矩形)的大小,以希望检测到整行文本“Chicken Bowl... 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)
【问题讨论】:
您无法直接从 OCR 获取数据行。无论如何,您可以应用算法并从 OCR 生成数据行。 你有没有在这个@DaveNOTDavid 上取得任何进展? 【参考方案1】:您是对的 - API 只是为您提供文本块和块内行的坐标。因此,您必须自己整理所有行。
在开始之前,您应该以基线(或多或少)水平的方式旋转坐标。请注意,边界框的坐标有时顺序错误。当您计算所需的旋转角度时,您应该将这些误导性的框整理出来。
旋转所有坐标后,您可以开始匹配所有单词边界框并创建所需的线条。在我的代码中,我通过比较框的垂直中心来做到这一点。请注意高度非常小或非常大的片段(与平均高度相比)。你必须给他们一个特殊的待遇。
我可以向您保证,这适用于您的示例中所示的收据。
【讨论】:
以上是关于使用 Google 的文本识别 API 检测图像中的水平线而不是块的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Vision Api 检测块内的所有文本
google vision api 可以从图像中识别代码文本(例如 javascript)吗?
Google Vision Api 支持 PDF 和 TIFF 文本检测,但它也可以与包含图像的 PDf 一起使用吗?