如何有效地读取屏幕上的数字(pytesseract)?

2024-04-26

我正在尝试读取屏幕上的数字,为此我正在使用 pytesseract。问题是,尽管它有效,但它的作用很慢,而且根本不会产生好的结果。例如,对于这张图片:

我可以制作这个阈值图像:

它读取的是 5852 而不是 585,这是可以理解的,但有时使用不同的阈值可能会更糟。例如,它可以将 1 000 000 读取为 1 aaa eee,或将 585 读取为 5385r(是的,它甚至会毫无理由地添加字符)

没有任何方法可以强制 pytesseract 只读取数字或简单地使用比 pytesseract 更好的东西吗?

my code:

from PIL import Image
from pytesseract import pytesseract as pyt
import test
pyt.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract.exe'

def tti2(location) :
    image_file = location
    im = Image.open(image_file)
    text = pyt.image_to_string(im)
    print(text)
    for character in "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ*^&\n" :
        text = text.replace(character, "")
    return text

test.th("C:\\Users\\Utilisateur\\Pictures\\greenshot\\flea market sniper\\TEST.png")
print(tti2("C:\\Users\\Utilisateur\\Pictures\\greenshot\\flea market sniper\\TESTbis.png"))

“测试”的代码(用于阈值):

import cv2
from PIL import Image

def th(Path) :
    img = cv2.imread(Path)
    # If your image is not already grayscale :
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    threshold = 60 # to be determined
    _, img_binarized = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)
    pil_img = Image.fromarray(img_binarized)
    Path = Path.replace(".png","")
    pil_img.save(Path+"bis.png")

可以使用仅包含数字值的 tessedit_char_whitelist 配置来强制 pytesseract 只读取数字。 您可以尝试使用 Tesseract 文档来改进结果:Tesseract - 提高输出质量 https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html

我还建议您使用:

  • 背景为白色,字符字体颜色为黑色。
  • 选择所需的超正方 psm 模式。在之前的案例中,我使用 7 psm 模式将图像视为单个文本行。
  • 使用 tessedit_char_whitelist 配置仅指定您正在搜索的字符。

考虑到这一点,代码如下:

import cv2
import numpy as np
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
originalImage = cv2.imread('1.png')
grayImage = cv2.cvtColor(originalImage, cv2.COLOR_BGR2GRAY)
(_, blackAndWhiteImage) = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY_INV)
text = pytesseract.image_to_string(blackAndWhiteImage, config="--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789")
print('Text: ', text)
cv2.imshow('Image result', blackAndWhiteImage)

cv2.waitKey(0)
cv2.destroyAllWindows()

以及期望的结果:

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

如何有效地读取屏幕上的数字(pytesseract)? 的相关文章

随机推荐

  • 用于网站的 Git / 接收后 / 测试站点和生产站点的分离

    我使用 Git 来管理网站的源代码和部署 目前测试站点和实时站点在同一个机器上运行 关注此资源http toroid org ams git website howto http toroid org ams git website how
  • 我们绝对需要 STS 来实现 SAML 吗?

    我第一次尝试实现支持 SAML 的 SOAP 服务 并且对 SAML 实现中安全令牌服务 STS 的作用有一些概念性问题 用户 gt Web 应用程序 SOAP SAML gt 消息传递应用程序 基本上 该场景是用户使用其用户名和密码登录到
  • 如何获取内存中缓冲区的文件描述符?

    如果我有一个包含文件数据的缓冲区 如何从中获取文件描述符 这是一个源自于的问题如何解压内存中的文件 https stackoverflow com questions 1553653 how to untar file in memory
  • jquery val() 不工作

    jQuery val 不起作用 这是简单的脚本 com form submit function var name nama val var komentar komentar val alert Hi name this is your
  • 如何将data.table按多列连续分组

    我想获取一堆由数百个分组变量分组的描述性统计数据 我知道从如何按多列对data table进行分组 https stackoverflow com questions 12478943 how to group data table by
  • 更新进度动画 gif 在回发时停止

    我使用了 ajax 更新进度控件 在回发发生时显示动画 gif 问题 它显示一段时间 但随后停止刷新 或者更确切地说 停止播放 循环 造成同样情况的实际原因是什么 请指教 谢谢 使用 Internet Explorer 时 gif 的动画将
  • 我想要表格格式的选择查询结果,例如摘要报告

    例如 month1 month2 month3 total district1 5 2 9 16 district2 1 0 11 12 total 260 150 140 550 这里最终的总数并不重要 但至少我需要显示每个地区每月的数量
  • 以非 root 用户身份在 UserData 中运行命令

    我正在尝试使用 EC2 UserData 脚本安装气流 我需要使用非 root 用户 ec2 user 运行一些命令 请参阅下面的脚本 UserData Fn Base64 Sub bin bash set xe Install GCC y
  • JavaFX 8:拦截应用程序“退出”

    为了验证用户所做的所有更改是否已保存 我想拦截 JavaFX 应用程序的退出 退出 是否有一种通用的方法来实现这一目标 例如覆盖事件 或者还有更多方法吗 正如他们已经说过的 这是通过拦截来完成的WindowEvent WINDOW CLOS
  • 在 Android 编辑文本字段中显示一条消息

    海 我有一个带有一个文本字段的 Android 程序 当它加载到模拟器上时 我需要在该文本字段内显示一条消息 当用户在该文本框中单击时 该消息应该消失 例如 请输入姓名 任何人都可以在这里发布一些示例代码吗 只需使用或致电setHint在物
  • 设备中的嵌套资源

    我是 Rails 新手 我想要一些关于我的路线和正确的路由逻辑的建议 我正在开发一个非常简单的应用程序 用户可以在其中发布列表 用户 设计模型 有很多列表 并且该列表属于一个用户 我的列表中有一个 user id integer 当用户成功
  • Elasticsearch 崩溃后无法恢复

    磁盘空间不足 导致 Elasticsearch 分片崩溃 三个节点现在为红色 两个节点已恢复 它们的状态为黄色 ES 的 CPU 利用率为 150 内存利用率很高 正在尝试恢复它们 但似乎存在一些版本匹配冲突 我清理了磁盘空间并删除了分片的
  • 如何在doctrine2查询生成器where语句中添加运算符

    我试图从一个表中进行选择 其中所选持续时间除以条目持续时间等于没有余数 qb em gt createQueryBuilder gt from AcmeBlogBundle Entry e gt andWhere duration e du
  • Android 和 PhoneGap——在 NPObject 上调用方法时出错

    我正在尝试设置FLAG SHOW WHEN LOCKED在我的phonegap应用程序中 但仅当显示特定页面时 为此 我有一个 Java 插件 扩展自CordovaPlugin在以下代码中execute method if action e
  • MySQL Workbench 连接编码

    在测试一些代码时 我偶然发现了以下 MySQL 错误 Error Code 1267 Illegal mix of collations utf8 general ci IMPLICIT and utf8mb4 general ci COE
  • PHP GD库调整照片大小

    我正在尝试使用 PHP 的 GD 库创建照片的缩略图 以下是我正在采取的步骤 创建GD图像 资源 获取图像的高度和宽度 创建一个空白的 gd 图像资源 高度为 100 像素 宽度适当 将资源图像复制到空白 gd 图像资源并保存这两个图像 这
  • 根据长度将字符串拆分为包含 1-3 个单词的字符串数组

    我有以下输入字符串 Lorem ipsum dolor sat amet consectetur adipiscing elit sed doeiu smod tempor incididunt ut Duis aute irure dol
  • 如何指定 Perl 的 Inline::Python 模块正在使用的 Python 版本?

    我正在运行 Debian squeeze 和 perl v5 10 1 并且安装了两个版本的 python pyversions i python2 5 python2 6 Python Inline显然使用python2 5 perl u
  • 如何在 Netbeans 中向 C++ 项目添加运行参数

    我正在使用 Netbeans 7 0 及其 C 插件 我想做这样的事情 test exe lt in txt gt out txt当我运行该项目时 在 Netbeans 中哪里可以将这些参数添加到项目中 提前致谢 Under File Pr
  • 如何有效地读取屏幕上的数字(pytesseract)?

    我正在尝试读取屏幕上的数字 为此我正在使用 pytesseract 问题是 尽管它有效 但它的作用很慢 而且根本不会产生好的结果 例如 对于这张图片 我可以制作这个阈值图像 它读取的是 5852 而不是 585 这是可以理解的 但有时使用不