问题标签 [ocr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1484 浏览

php - Zinnia(手写识别)和 PHP 集成

谁能提供一些有关如何将百日草(手部识别系统)与常规 php 集成的说明或步骤?可以在此处找到其工作原理的示例。

谢谢你。

0 投票
11 回答
16742 浏览

java - 从哪里开始使用神经网络进行手写识别?

一段时间以来,我一直在尝试学习神经网络,并且可以在线了解一些基础教程。现在我想使用神经网络开发在线手写识别。所以我不知道从哪里开始?我需要一个很好的指导。最后我是java程序员。

你建议我怎么做?

0 投票
6 回答
14778 浏览

iphone - 适用于 Iphone 的 ABBYY Mobile OCR 引擎

我希望为我的下一个 iPhone 应用程序使用/购买 OCR 解决方案。

在这个网站上搜索答案并没有真正帮助我。

有人用过 ABBYY Mobile OCR Engine for iPhone 吗?

我感兴趣的是它有多好(认可)以及它的成本是多少?

谢谢你。

0 投票
5 回答
4568 浏览

key - OCR 一个 RSA 密钥卡(安全令牌)

我组装了一个快速的 WinForm/嵌入式 IE 浏览器控件,每天早上登录到我们公司的银行网站并抓取/导出所需的存款信息(该银行是一家小型区域银行)。由于我们有几十个从同一个主帐户中提取的“伪帐户”,因此实际上需要 10-15 分钟来检索。

无论如何,唯一的问题是我们的商业银行帐户需要一个 RSA 安全令牌(http://www.rsa.com/node.aspx?id=1156)——如果你不熟悉,它是一个显示每 15(?)秒随机一个 6 位数字,所以我必须在开始之前提示这个值。这是网站基于登录的安全模型之上的,所以即使你创建了一个不能做任何事情的只读帐户,你仍然需要输入 RSA 号码。我们为不同的人提供了 5 个这样的令牌公司。

从我们的角度来看,这是令人讨厌的安全。我开玩笑说要使用网络摄像头对密钥卡中的数字进行 OCR,这样他们就不必输入它——主要是为了在早上有人到达之前完成抓取/导出。好吧,他们问我是否真的可以做到。

所以现在我问你,你认为从相机生成的 JPEG 图像中可靠地对这些数字进行 OCR 需要多难(多少小时)?我已经知道我可以轻松获得 JPEG。我认为您尝试登录 3 次,因此它确实需要达到 99% 的准确率。我可以在空闲时间做这件事,但他们不希望我花几个小时以上的时间,所以我想尽可能多地利用现有代码。这是一个 7 段显示器(如闹钟),因此它不是 OCR 包习惯看到的文本。

还有——显示屏侧面有一个倒数计时器;通常,当它降至 1 格时,您会等到下一个数字出现,然后从 5 格开始(例如手机上的信号强度)。所以这也需要是 OCRd,但它不是文本。

无论如何,我在打字时想得越多,我就越不相信我能真正做到这一点,所以也许我应该在业余时间继续努力?

0 投票
4 回答
22410 浏览

python - 我自己的 Python OCR 程序

我仍然是初学者,但我想编写一个字符识别程序。这个程序还没有准备好。而且我编辑了很多,因此评论可能不完全匹配。我将使用 8 连接来标记连接的组件。

0 投票
2 回答
433 浏览

fonts - 易于眼睛的比例宽度字体并产生良好的 OCR

我想要一些关于比例宽度字体的建议,这些字体既吸引人又易于阅读,但也易于使用 OCR 处理。我很想将我的 OCR 结果从可接受提升到优秀,而不必将所有体面的、比例宽度的字体扔到门外。

我排除的字体包括 OCR-A(等宽和可怕)、OCR-B(相当不错,但等宽)和任何基于 MICR 的字体。我不是谷歌的怪物,但在过去的一个小时里一直在寻找建议——这就是我最终来到这里的原因。;-) 如果你有想法,我很想听听。

Θịзηη</p>

0 投票
2 回答
8054 浏览

image-processing - 梵文 OCR(印地语 / 马拉地语 / 梵语)

有人知道最近使用现代机器学习技术对印度文字进行光学字符识别的任何工作吗?我知道在加尔各答的 ISI 进行了一些研究,但据我所知,在过去的 3-4 年中没有任何新的发现,而且很遗憾地缺乏天城文的 OCR!

0 投票
3 回答
1516 浏览

.net - 扫描硬币,然后从图像中确定日期

我想编写一个 .NET 程序,该程序获取特定硬币类型(例如美国镍币)的图像,然后搜索该图像的年份。假设扫描始终为 300dpi,并且裁剪到硬币的图像尺寸一致。改变的是硬币的旋转。

那么如何确定日期呢? 我应该通过每年创建一个包含所有预期硬币图像的库来进行图像匹配吗?我应该尝试 OCR 日期吗?哪些库可能会有所帮助

提前感谢您的任何帮助或建议

0 投票
2 回答
39261 浏览

php - 如何使用 PHP 在网站上实现 OCR?

是否有任何免费的 OCR 库可以在 Linux 服务器上与 PHP 或 Python 一起使用?这个想法是能够上传图像并从中提取字符,或者允许用户“绘制字符”,并将它们从所述图像中解析出来。

0 投票
7 回答
3636 浏览

algorithm - 优化的OCR黑白像素算法

我正在为有限的字符集编写一个简单的 OCR 解决方案。也就是说,我知道字母表中所有 26 个字母的样子。我正在使用 C# 并且能够轻松确定给定像素是否应该被视为黑色或白色。

我正在为每个字符生成一个黑/白像素矩阵。例如,字母 I(大写 i)可能如下所示:

注意:我在本文后面使用的所有点都假设左上角的像素是 (0, 0),右下角的像素是 (4, 4)。1 代表黑色像素,0 代表白色像素。

我会在 C# 中创建一个相应的矩阵,如下所示:

我知道我可以通过使用多维数组来优化这部分,但现在让我们忽略它,这是为了说明目的。每个字母的尺寸完全相同,10 像素 x 11 像素(10 像素 x 11 像素是我真实程序中字符的实际尺寸。我在这篇文章中将其简化为 5 像素 x 5 像素,因为使用 0 更容易“绘制”字母和 1 在较小的图像上)。

现在,当我给它一个 10 像素 x 11 像素的图像部分以使用 OCR 进行分析时,它需要在每个像素 (10 * 11 = 110) 上的每个字母 (26) 上运行,这意味着 2,860 (26 * 110)每个字符的迭代(在最坏的情况下)。

我认为这可以通过定义每个角色的独特特征来优化。因此,例如,假设字符集仅包含 5 个不同的字母:I、A、O、B 和 L。它们可能如下所示:

在分析了每个角色的独特特征后,我可以显着减少测试角色所需执行的测试次数。例如,对于“I”字符,我可以将它的独特特征定义为在坐标 (3, 0) 中具有黑色像素,因为没有其他字符具有该像素为黑色。因此,我没有测试 110 像素来匹配“I”字符,而是将其缩减为 1 像素测试。

这就是所有这些角色的样子:

对于 5 个字符手动执行此操作具有挑战性,并且添加的字母数量越多,难度越大。您还希望保证您拥有最少的字母独特特征集,因为您希望尽可能优化它。

我想创建一个算法来识别所有字母的独特特征,并生成与上述类似的代码。然后我会使用这个优化的黑白矩阵来识别字符。

如何获取填充了所有黑色/白色像素的 26 个字母(例如 CreateLetter 代码块)并将它们转换为一组优化的定义字母的独特特征(例如新的 OcrLetter() 代码块)?我如何保证它是最有效的独特特征定义集(例如,不是将 6 个点定义为独特特征,可能有一种方法可以用 1 或 2 个点来完成,就像我的字母“I”示例能够)。


我想出的另一种解决方案是使用哈希表,这会将其从 2,860 次迭代减少到 110 次迭代,减少 26 次。这就是它的工作方式:

我会用类似于以下的数据填充它:

现在,当我到达图像中要处理的位置时,我将其转换为字符串,例如:“01110 00100 00100 00100 01110”,然后在哈希表中找到它。这个解决方案看起来很简单,然而,这仍然需要 110 次迭代才能为每个字母生成这个字符串。

在大 O 表示法中,算法是相同的,因为 O(110N) = O(2860N) = O(N) 用于在页面上处理 N 个字母。然而,它仍然以 26 倍的常数改进,这是一个显着的改进(例如,它需要 1 分钟,而不是需要 26 分钟)。


更新:到目前为止提供的大多数解决方案都没有解决识别角色独特特征的问题,而是提供了替代解决方案。我仍在寻找这种解决方案,据我所知,它是实现最快 OCR 处理的唯一方法。

我只是想出了一个部分解决方案:

对于网格中的每个像素,将具有它的字母存储为黑色像素。

使用这些字母:

你会有这样的事情:

现在对于每个字母,为了找到独特的特征,您需要查看它属于哪些桶,以及桶中其他字符的数量。那么让我们以“我”为例。我们转到它所属的所有存储桶 (1,0; 2,0; 3,0; ...; 3,4) 并看到具有最少其他字符的存储桶是 (3,0)。事实上,它只有一个字符,这意味着在这种情况下它必须是一个“我”,我们发现了我们的独特之处。

您也可以对白色的像素执行相同的操作。请注意,桶 (2,0) 包含除“L”之外的所有字母,这意味着它可以用作白色像素测试。同样,(2,4) 不包含“A”。

可以立即丢弃包含所有字母或不包含字母的桶,因为这些像素无法帮助定义独特的特征(例如 1,1;4,0;0,1;4,4)。

当您没有对字母进行 1 像素测试时,它会变得更加棘手,例如在“O”和“B”的情况下。让我们来看看“O”的测试...

它包含在以下存储桶中:

此外,我们还有一些白色像素测试可以提供帮助:(我只列出了最多 2 个缺失的那些)。缺失计数计算为 (5 - Bucket.Count)。

所以现在我们可以取最短的黑色像素桶 (3,2) 并看到当我们测试 (3,2) 时,我们知道它要么是“A”,要么是“O”。所以我们需要一种简单的方法来区分“A”和“O”。我们可以查找包含“O”但不包含“A”的黑色像素桶(例如 2,4)或包含“O”但不包含“A”的白色像素桶(例如 1,1)。其中任何一个都可以与 (3,2) 像素结合使用,以仅通过 2 次测试来唯一标识字母“O”。

当有 5 个字符时,这似乎是一个简单的算法,但是当有 26 个字母和更多像素重叠时,我该怎么做呢?例如,假设在 (3,2) 像素测试之后,它发现了 10 个包含该像素的不同字符(这是所有桶中最少的)。现在我需要找到与其他 9 个字符的区别,而不仅仅是 1 个其他字符。我将如何实现获得尽可能少的检查的目标,并确保我没有运行无关的测试?