首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找从图像中提取文本的库

寻找从图像中提取文本的库
EN

Software Recommendation用户
提问于 2019-06-08 13:58:34
回答 1查看 75关注 0票数 1

我所要寻找的基本描述是可以从图像中提取文本(手工编写),并将其作为一个普通的字符流返回,而无需任何页面处理。

更多规格:

  • 我正在为我正在开发的软件使用Java,所以拥有一个Java库会很好,尽管如果软件/库有一个二进制文件,那就好了。
  • 它应该能够处理的图像是纸上有文字的图片,尽管软件需要识别的是6到66个字符,这些字符将由手工编写,但更多的是“计算机可识别”,有点像这样:
  • 文本必须逐行提取;在表的情况下,只应将每一行和每列视为另一行,不需要进行特殊处理。

我自己的研究向我指出了以下软件/库:

  • Asprise
  • 特塞尔
  • ABBYY云OCR

我已经测试了Tesseract和ABBYY,他们提供的结果与我所期望的相差甚远: Tesseract给了我一个200+字符的输出,用于我附在这篇文章上的图片,而ABBYY没有提供任何字符,只是提供了一些行。

EN

回答 1

Software Recommendation用户

发布于 2019-08-22 15:42:44

OCR通常通过在白色背景下识别黑色文本字符来工作,所以大多数OCR方法都试图将图像“二值化”,并将其转换为黑白图像。

考虑到您正在使用的映像,这里有一些问题使得这很困难:

  1. 灰色背景有接近铅笔书写和线条的阴影。
  2. 铅笔画的字不是用实心的形状做的,里面有许多阴影。
  3. 虚线和字符的颜色是相近的。

这些问题的结合导致没有文本被识别,因为文本不够突出,或者在OCR试图解释虚线和背景时检测到大量的假文本。

这意味着,对于这种类型的图像,需要进行一些图像处理,以使文本更适合OCR。

例如,对于这个特定的映像,我可以使用来自LEADTOOLS工具包的图像处理类来实现以下结果。(免责声明:我是该工具包供应商的雇员)

所使用的图像处理如下:

  1. 直方图均衡化以提取文本中黑色字符中的细节。
  2. 灰度检测和二值分割沿着较宽的像素值来滤除图像中的噪声。
  3. 通过沿着像素颜色值的中值降低噪声,删除虚线,但尽可能保持文本清晰。

此代码如下所示:

代码语言:javascript
复制
HistogramEqualizeCommand histCommand = new HistogramEqualizeCommand(); 
histCommand.Run(image);

IntensityDetectCommand intensityDetectCommand = new IntensityDetectCommand(); 
intensityDetectCommand.LowThreshold = 5; 
intensityDetectCommand.HighThreshold = 255; 
intensityDetectCommand.Run(image); 

MedianCommand medCommand = new MedianCommand(); 
medCommand.Dimension = 9;
medCommand.Run(image); 

然后,通过使用工具箱中的OCR/ICR类,我能够识别文本:

要求ICR承认该案文。请注意,在该工具包的Java版本中没有此功能。

或者,如果不想执行图像处理,请考虑更改基本图像:

  1. 在白色背景上使用黑色文本。
  2. 用墨水代替铅笔写纯正的文字。
  3. 手印人物,使他们更加突出。
  4. 用实心的淡线代替虚线。
票数 2
EN
页面原文内容由Software Recommendation提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwarerecs.stackexchange.com/questions/62495

复制
相关文章

相似问题

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