我正在开展一个项目,该项目将识别游戏中的团队(守望)并记录哪些玩家在哪个团队中。它有一个预定义的正在播放的列表,它只需要识别它们所在的图像。到目前为止,我已成功捕获每个团队的图像并获得每个玩家名称的粗略输出,但是,它会让几个字母混淆。
我的输入图片:
我从OCR获得的输出:
W THEMIGHTVMRT
ERSVZENVRTTR
ERSVLUCID
ERSVZRRVR
ERSVMEI
EFISVSDMBRR
ERSV RNR
ERSVZENVRTTR
EFISVZHRVR
ERSVMCCREE
ERSVMEI
EHSVRDRDHDG
由此可以看出,OCR将“A”与“R”混淆,将“Y”与“V”混淆。我能够获取Overwatch使用的字体文件并使用Train Your Tesseract生成.traineddata文件 - 我知道可能有更好的方法来生成此文件,但我不确定如何。
我的代码:
from pytesseract import *
import pyscreenshot
pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
tessdata_dir_config = '--tessdata-dir "C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"'
team1 = pyscreenshot.grab(bbox=(50,450,530,810)) # X1, Y1, X2, Y2
team1.save("team1screenshot.png")
team1text = pytesseract.image_to_string(team1, config=tessdata_dir_config, lang='owf')
team2 = pyscreenshot.grab(bbox=(800,450,1280,810)) # X1, Y1, X2, Y2
team2.save("team2screenshot.png")
team2text = pytesseract.image_to_string(team2, config=tessdata_dir_config, lang='owf')
print(team1text)
print("------------------")
print(team2text)
我应该如何提高对这些角色的认可?我是否需要更好的.traineddata文件,还是需要更好的图像处理?
感谢您的帮助!
答案 0 :(得分:0)
正如@FlorianBrucker所提到的,对字符串进行相似性测试允许(通过一些微调)在OCR级别之后找到正确字符串的能力。
答案 1 :(得分:0)
您可以尝试自定义 OCR 配置来进行稀疏文本搜索,“尽可能多地查找文本,没有特定的顺序。”
在 tesseract 配置中将 psm 设置为 11
看看你能不能做到:
tessdata_dir_config = "--oem 3 --psm 11"
要查看支持的页面分割模式 (psm) 的完整列表,请使用 tesseract -h。这是截至 3.21 的列表:
我正在为 Tesseract https://github.com/madmaze/pytesseract 使用 python 包装器
这里你可以将tesseract配置为:
custom_oem_psm_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(image, config=custom_oem_psm_config)