python OCR : Converting Scanned Image Into Text For Processing

标签 python python-2.7 python-imaging-library ocr tesseract

我正在尝试创建答卷标记(多项选择题)python 应用程序。答题卡将被扫描成图片文件(gif、png、jpg,格式任意)。

我的应用程序可以访问存储所有答案的数据库。

因此,它所需要的只是来自扫描图像的某种数据,以便它可以比较答案并计算分数。

答题纸有固定的尺寸,表格格式如下(考生在答案上打“X”表示他们的答案):

enter image description here

通过互联网搜索后,我发现有一些 OCR API 可用。

第一个是 Pytesser 。它非常易于使用,结果也很好。但它只适用于只有纯文本的图像。所以,我觉得不合适。

我找到的第二个是Ocropus。它看起来很强大,但在它的文档中

Windows

OCRopus relies a lot on POSIX path names and file systems. You may be able to install OCRopus on Windows using . An easier way is to install VirtualBox and run OCRopus in Ubuntu under VirtualBox.

所以我认为它主要用于 linux。我找不到window平台的详细安装指南。 (我是初学者,所以我可能是错的)

我找到的第三个是 python-tesseract ,它是 Tesseract OCR 的包装器。在他们的page ,提供了安装指南。基本上,我需要,

  1. python-tesseract-win32.deb
  2. python-opencv
  3. NumPy

但我不知道如何在窗口上安装 .deb 文件。我已经安装了 opencvnampy

所以以下是我的问题:

(1) 怎样把表格图片转换成可处理的数据(这可能吗?)?

(2) 是否还有其他有用的 OCR API,我没有在这里提到但可能有帮助?

(3) 最后,(我的愚蠢想法)是否可以使用 PIL 和然后使用pytesser将每个小图片转换成文本,然后对数据进行相应的处理?

仅供引用:我只需要它用于 Windows 平台,可能用于 windows xp 32 位。我正在使用 python 2.7.5。

最佳答案

答案与你的数字相对应

1) OCR 通常很难,但是(对您来说是个好消息)对于考试成绩处理,我认为这几乎是一个已解决的问题。在这种情况下,有针对此类问题的可靠解决方案。多年来,学校系统一直在这样做以自动化评分“scantron”测试,因此,如果您可以访问此类资源,那么走这条路可能是您最好的选择。至少你应该看看他们是怎么做到的

2) 我确定还有其他的,但这些是我所知道的主要免费的

3)a 我认为,如果您尝试在预算范围内完成这项工作并且时间不是问题,那么您的“愚蠢”想法实际上一点也不愚蠢。这可能是最好的方法,并且 scantron 测试评分员很可能使用类似的方法。您知道测试表格的确切尺寸。你可以知道在哪里看的直接像素映射。你可以很容易地使用 pytesser。请记住,pytesser 有时需要您调整图像的大小(有时向上,有时向下)以获得最佳精度。

3)b 您可能要考虑推出自己的解决方案。您可以使用形态学操作的概念(numpy 和其他图像库几乎可以开箱即用)。您甚至可能不需要这些运算符,只需对表格行执行二进制阈值(假设您已经将图像切割成表格行),然后简单地查找 Blob 并将分数标记为来自 Blob 值最多的列。

关于 python OCR : Converting Scanned Image Into Text For Processing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095737/

相关文章:

python - 从多个 python 文件登录到 Python 中的单个日志文件

python - 从此列表中递归地将所有文件和文件夹设置为 777

python - 属性错误 : read in Python

python - Snow Leopard、Django 和 PIL 的问题

python - pexpect 多线程程序在生成 shell 时挂起

python - Python 中的 GUI 与 TUI

linux - 在没有 root 或 sudo 的情况下安装 PyYAML 和 libyaml

python - 如果抛出异常,如何再次调用 try block 中的代码?

python - `nth` 破坏了 pandas 中排序的数据框

python - 在两行之间添加空间