Tesseract是一种开放源代码的光学字符识别引擎(OCR)引擎,它是最受欢迎和高质量的OCR库。
OCR使用神经网络来搜索和识别图像中的文本。
Tesseract在像素,字母,单词和句子中搜索模式,并使用称为自适应识别的两步方法。 它需要一遍数据来进行字符识别,然后进行第二遍以填写他不确定哪些字母最有可能与给定单词或句子上下文相对应的字母。
其中一项计划是从照片中识别支票。
使用的识别工具是Tesseract OCR 。 该库的优势包括训练有素的语言模型(> 192),不同类型的识别(图像为单词,文本块,垂直文本),易于设置。 由于Tesseract OCR是用C ++编写的,因此使用了带有github的第三方包装。
版本之间的差异是训练有素的模型(版本4具有更高的准确性,因此我们使用了它)。
我们需要用于文本识别的数据文件,每种语言都有自己的文件。 您可以在此处下载数据。
原始图像的质量(尺寸,对比度,照明物质)越好,识别结果越好。
还发现了一种图像处理方法,可以通过使用OpenCV库对其进一步识别。 由于OpenCV是用C ++编写的,并且没有针对我们的解决方案的书面包装器,因此决定为该库编写我们自己的具有必要图像处理功能的包装器。 主要困难是为正确的图像处理选择滤波器的值。 也可以找到支票/文本的轮廓,但尚未完全理解。 结果更好(5-10%)。
参数:
语言-图片中文字的语言,您可以通过“ +”列出来选择几种语言;
pageSegmentationMode-图片中文本位置的类型;
charBlacklist-忽略字符的字符。
仅使用Tesseract可获得理想图像的约70%的精度,而在光线/图像质量较差的情况下,该精度为〜30%。

视觉+ Tesseract OCR
由于结果不尽人意,因此决定使用Apple的Vision库。 我们使用Vision查找文本块,然后将图像进一步分为单独的块并进行识别。 结果提高了约5%,但由于重复出现块而出现了错误。
该解决方案的缺点是:
- 工作速度。 运算速度降低了> 4倍(也许是传播的一种方式)
- 某些文字块被识别超过1次
- 从右到左识别文本,这就是为什么支票右侧的文本比左侧的文本更早被识别的原因。

MLKit
另一种检测文本的方法是在Firebase上部署的Google MLKit。 此方法显示了最佳结果(〜90%),但是此方法的主要缺点是仅支持拉丁字符,并且难以在一行中处理分割的文本(名称-左侧,价格-右侧)。

最后,我们可以说识别图像中的文本是可以完成的任务,但是存在一些困难。 主要问题是图像的质量(大小,照度,对比度),可以通过对图像进行滤波来解决。 使用Vision或MLKit识别文本时,存在文本识别顺序错误,拆分文本处理的问题。
识别的文本可以手动更正并适合使用; 在大多数情况下,从支票中识别文本时,总金额会被很好地识别,无需进行调整。