Pytesseract 提高 OCR 准确性

2023-12-22

我想从图像中提取文本python。为了做到这一点,我选择了pytesseract。当我尝试从图像中提取文本时,结果并不令人满意。我也经历过this https://stackoverflow.com/questions/9480013/image-processing-to-improve-tesseract-ocr-accuracy并实施了列出的所有技术。然而,它的表现似乎并不好。

Image:

Code:

import pytesseract
import cv2
import numpy as np

img = cv2.imread('D:\\wordsimg.png')

img = cv2.resize(img, None, fx=1.2, fy=1.2, interpolation=cv2.INTER_CUBIC)

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

kernel = np.ones((1,1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)

img = cv2.threshold(cv2.medianBlur(img, 3), 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
    
txt = pytesseract.image_to_string(img ,lang = 'eng')

txt = txt[:-1]

txt = txt.replace('\n',' ')

print(txt)

Output:

t hose he large form might light another us should took mountai house n story important went own own thought girl over family look some much ask the under why miss point make mile grow do own school was 

即使是 1 个不需要的空间也会让我付出很大的代价。我希望结果 100% 准确。任何帮助,将不胜感激。谢谢!


我将调整大小从 1.2 更改为 2,并删除了所有预处理。我使用 psm 11 和 psm 12 得到了很好的结果

import pytesseract
import cv2
import numpy as np

img = cv2.imread('wavy.png')

#  img = cv2.resize(img, None, fx=1.2, fy=1.2, interpolation=cv2.INTER_CUBIC)
img = cv2.resize(img, None, fx=2, fy=2)

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

kernel = np.ones((1,1), np.uint8)
#  img = cv2.dilate(img, kernel, iterations=1)
#  img = cv2.erode(img, kernel, iterations=1)

#  img = cv2.threshold(cv2.medianBlur(img, 3), 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

cv2.imwrite('thresh.png', img)

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe'
    
for psm in range(6,13+1):
    config = '--oem 3 --psm %d' % psm
    txt = pytesseract.image_to_string(img, config = config, lang='eng')
    print('psm ', psm, ':',txt)

The config = '--oem 3 --psm %d' % psm线使用字符串插值 (%) 运算符 https://docs.python.org/3.8/library/stdtypes.html#old-string-formatting取代%d为整数 (psm)。我不太确定是什么oem确实如此,但我已经养成了使用它的习惯。更多关于psm在这个答案的最后。

psm  11 : those he large form might light another us should name

took mountain story important went own own thought girl

over family look some much ask the under why miss point

make mile grow do own school was

psm  12 : those he large form might light another us should name

took mountain story important went own own thought girl

over family look some much ask the under why miss point

make mile grow do own school was

psm是页面分割模式的缩写。我不太确定不同的模式是什么。您可以从描述中了解代码的含义。您可以从以下位置获取列表tesseract --help-psm

Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR. (not implemented)
  3    Fully automatic page segmentation, but no OSD. (Default)
  4    Assume a single column of text of variable sizes.
  5    Assume a single uniform block of vertically aligned text.
  6    Assume a single uniform block of text.
  7    Treat the image as a single text line.
  8    Treat the image as a single word.
  9    Treat the image as a single word in a circle.
 10    Treat the image as a single character.
 11    Sparse text. Find as much text as possible in no particular order.
 12    Sparse text with OSD.
 13    Raw line. Treat the image as a single text line,
       bypassing hacks that are Tesseract-specific.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytesseract 提高 OCR 准确性 的相关文章

  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • 从字符串到类型的词法转换

    最近 我尝试用Python存储和读取文件中的信息 遇到了一个小问题 我想从文本文件中读取类型信息 从 string 到 int 或 float 的类型转换非常有效 但从 string 到 type 的类型转换似乎是另一个问题 当然 我尝试了
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • PIL Image.size 返回相反的宽度/高度

    使用PIL确定图像的宽度和高度 在特定图像上 幸运的是只有这一个 但这很麻烦 从 image size 返回的宽度 高度是相反的 图片 http storage googleapis com cookila 533ebf752b9d1f7c
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • spacy 如何使用词嵌入进行命名实体识别 (NER)?

    我正在尝试使用以下方法训练 NER 模型spaCy识别位置 人 名和组织 我试图理解如何spaCy识别文本中的实体 但我无法找到答案 从这个问题 https github com explosion spaCy issues 491在 Gi
  • 具有多个元素的数组的真值是二义性错误吗? Python

    from numpy import from pylab import from math import def TentMap a x if x gt 0 and x lt 0 5 return 2 a x elif x gt 0 5 a
  • selenium.common.exceptions.WebDriverException:消息:服务

    当我使用 selenium 控制 Chrome 时遇到了麻烦 这是我的代码 from selenium import webdriver driver webdriver Chrome When i tried to operate it
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • 在 Python 模块中使用 InstaLoader

    我正在尝试使用 Instaloader 下载与主题标签相关的照片以进行图像分析 我在GitHub存储库中找到了一个全面的方法 如何在终端中执行它 但是 我需要将脚本集成到Python笔记本中 这是脚本 instaloader no vide

随机推荐

  • 如何从AsyncTask返回数据到主线程

    我想将 Jsonobject 返回到主线程 但是当我尝试运行代码时 它返回以下错误 02 06 06 14 36 490 E AndroidRuntime 769 FATAL EXCEPTION main 02 06 06 14 36 49
  • 循环不打印函数输出

    我正在尝试创建一个循环 它可以为我提供一个带有一个截距和三个系数的回归分析的自举置信区间 对引导函数进行编程效果很好 问题是我必须使用索引 如index 1 来处理函数boot ci 中回归的每个对象 因为boot ci 不知道我的回归模型
  • C - 这个语法是关于什么的? <<

    请问这个符号是什么意思 我想要研究的东西的名称 谢谢 它移动整数 1 中的位var位置向左 所以实际上它计算的是 2 的幂var See 维基百科上有关位移位的文章 http en wikipedia org wiki Bit shift
  • 如何访问GCE VM实例的控制台?

    如何访问 Google Compute Engine VM 实例的控制台 Answer recommended by Google Cloud collectives google cloud Collective 要查看控制台输出 只读
  • 如何在 Thymeleaf 中迭代 X 项?

    我有模板 四个人用的li我应该拥有的元素ul元素 我该怎么做 现在我有类似的东西 div ul li a img src template images garden1 jpg alt Image a h2 h2 p p li ul div
  • iOS 中使用 dlsym 按名称调用函数

    在 iOS 中不能通过名称调用函数吗 我有一个名为的 C 函数getstring 我这样称呼它 void handle dlopen NULL RTLD NOW if handle fp func dlsym handle getstrin
  • 如何在 Thrust 中将 make_transform_iterator() 与counting_iterator<> 和execution_policy 一起使用?

    我尝试使用 MSVS2012 CUDA5 5 Thrust 1 7 编译此代码 include
  • 将鼠标悬停在单词上时在框中显示文本

    我想将鼠标悬停在单词上时显示 R markdown 文件中单词的定义 对于链接 可以这样做 I m an inline style link with title https www google com Google s Homepage
  • 尝试向所有已连接的套接字广播 socket.io 消息,例如房间

    挑战 我想用SailsJS 并且能够通过 socket io 加入一个房间 并从该房间接收未经请求的消息 不仅是在进入或离开房间时 还可以接收对象 因此有多个客户端连接到服务器 然后向每个房间广播 从服务器发起 消息 对象 从而向该房间中的
  • 对项目进行分组和计数

    我有一个 csv 文件 words csv 其中包含 5000 个单词 以逗号分隔 大多数字符串都是重复值 我可以使用 LINQ 执行以下操作 A 将常见单词分组并显示重复单词的数量 所以如果苹果重复了 5 次 香蕉重复了 3 次 它应该显
  • 如何在执行 ex 命令之前使 vim 的 `:global` 命令可确认?

    我怎样才能制作vim的 global命令询问用户是否要执行 ex 命令 与发生的情况类似 substite例如 带有 c 选项的命令 s Foo Fighters gc I tried g mypattern s n gc and g my
  • OpenGL:透明纹理问题

    我在 OpenGL 中遇到纹理透明度问题 正如您在下图中看到的 它不太有效 值得注意的是 黑色实际上是 ClearColor 我用来清除屏幕 我使用以下代码来实现混合 glEnable GL BLEND glBlendFunc GL SRC
  • 如何将图标(图像、徽标..)添加到状态栏

    我注意到 StatusBar 组件 React Native 没有道具可以包含任何类型的图标或徽标 如本文档中所示 https facebook github io react native docs statusbar html stat
  • 操作按钮未覆盖整个工具栏

    我使用工具栏来显示四个操作按钮 当我用菜单膨胀工具栏时 操作按钮显示在一侧 如图所示 如何让这些操作按钮覆盖整个工具栏 这是活动的代码 public class ResultActivity extends FragmentActivity
  • jQuery的scrollTop()方法不起作用

    我有以下 jQuery 代码 document ready function navtoTop click function html scrollTop topofthePage offset top 其中 navtoTop 是按钮的类
  • 带有 AVSEEK_FLAG_ANY 的 ffmpeg av_seek_frame 会导致灰屏

    Problem omxplayer的源码调用了ffmpegav seek frame 方法使用AVSEEK FLAG BACKWARD旗帜 虽然不是 100 确定 但我相信这会寻找最接近的 i 框架 相反 我想寻找确切的位置 所以我修改了源
  • jQuery on("paste") 第一次没有抓取或传递值

    对我来说是真正的问题 因为我不知道解决它 我编写的 jQuery 脚本应该获取 粘贴 操作的输入值 并通过 ajax 将其传递给 codeigniter 控制器 它实际上工作得很好 但前提是我第二次 以及以后 粘贴该值 当我将某些 div
  • 对 Guava BiMap 进行排序

    我是 Guava 库的新手 但发现 BiMap 非常适合我的需求 我的一个问题是我需要对 BiMap 中的值进行排序 通常 我会使用 TreeMap 因为它继承排序 但必须能够反转映射以查看键 就好像它们是值一样 所以我一直在寻求各位专家关
  • 我可以影响 VoiceOver 转子中显示的内容吗?

    我有一个基于文本的应用程序 我希望我的用户在启用 VoiceOver 时使用 线路 转子选项 但是该选项没有出现 我的应用程序中的文本是使用表格视图中的单元格进行布局的 单元格包含 UILabels 和其他视图 我担心我的实现会影响转子 看
  • Pytesseract 提高 OCR 准确性

    我想从图像中提取文本python 为了做到这一点 我选择了pytesseract 当我尝试从图像中提取文本时 结果并不令人满意 我也经历过this https stackoverflow com questions 9480013 imag