OCR应用前的图像清理

2024-01-03

过去几个小时我一直在尝试 PyTesser,它是一个非常好的工具。关于 PyTesser 的准确性,我注意到以下几点:

  1. 包含图标、图像和文本的文件 - 准确度 5-10%
  2. 仅包含文本的文件(已删除图像和图标) - 准确率 50-60%
  3. 拉伸文件(这是最好的部分) - 拉伸文件 2) 上述 x 或 y 轴上的精度提高了 10-20%

所以显然 Pytesser 不关心字体尺寸或图像拉伸。尽管有很多关于图像处理和 OCR 的理论需要阅读,但在应用 PyTesser 或其他库(无论使用何种语言)之前,是否有任何标准的图像清理程序(除了擦除图标和图像之外)需要完成?

…………

哇,这篇文章现在已经很老了。这几天我又开始研究OCR。这次我放弃了 PyTesser,转而使用 Tesseract 引擎和 ImageMagik。直接进入正题,我发现的是这样的:

1) You can increase the resolution with ImageMagic(There are a bunch of simple shell commands you can use)
2) After increasing the resolution, the accuracy went up by 80-90%.

所以 Tesseract 引擎毫无疑问是市场上最好的开源 OCR 引擎。这里不需要事先进行图像清理。需要注意的是,它不适用于包含大量嵌入图像的文件,而且我无法找到一种方法来训练 Tesseract 忽略它们。此外,图像中的文本布局和格式也会产生很大的差异。它非常适合仅包含文本的图像。希望这有帮助。


事实证明,tesseract https://github.com/tesseract-ocr/tesseract维基百科上有一篇文章以我能想到的最好的方式回答了这个问题:

  • 图解指南关于“提高质量[OCR] output" https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality.

  • 问题“图像处理提高 tesseract OCR 准确性” https://stackoverflow.com/a/10034214/2419207可能也有兴趣。


(初步回答,仅供记录)

我没用过PyTesser,但我做了一些实验tesseract(版本:3.02.02).

如果您在彩色图像上调用 tesseract,那么它首先应用全局大津法 https://en.wikipedia.org/wiki/Otsu%27s_method将其二值化,然后在二值(黑白)图像上运行实际的字符识别。

图片来自:http://scikit-image.org/docs/dev/auto_examples/plot_local_otsu.html http://scikit-image.org/docs/dev/auto_examples/plot_local_otsu.html

可见,“全球大津”并不总是能产生理想的结果。

为了更好地理解超正方体“看到”的内容,请将大津方法应用于您的图像,然后查看生成的图像。

结论:提高识别率最直接的方法就是自己对图像进行二值化(很可能您会通过反复试验找到好的阈值)然后将这些二值化图像传递给tesseract.

有人好心发布tesseract 的 api 文档 http://fossies.org/dox/tesseract-ocr-3.02.02/,因此可以验证之前关于处理管道的说法:流程页 http://fossies.org/dox/tesseract-ocr-3.02.02/group__AdvancedAPI.html#ga09be3b61fd89f7803fe37cc420b92b30 -> 获取阈值图像 http://fossies.org/dox/tesseract-ocr-3.02.02/group__AdvancedAPI.html#gaee19c9ea78a647420bbe99a447569995 -> 阈值转像素 http://fossies.org/dox/tesseract-ocr-3.02.02/classtesseract_1_1ImageThresholder.html#a8240c360cff397784e7e9f635d9ed7a3 -> 大津阈值矩形转像素 http://fossies.org/dox/tesseract-ocr-3.02.02/classtesseract_1_1ImageThresholder.html#a9bbeac96aad481ce652816d8780b6e00

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OCR应用前的图像清理 的相关文章

  • 从框架中获取可调用对象

    给定框架对象 由sys getframe http docs python org library sys html sys getframe 例如 我可以获得底层的可调用对象吗 代码解释 def foo frame sys getfram
  • 如何打印脚本的每一行,因为它仅针对正在运行的顶级脚本运行?

    python 跟踪模块将允许您运行一个脚本 打印每一行代码 因为它在脚本和所有导入的模块中运行 如下所示 python m trace trace myscript py 有没有办法做同样的事情 但是only打印顶级调用 即仅打印以下行my
  • 从 asyncio 子进程获取实时输出

    我正在尝试使用 Python asyncio 子进程来启动交互式 SSH 会话并自动输入密码 实际用例并不重要 但它有助于说明我的问题 这是我的代码 proc await asyncio create subprocess exec ssh
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 嵌套函数中的变量作用域

    有人可以解释为什么以下程序失败 def g f for in range 10 f def main x 10 def f print x x x 1 g f if name main main 带有消息 Traceback most re
  • MacOS Big Sur 中的 NPM 错误“找不到 Python 可执行文件”

    我已经花了整整一周的时间寻找这个问题的答案 但没有成功 我查看了每个 StackOverflow 帖子 Google 的每一篇文章以及我能找到的每个相关的 Github 问题 大多数相关错误似乎都比较旧 所以我想知道我的问题是否由于我使用的
  • 导入 SciPy 或 scikit-image,“from scipy.linalg import _fblas:导入错误:DLL 失败”

    我正在导入 from scipy import misc io 但我收到这些错误 Traceback most recent call last File C work asaaki code generateProposals py li
  • 如何进行重定向并保留查询字符串?

    我想进行重定向并保留查询字符串 就像是self redirect加上发送的查询参数 那可能吗 newurl my new route urllib urlencode self request params self redirect ne
  • python win32com.client 调整窗口大小

    我正在使用 Python 3 4 1 通过 win32com client 控制 Windows 应用程序 我可以激活它 我可以发送击键 点击等 现在我想知道是否有办法调整窗口大小并将其设置到特定位置 我找不到方法 这里有一些代码片段 所以
  • 关于具有自定义损失的 3 输出 ANN 的加权

    我正在尝试定义一个自定义损失函数 它在回归模型中接收 3 个输出变量 def custom loss y true y pred y true c K cast y true float32 Shape batch size 3 y pre
  • Python:处理图像并保存到文件流

    我需要使用 python 处理图像 应用过滤器和其他转换 然后使用 HTTP 将其提供给用户 现在 我正在使用 BaseHTTPServer 和 PIL 问题是 PIL 无法直接写入文件流 因此我必须写入临时文件 然后读取该文件 以便将其发
  • 使用最新值进行采样

    考虑以下系列 created at 2014 01 27 21 50 05 040961 80000 00 2014 03 12 18 46 45 517968 79900 00 2014 09 05 20 54 17 991260 636
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 如何读取多个文件并将它们合并到一个 pandas 数据框中?

    我想读取位于同一目录中的多个文件 然后将它们合并到一个 pandas 数据框中 如果我这样做的话它会起作用 import pandas as pd df1 pd read csv data 12015 csv df2 pd read csv
  • 数据类和属性装饰器

    我一直在阅读 Python 3 7 的数据类 作为命名元组的替代品 我通常在必须将数据分组到结构中时使用它 我想知道数据类是否与属性装饰器兼容 以便为数据类的数据元素定义 getter 和 setter 函数 如果是这样 是否在某处进行了描
  • 我应该在哪里对对象和字段进行 django 验证?

    我正在创建一个 Django 应用程序 它使用 Django Rest Framework 和普通的 django views 作为用户的入口点 我想对模型的独立字段以及整个对象进行验证 例如 字段 根据正则表达式函数输入的车牌是否正确 与
  • 如何在Python中不使用库函数将字符串转换为整数?

    我正在尝试转换 a 546 to a 546 不使用任何库函数 我能想到的 最纯粹 gt gt gt a 546 gt gt gt result 0 gt gt gt for digit in a result 10 for d in 01
  • 为什么我的 Python 散点图不起作用?

    我使用 pylab 创建了一个非常简单的散点图 pylab scatter engineSize fuelMile pylab show 该程序的其余部分不值得发布 因为正是该行给我带来了问题 当我将 散点 更改为 绘图 时 它会绘制数据图
  • 无法将 librosa 与 python 3 一起使用

    我已经在 Windows 上的 ubuntu 子系统上使用 pip3 正确安装了 librosa 但是当我尝试执行像这样的简单程序时 import librosa data sr librosa load sound mp3 print d
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种

随机推荐