适用于 Windows Phone 的 OCRing 7 段显示器的任何 API?

Posted

技术标签:

【中文标题】适用于 Windows Phone 的 OCRing 7 段显示器的任何 API?【英文标题】:Does anyone know any API for OCRing 7-Segment Display for Windows Phone?有谁知道 【发布时间】:2015-04-08 14:26:03 【问题描述】:

我正在尝试开发一个 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/

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

感谢您的宝贵知识。

【问题讨论】:

【参考方案1】:

我希望您的问题的答案是“当然,就在这里”,并带有指向黑盒流程(任何 OCR 工具)的链接,但其中涉及多个方面,最好单独考虑。

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

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

有关图像预处理的更多详细信息,请参阅此 OCR 博客文章:http://www.ocr-it.com/guide-to-better-mobile-images-from-cell-phone-camera-for-higher-quality-ocr。

其次,图像在标头中没有 dpi 信息,一些 OCR 技术使用这些信息来确定图像的适当缩放比例。如果没有标头信息,某些 OCR 程序可能会设置一些默认 dpi,这可能与您的图像匹配也可能不匹配,从而影响 OCR 结果。这并不重要,但如果可以在图片创建时实现,则首选。

SAMPLE 2 具有足够的对比度,自适应公证返回清晰的图像。标题中也缺少 dpi 分辨率值。

SAMPLE 3 有非常清晰的对比,但它在标题中也没有分辨率 dpi。

一旦您拥有针对 OCR 处理进行优化的图像,下一步就是研究 OCR 技术。

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

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

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

更强大的 OCR 技术具有 a) 对像素图案中断的更大容忍度和/或 b) 具有处理这些情况的特殊设置。

我将使用我熟知的 OCR-IT 基于 Web 的 OCR API 平台进行进一步测试。我是其 OCR 功能的开发人员。我还在我自己的 iosandroid 应用程序中广泛使用它。 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>

点阵打印类型的使用开启了必要的算法,以增加字符结构中断的容差,这通常是点阵打印机在点阵打印中的性质。或者,可以使用“Typewriter”打印类型,因为在打字字体中也会出现字符中断,因此由 OCR 自动处理。

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

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

字符分割似乎是个问题。一种技术解决方案可以追溯到图像预处理。可以实现一个简单的算法来填充 7 段字符的每个段之间的间隙。它不必非常精确,如下所示:

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

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

总体而言,假设执行了一些图像预处理,此任务可以通过 OCR 和几乎开箱即用的功能完成。一般来说,我认为任何与 OCR 相关的项目都需要图像预处理,具体到该项目。

如果您对 OCR 或图像预处理有任何疑问,请私信我。

【讨论】:

【参考方案2】:

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

Seven Segment Optical Character Recognition

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

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

随意使用并改进它。

【讨论】:

以上是关于适用于 Windows Phone 的 OCRing 7 段显示器的任何 API?的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Windows Phone 8.1 的 XMPP 库

适用于 Windows Phone 8 的 Visual Studio Express 2012 - 它在哪里?

适用于 Windows Phone 的 Google Analytics UTM 跟踪

xml 适用于Windows 8.1和Windows Phone 8.1应用程序的扩展器控件演示。

适用于 AR、位置聊天的 Windows Phone SDK?

xml 适用于Windows 8.1和Windows Phone 8.1应用程序的扩展器控件的模板。