所以我目前正在做一个项目,我使用pyautogui和pytesseract在我使用的视频游戏模拟器中截图,然后try 读取图像并确定我得到的时间.以下是我使用pyautogui获取所需区域的屏幕截图时的图像:

in game timer

当我测试它以确保它安装正确时,仅仅使用pytesseract.image_to_string()就可以处理文本图像,但当我使用游戏中的计时器图片时,它不会输出任何内容.这与图像的质量有关吗?或者与Pyteseract的模仿有关吗?

推荐答案

在使用PyteSeract执行OCR之前,需要对图像进行预处理.下面是一个使用OpenCV和PyteSeract OCR的简单方法.这个 idea 是获得一个经过处理的图像,其中要提取的文本是黑色的,背景是白色的.要做到这一点,我们可以转换为grayscale,应用轻微的Gaussian blur,然后Otsu's threshold,以获得一个二进制图像.我们使用--psm 6配置选项执行文本提取,以假设一个统一的文本块.查看here以了解更多选项.


输入图像

enter image description here

获得二值图像的大津阈值

enter image description here

来自Pyteseract OCR的结果

0’ 12”92

密码

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Grayscale, Gaussian blur, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Perform text extraction
data = pytesseract.image_to_string(thresh, lang='eng', config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.waitKey()

Python相关问答推荐

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

删除最后一个pip安装的包

运行总计基于多列pandas的分组和总和

使用索引列表列表对列进行切片并获取行方向的向量长度

图像 pyramid .难以创建所需的合成图像

如何制作10,000年及以后的日期时间对象?

如何使用它?

如何在Python脚本中附加一个Google tab(已经打开)

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

将tdqm与cx.Oracle查询集成

cv2.matchTemplate函数匹配失败

索引到 torch 张量,沿轴具有可变长度索引

在Admin中显示从ManyToMany通过模型的筛选结果

我什么时候应该使用帆布和标签?

操作布尔值的Series时出现索引问题

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

合并Pandas中的数据帧,但处理不存在的列

牛郎星直方图中分类列的设置顺序

从`end_date`回溯,如何计算以极为单位的滚动统计量?