zhoupancake / starRailScanner

基于pyautogui的崩坏星穹铁道成就扫描脚本
11 stars 3 forks source link

starRailScanner——基于pyautogui的崩坏星穹铁道成就扫描脚本

项目迭代记录

目录

简介

本脚本旨在通过pyautogui进行的模拟键鼠操作以及pytesseract提供的文本识别功能实现对崩坏 星穹铁道游戏中的成就列表的提取与整理。由于笔者前端实现能力较差(其实是比较懒), 故而脚本通过python编译器在控制台中运行。

该项目此前曾提交过一个版本(但是已经被设置为private),故而该版本提交为该项目的version 2.0。相较于原版本中完成所有成就读取才进行成就匹配的操作,该版本修正为完成部分成就(一般为5个)的读取后即进行成就的匹配,在一定程度上降低了内存的使用量。

项目灵感主要来源于@椰羊CoCoGoat以及@HertaSpace),在此表示感谢。但是笔者希望可以通过本地操作避免视频数据或者批量图片的上传从而减轻网络负担,故而萌生了编写本地化脚本的想法。在椰羊CoCoGoat的启发下选择使用模拟键鼠操作进行截图处理并且使用文字识别从而完成图片中成就的读取。同时通过对静态化的图片而非视频进行ocr操作希望可以在一定程度上提高文字识别的精度。

适用范围

-[x] 2560*1600 for Chinese

-[x] 2560*1600 for English

-[X] 1920*1080 for Chinese

-[X] 1920*1080 for English

-[ ] 3840*2160 for Chinese

-[X] 3840*2160 for English

由于笔者使用的PC设备的分辨率为2560*1600,同时未对其余分辨率进行测试,故而当前该脚本可以适配的分辨率为2560*1600,后续经过测试后将适配3840*2160以及1920*1080等PC端设备。

笔者在代码中普遍采用相对位置坐标进行编码,故而在截图点位选择上不会出现较大的变动,主要需要适配的数据包括在使用pyautogui提供的scroll函数时鼠标滚轮的次数。

以上提到的数据均在保存在config.py中,各位开拓者可以根据使用的PC端配置进行相应的修改或等待脚本的更新。

项目结构

项目中主要包含脚本编码文件以及当前版本的全成就列表(以.xlsx形式存储),下面为对各代码文件的简单描述。

文件名称 描述
achievements 用于存储读取完成时的成就列表
achievementSet_full 用于存储全成就列表,其中包含脚本目前支持的语言
checkPoints.py 用于检测脚本运行环境,包括是否配置相关包以及设备分辨率
config.py 用于存储脚本运行相关参数,包括截图位置以及鼠标滚轮操作次数
crawl.py 用于从网页端更新全成就列表
excelOperation.py 用于存储excel相关操作,包括excel读写以及列宽操作
KeyboardListener.py 引入键盘监听组件pynput用于监听键盘端输入,停止脚本操作
Main.py 项目运行入口,组织并调用相应的函数操作
ocr.py 配置项目附带的pytesseract的调用参数
operation.py pyautogui库相关操作,包括鼠标移动,鼠标滚轮滚动以及截图等
process.py 根据游戏操作逻辑进行成就集切换,并且连通ocr以及截屏操作
selector.py 基于cv2进行的成就逐条提取并保存为图片以供识别
achievementSetfull/x.x().xlsx 全成就列表,以版本号命名,括号中为对应的语言
achievements/achievements_().xlsx 读取完成产生的成就列表,括号中为读取时的语言(读取完成后产生
tesseract 存储tesseract库的组件(若在本地存在配置可以不下载该文件夹)

同时项目中包含一个名为imgs的文件夹用于存储截图过程中产生的成就图片,各位开拓者可以在config.py中将save_img设置为True以保存产生的截图以共上传到其他的成就在线读取工具中进行识别,或者选择将其设置为False,截图产生的图片将会在完成识别后被删除。imgs中的存在对应于成就集的文件夹,由于成就集“我,开拓者”中逗号的存在到导致python在识别时产生错误编码的问题,故而采用英文命名。下面给出成就中文与图片存储文件夹的对照表。

成就集(中文) 存储文件夹(英文)
temp temp
不屈者的荣光 GloryOfTheUnyielding
与你同行的回忆 TheMemoriesWeShare
众秘探奇 FathomTheUnfathomable
我,开拓者 Trailblazer
战意奔涌 EagerForBattle
果壳中的宇宙 UniverseInANutshell
流光遗痕 VestigeOfLuminflux
瞬息欢愉 MonmentOfJoy
通往群星的轨道 TheRailUntoTheStar

注:temp目录主要用于暂时存储对于成就集中文的截图图片用于判断究竟处在什么成就集下并将图片保存至对应的文件夹中。

使用方法

环境配置

脚本基于pyhon3.9进行开发,在使用前需要检查python版本以避免无法使用。项目提供了相应的requirements.txt用于描述脚本使用的相关python库文件,使用前需要配置到运行环境中。

(由于调用的库较多,推荐使用anaconda或者miniconda等虚拟环境进行配置)

若使用pip直接安装或者在虚拟环境中使用pip安装:

pip install -r requirements.txt

若使用conda进行安装(不推荐):

conda install --yes --file requirements.txt

项目文件中已经附带了相应的pytesseract文件,若在进行项目下载时下载了对应的文件夹则无需进行pytesseract的相关配置,若未下载相应的文件且系统环境变量中存在相应的文件同样无法进行相应的配置。

版本检查

由于部分时间笔者无法及时更新当前版本的全成就列表,故而可能存在当前版本的成就更新后无法及时识别的问题,开拓者们可以自行更新对应版本的全成就列表或者等待笔者更新捏。

参数设置

开拓者们可以根据自身需求以及设备的响应参数对config.py中的参数进行修改。config.py中主要包括下面的参数。

参数名 描述
language String型变量,表示在读取时使用的语言(请确保与游戏中的语言相同
save_img Bool型变量,True为保存截图图片,False不保存截图图片,(默认为True
ACHIEVEMENTS_FILE String型变量,表示完整成就集的路径,在版本更新后请使用最新的成就集
counts 不要修改该变量,用于读取保存图片的文件夹中的文件数用于命名
TESSDATA_PREFIX 不要修改该变量,用于配置tesseract配置文件
TESSDATA_PATH 不要修改该变量,用于配置tesseract配置文件
listener_stop_flag 全局变量,用于在外部强制停止后停止监听进程
main_stop_flag 全局变量,用于在外部强制停止后停止主进程
name 不要修改该变量,用于匹配中文成就集名称以及文件夹,根据语言自动匹配
location 不要修改该变量,该变量用于标识截图的坐标信息(以相对坐标形式)
location_list 谨慎修改该变量,该变量存储不同分辨率下标识截图的坐标信息

(注:language变量默认值为“ch”表示中文,若使用英语则变更为“en”。根据测试,目前使用英语的成就读取准确率较高)

运行脚本


该部分操作为可选操作。

脚本中提供了使用爬虫自动化更新全成就列表的操作,目前支持的语言为中文,英语,日语。更新的源网址为https://stardb.gg/zh-cn/achievement-tracker(中文),https://stardb.gg/en/achievement-tracker(英语),https://stardb.gg/ja/achievement-tracker(日语)。但是爬虫获取全成就列表的方式为解析对应页面的HTML代码,这一操作将受到HTML代码结果的影响,所以如果出现了问题请及时联系笔者

进行更新操作时请在虚拟环境下运行以下代码。

python crawl.py

更新的全成就列表将直接存储至achievementSet_full文件夹中。


完成配置后可以直接开始通过脚本读取成就集。脚本中提供两种成就集的读取方式。

以下的代码需要在系统的管理员权限下执行。

(注:若输入了中文成就集名字但是未输入后续的参数,则默认使用替换的方式进行读取)

强制运行停止

在最新的版本的脚本中已经实现了对于误操作进行强制终止的外部介入。在发现脚本操作进入死循环后可以使用ctrl+C强制停止脚本的运行。由于该项操作主要基于对键盘的监听在循环操作中引入中断符,故而在按下ctrl+C后可能存在1-2秒的延迟,在成功终止脚本运行后将会出现以下的提示框。运行被强行终止后最新读取的数据将不会被存储到achievement.xlsx中。

interuptDemo

运行结果

脚本运行结束将产生下图中的提示:

finishDemo

脚本运行将生成对应的截图(若将参数save_img设置为Ture)与achievements.xlsx文件。

下面为achievements.xlsx的部分截图:

achievementsListDemo

常见问题&问题反馈

项目在测试过程中发现了以下的问题,欢迎各位开拓者在使用之后发现新的问题并进行反馈!

其余问题可以在该项目下的issues中进行反馈或者email至zhouwl.public@gmail.com与笔者联系!请在进行问题反馈时附带设备的分辨率参数以及屏幕的缩放倍率。感谢!

未来计划

(虽然有可能是咕咕咕的画饼)

特别鸣谢

@椰羊CoCoGoat

@HertaSpace

@tesseract