光学字符识别

Posted

技术标签:

【中文标题】光学字符识别【英文标题】:Optical character recognition 【发布时间】:2011-07-16 07:11:49 【问题描述】:

大家好, 我正在尝试用 Java 创建一个程序,它可以读取屏幕的数字,也可以识别屏幕上的图像。我想知道我怎么能做到这一点? 数字的字体将始终相同。我以前从未编写过这样的程序,但我对它的工作原理的想法是让程序截取屏幕截图,然后将数字图像与屏幕截图图像的部分重叠并检查它们是否匹配,对每个数字重复此操作.如果这是执行此操作的正确方法,我将如何将其放入代码中。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

你总是可以训练一个神经网络来为你做这件事。它们有时会变得非常准确。如果你使用像 Matlab 这样的东西,它实际上已经具备了这样的功能。显然有一个用于 java (http://neuroph.sourceforge.net/) 的神经网络库,尽管我从未亲自使用过。

这里有一个关于使用neuroph的教程:http://www.certpal.com/blogs/2010/04/java-neural-networks-and-neuroph-a-tutorial/

【讨论】:

【参考方案2】:

您可以为此使用神经网络、支持向量机或其他机器学习结构。但它不会完成全部工作。如果您进行屏幕截图,您将得到一个非常大的图像,您需要在其中找到各个字符。您还需要处理这样一个事实,即相机可能不会直接指向您要阅读的文本。您可能需要使用一系列算法来锁定图像的正确部分,然后以大小变得中性的方式对其进行下采样。

这是我编写的一个简单的 Java 小程序,它可以完成其中的一些工作。

http://www.heatonresearch.com/articles/42/page1.html

它可以让您在相对较大的区域上绘图并锁定您的字符。然后它识别它。我正在使用字母表,但数字应该更容易。包含完整的 Java 源代码。

【讨论】:

【参考方案3】:

一种更简单的方法是使用模板匹配。如果字体相同,和/或大小(以像素为单位)已知,那么简单的模板匹配可以为您完成这项工作。如果输入的大小未知,您可能必须创建不同比例的图像副本并在每个比例下进行匹配。 一个具有极值(最高或最低取决于您遵循模板匹配的方法)是您的结果。 Follow this link for details

【讨论】:

以上是关于光学字符识别的主要内容,如果未能解决你的问题,请参考以下文章

光学字符识别技术

光学字符识别技术

移动端车牌识别,OCR光学字符识别技术

非黑即白--谷歌OCR光学字符识别

带有 OpenCV 的光学字符识别 Android

光学字符识别中的表示是啥?