有谁知道 API 用于 Windows Phone 的 OCRing 7 段显示?

Does anyone know any API for OCRing 7-Segment Display for Windows Phone?

我正在尝试开发 Windows Phone 8.1 应用程序,但我需要识别来自不同显示器的一些数字。

我正在关注这个例子:

http://bsubramanyamraju.blogspot.com/2014/08/windowsphone-81-optical-character.html

即使用 Microsoft OCR 运行时库:

https://www.nuget.org/packages/Microsoft.Windows.Ocr/

但是,当我试图识别这些类型的图片时,它不起作用。我什至找到了这个网站:

https://www.unix-ag.uni-kl.de/~auerswal/ssocr/

有人推荐吗?或者有人知道与之相关的任何代码吗?

感谢您的宝贵知识。

我希望你的问题的答案是 link 到 black-box process-anything OCR 工具的“当然,就在这里”,但是涉及到几个方面,最好分开考虑。

首先,在考虑任何 OCR 之前,需要对图像进行一些处理 pre-processing。您的图像样本非常不同,并且包含所有问题。

SAMPLE 1 对比度低,所以当它二值化为黑白层时,大多数 OCR 会在某个阶段在内部执行,没有要处理的字符。二值化之后是这样的:

查看此 OCR 博客 post 了解图像 pre-processing 的更多详细信息:http://www.ocr-it.com/guide-to-better-mobile-images-from-cell-phone-camera-for-higher-quality-ocr

其次,图像在 header 中没有 dpi 信息,某些 OCR 技术使用这些信息来确定图像的适当缩放比例。如果没有 header 信息,某些 OCR 程序可能会设置一些默认 dpi,这可能会或可能不会匹配您的图像,从而影响 OCR 结果。这不是关键,但如果可以在创建图片时实现,则更可取。

SAMPLE 2 具有足够的对比度和自适应公证 returns 清晰的图像。 header 中也缺少 dpi 分辨率值。

SAMPLE 3 有非常清晰的对比度,但它在 header.

中也没有分辨率 dpi

获得针对 OCR 处理优化的图像后,下一步就是研究 OCR 技术。

我没有测试你提到的那个,假设你有正确的实施但没有成功。我测试了过去使用过的其他 OCR 工具。

总的来说,我所知道的7段OCR是没有的。但是,我能够适应其他通用 OCR 来完成这项专门任务。我试过的每一个'out-of-box'或默认设置的OCR都无法处理这种识别。这是合乎逻辑和预期的。为什么?因为大多数通用 OCR 都是为了识别每个字符不可分割的像素模式而编写的。这与用于将单词分成单独的字符的“字符可分离性”原则有关。换句话说,内部 OCR 算法寻找构成每个字符的连接笔画。更强大的商业 OCR 允许在像素模式中出现一些中断,但预计它们会最小到 none,例如打印或扫描中的缺陷,这可能会导致字符丢失。

7段显示本质上会在每个字符中有多个中断,与字符可分离性原则冲突。

更强大的 OCR 技术 a) 对像素模式中断的容忍度更高 and/or b) 具有处理这些情况的特殊设置。

我会用OCR-IT web-based OCR API平台做进一步的测试,这个我很熟悉。我作为其 OCR 功能的开发人员工作。我还在自己的 iOS 和 Android 应用程序中广泛使用它。 OCR-IT API 基于强大的商业 OCR 引擎,因此它对字符缺陷有很好的容忍度,并且在这种情况下有一些帮助的控制。

SAMPLE 3. 这是最容易处理的样本,所以我先测试了它。使用 OCR-IT API,并使用默认设置发出请求,请求输出为 TXT 格式,我得到以下信息:

OCR 似乎是 a) 将字符分成两行,b) 尝试读取尽可能接近有效字符的结果模式。

根据这一快速分析,对 OCR 设置进行一次调整会导致以下识别:

在 OCR 结果中产生重大差异的设置是从默认打印类型切换到使用“DotMatrix”,它位于整个 OCR-IT API 设置的中间 XML :

<Job> 
 <InputURL>http://i.stack.imgur.com/wOtFx.jpg</InputURL>
  <CleanupSettings>
      <Deskew>false</Deskew>
      <RemoveGarbage>false</RemoveGarbage>
      <RemoveTexture>false</RemoveTexture>
      <RotationType>NoRotation</RotationType>
  </CleanupSettings>
  <OCRSettings>
      <PrintType>DotMatrix</PrintType>
      <OCRLanguage>English</OCRLanguage>
      <SpeedOCR>false</SpeedOCR>
      <AnalysisMode>MixedDocument</AnalysisMode>
      <LookForBarcodes>false</LookForBarcodes>
  </OCRSettings>
  <OutputSettings>
      <ExportFormat>Text</ExportFormat>
  </OutputSettings>
</Job>

DotMatrix 打印类型的使用开启了必要的算法,以增加对字符结构中断的容忍度,这通常是 dot-matrix 打印机在 dot-matrix 打印中的性质。或者,可以使用“打字机”打印类型,因为在打字字体中也需要字符中断,因此由 OCR 自动处理。

可以将 API 设置更改为 运行 使用“数字”字符集(语言)的 OCR,有效消除任何将 1 误读为 I 等的可能性。

SAMPLE 2. 在此示例中,每个字符结构中的间隙要宽得多。即使是处理 DotMatrix 或 Typerwriter 打印类型的标准算法也无法适应这些巨大的差距。使用所有可能的设置变体返回如下内容:

字符分割似乎是个问题。一种技术解决方案可以追溯到图像 pre-processing。可以实施一个简单的算法来填充 7 段字符的每个段之间的间隙。它不必非常精确,像这样:

但这足以产生完美的 OCR 结果。

由于事先可能不知道哪些 7 段 LCD 显示器需要填充间隙,哪些不需要,我建议将此算法应用于所有 LCD 7 段图像,间隙小或大。我会将间隙的大小限制为不超过段的宽度。鉴于这些屏幕具有各种背景和片段颜色,如果在二值化(黑白)图像上执行此 pre-procession 算法,则可以大大简化。

总体而言,假设执行了某些图像 pre-processing,则此任务可以通过 OCR 和接近 out-of-box 的功能实现。总的来说,我认为图像 pre-processing 对于任何 OCR-related 项目都是必需的,特定于该项目。

如果您对 OCR 或图像还有任何疑问 pre-processing,请私信我。

尽管 Ilya 的回答已经有一段时间了,感谢他和其他人的建议,尤其是这个:

Seven Segment Optical Character Recognition

我能够在 C# 中创建自己的 class:

https://github.com/FANMixco/7-segment-ocr-reader/blob/master/OCR/SevenSegmentOCR.cs

欢迎使用并改进它。