- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 tesseract ocr tool从视频游戏中提取 ocr 文本(我正在预处理屏幕截图并将它们传递给命令行工具 tsv 输出并进行解析)。
我想将它用于测试自动化,这与 selenium 网络测试不同。也就是说,我希望能够等待元素出现,而不是休眠并单击按钮(主要是菜单)。
为了能够做到这一点,我需要能够始终如一地找到相同的按钮文本,并针对一系列视频游戏找到尽可能多的文本。为了抽象起见,我希望每个游戏的预处理/tesseract 选项都相同。
我可能可以为每个游戏中遇到的每个单词添加一个字典,但我不想这样做。
我有一个设置,我可以在其中测试许多不同的预处理/tesseract 选项组合并查看生成的单词。
我已经尝试将屏幕截图(70-90 dpi)放大 5 次,并在将其传递给 tesarect 之前将其设为灰度。
我可以使用哪些其他技术来提高结果的数量和准确性?我应该查看哪些 tesseract 旋钮?我可以添加任何其他有用的预处理吗?
附言我发现如果我将图片放大到两倍的长/宽 tesseract 似乎会爆炸,因为它耗尽了图像的内存。有静态限制吗?我可以找到它以便放大接近最大尺寸的图像吗?我可以调整吗?
最佳答案
这是迄今为止我从 tesseract 经验中学到的最重要的一课。开箱即用的 tesseract 非常适合识别扫描的书籍和报纸文本,但根据我的经验,当您尝试使用与标准书籍和报纸字体(如 Times New Roman)不相似的字体时,准确性会显着降低。以前训练难度大,但现在tesstrain.sh使它不在话下。您将不得不收集您的视频游戏字体(或至少看起来与它们相似的字体)并将它们作为训练脚本的输入提供。即使您的字体差异很大,tesseract 也能够在运行时以惊人的准确性为提供的图像选择正确的字体。另外,我知道这很乏味,但将视频游戏中遇到的所有单词的单词表提供给训练脚本会很有帮助。使用您自己的字体和您自己的单词列表训练 tesseract 将使您获得近乎完美的准确性,而无需执行任何其他操作。
如果可以,请自己进行布局分析并将图像裁剪为包含文本的部分。 Teseract 有一个内置的页面分割引擎,但它必须涵盖如此广泛的用例,以至于它很可能无法满足您的特定需求。此外,根据我的经验,如果将图像分成单行文本并使用分割模式 7(将图像视为单个文本行),它会进一步帮助提高准确性。
如果您将输入文本的 x 高度增加到您用于训练 tesseract 的高度(IIRC,在我的例子中是 70 像素),这会有所帮助。
超正方体 really likes 300 DPI .请注意,更改图像的 DPI 与更改其大小不同。 (例如,使用 ImageMagick,您可以 use the -density option 来更改图像的 DPI)。
根据我的经验,调整与匹配词典单词有关的不同“惩罚”设置对提高准确性影响最大。对我有用的设置:
language_model_penalty_non_dict_word 0.975
language_model_penalty_non_freq_dict_word 0.575
segment_penalty_dict_case_bad 1.3125
segment_penalty_dict_case_ok 1.1
segment_penalty_dict_nonword 10.25
但是您显然应该自己进行调整。此外,我发现 x 高度设置在运行时非常有用:textord_min_xheight
和 min_sane_x_ht_pixels
。
我不知道 tesseract 有任何内存大小限制。您是否可能通过具有自身限制的包装器使用 tesseract?
注意:此答案假设您使用的是 tesseract 的最新稳定版本,即 tesseract 3.05。如果您使用的是 tesseract 4.0,您自己的训练和分割仍然适用,但答案的其他部分可能是 OBE。
关于python - 从视频游戏屏幕截图中尽可能多地识别文本的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50169850/
图像采集源除了显示控件(上一篇《.NET 控件转图片》有介绍从界面控件转图片),更多的是窗口以及屏幕。 窗口截图最常用的方法是GDI,直接上Demo吧: 1 private
我正在尝试编写一个程序来使用全局热键获取屏幕截图。下面是相应的代码: from datetime import datetime import os from pynput import keyboa
我正在构建一个应用程序,它应该为任何具有 Android 4 及更高版本的无根设备实现屏幕~镜像~,2 帧/秒就足够了。 我正在尝试使用 ADB“framebuffer:”命令来抓取设备屏幕截图 AD
如何使用 C++ 捕获屏幕截图?我将使用 Win32。 请不要使用 MFC 代码。 最佳答案 #include "windows.h" // should be less than and great
代码如下: import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.aw
我目前正在构建一个 Google Chrome 扩展程序,该扩展程序可以从不同页面获取多个屏幕截图并将其发布到端点上。我遇到的问题是时间不对。我的意思是,在页面停止加载之前就太早截取屏幕截图了。其次,
我有一个 View Controller ,其中导航栏是透明的。我的下一个 View 是表格 View ,其中导航栏是白色的。 为了停止不需要的动画,我在表格 View 的“viewDidDissap
我正在尝试从多个 URL 制作屏幕截图。我的代码工作正常,但结果我得到了事件窗口的图像。但我需要带有浏览器顶部的完整屏幕截图(URL) file = open('links.txt', 'r', en
我正在尝试(并实现)获取屏幕截图: robot = new Robot(); BufferedImage biScreen = robot.createScreenCapture(rectScreen
是否有任何应用程序可以拍摄 android 设备的视频/屏幕截图。我知道在桌面上捕获屏幕视频/图像的软件很少,例如 camtasia、snagit。 Android 设备有类似的东西吗? 我知道使用
想要捕获可能处于非事件状态的选项卡的图像。 问题是,当使用此处显示的方法时,选项卡通常在捕获完成之前没有时间加载,从而导致失败。 chrome.tabs.update() 回调在标签页被捕获之前执行。
我想在新的 tkinter 窗口 (TopLevel) 中显示我的屏幕截图,但我不想将其保存在电脑上。当我保存它时它工作正常但是当我尝试从内存加载屏幕截图时出现错误:图像不存在。 我的主窗口是root
我正在 try catch 我当前所在的屏幕,因此当我覆盖下一个 View Controller 时,我可以使它成为它后面的 ImageView 并使其显示为半透明。这是有效的,但现在它在中间产生了一
我正在寻找将 docx(以及后来的 excel 和 powerpoint)文档的第一页转换为图像的方法。我宁愿不手动解析文档的整个 xml,因为这看起来工作量很大;) 所以我想我只是想收集一些关于如何
好吧,碰巧我正在编写一个程序来截取一些屏幕截图,并且在处理另一个进程已经在使用的文件时遇到了一些困难,希望有人能帮助我找到一种方法来“关闭”这个进程或启发我如何继续. //Create a new b
我即将在 App Store 上发布我的应用程序,我想截取我的应用程序的屏幕截图,但状态栏中没有所有信息,例如运营商和 Debug模式等。 我知道 Marshmallow 有一个 System UI
UIGraphicsBeginImageContext(self.reportList.frame.size); CGRect tableViewFrame = self.reportList.fra
是否有任何简洁的方法来访问 android 设备的屏幕截图以编程方式。我正在寻找大约 15-20fps。 我找到了一个代码android\generic\frameworks\base\service
好的,我正在尝试为多个网站运行多个屏幕截图!我已经获得了多个站点的一个屏幕截图,我还可以获得一个站点的多个 Viewport 屏幕截图,但我有 34 个站点需要这样做!那么有人知道用 casperjs
我正在为 iOS 制作一个贴纸包,在将其提交到 App Store 之前,我需要包含至少一张来自 5.5 英寸 iPhone 和 12.9 英寸 iPad Pro 的应用截图。这些都是我没有的设备。
我是一名优秀的程序员,十分优秀!