AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

日服新字体下的LevelOcr适配和DockScanner适配

Open guoh064 opened this issue 1 year ago • 3 comments

你的功能请求是否与问题有关?

由于日服字体的更新,目前海图左侧的舰船等级和船坞内舰船的等级、心情不能正常识别。主要影响“舰船到达X级后停止”和紧急委托的换船条件判断。

舰船等级主要靠LevelOcr这个类处理,其对图像预处理的方式为利用背景颜色做减法后灰度化来预处理图片,判断区域内最左侧的L字母来截取掉所有的LV.部分,只保留数字部分来进行识别。 现在的日服的舰船等级长这个样子: 可以看到由于字体变宽,L的部分基本落在了全透明区域(尤其是露娜的识别,头发和L已经几乎混在一起了),可能需要新的处理方式; 船坞扫描等级时复用了这个类。 现在日服的船坞长这个样子: 这里LV.的宽度与海图识别中的宽度不同,因此可能对LevelOcr中的逻辑造成影响,需要注意。 可以看到心情数字的位置变得更右了,且底部的黑色阴影是跟随文字长度走的,因此仍然有几率出现唐斯的头发影响心情识别的后果。

解决方案

来点高人帮忙适配一下谢谢

其他内容

海图截图: MuMu12-20241012-000220 MuMu12-20241012-103352 MuMu12-20241012-103411 MuMu12-20241011-204658 船坞截图: MuMu12-20241011-204641 MuMu12-20241012-161022

guoh064 avatar Oct 12 '24 08:10 guoh064

OCR识别的部分应该还和Digit本身有关,目前DISASSEMBLE_COUNT_OCR/OCR_OIL/OCR_COIN等等都有问题,有一部分和位置有关,有一部分和位置无关,包括LevelOcr实际上也是Digit的衍生,都依赖于数字字体,但是日服数字字体出现了很大的变更,而且好像还不止一种新字体,~~感觉bin/cnocr_models/jp下的模型可能需要更新~~,现在各类数字能不能正确识别,全靠运气,识别基本不可靠。

edit: Digit好像用的是azur_lane的模型,一个只有数字和字母的模型,原本国服日服应该是一个数字字体,现在日服变化了,应该是要么更新一个新的模型,要么修改老的模型

yulu901107 avatar Oct 12 '24 12:10 yulu901107

OCR识别的部分应该还和Digit本身有关,目前DISASSEMBLE_COUNT_OCR/OCR_OIL/OCR_COIN等等都有问题,有一部分和位置有关,有一部分和位置无关,包括LevelOcr实际上也是Digit的衍生,都依赖于数字字体,但是日服数字字体出现了很大的变更,而且好像还不止一种新字体,~~感觉bin/cnocr_models/jp下的模型可能需要更新~~,现在各类数字能不能正确识别,全靠运气,识别基本不可靠。

edit: Digit好像用的是azur_lane的模型,一个只有数字和字母的模型,原本国服日服应该是一个数字字体,现在日服变化了,应该是要么更新一个新的模型,要么修改老的模型

可以考虑用neural network的digit recognizer来识别吧,虽然有点expensive但是稳 MLP能有个80% accuracy, CNN能有个95%以上accuracy

MoGHenry avatar Oct 13 '24 06:10 MoGHenry

对目前已经存在 azur_lane/jp/cnocr三个模型对26个我在不同界面截取的日服数字图片(时间不多就随手弄了一点)、3张素材图、1张日服新更新的细小字体的数字字体图,做了识别对比,目前发现的结论是: azur_lane识别率最高,但是想要接近100%的识别率,azur_lane需要重新训练,但是目前可以通过更改一些参数,让识别率大幅度提升,甚至达到可用的状态。

(其他两个库的数据不放了,基本不可用) 先说初步结论:提高Digit中的threshold至200以上,甚至提高到220,可以极大提升目前的识别率。 虽然日服更新了字体(目前有三个),但是数字部分,最重要的影响并不是字体,而是字形,日服将大部分的字形都极大的细化了,这导致了绝大多数的识别都出现了像素不连续的问题,识别缺位、出错,大部分都是因为字形变细了。

放对比图 图例:✅完全匹配;⚠️排除/符号后,结果匹配,处理后可能可用;❌无法匹配。

threshold=150,azur_lane默认模型,结果是基本不可用

Firefox_Screenshot_2024-10-13T09-52-16 134Z

threshold=180

Firefox_Screenshot_2024-10-13T09-49-55 706Z

threshold=200

Firefox_Screenshot_2024-10-13T10-00-07 112Z

threshold=220

Firefox_Screenshot_2024-10-13T10-15-16 461Z

225以上效果提升不明显,且复杂图片的背景没法去除了。

以上素材取自于:

  • 主页的油/币/钻
  • 每日任务的识别
  • 战斗中的血量识别
  • 船坞中的上部和下部数字
  • 船坞中的舰船心情、好感度
  • 大世界中的舰船等级、以及其他一些数字
  • 卡池中的数字

识别代码完全复用的ALAS中的AlOcrDigit,去掉了Button耦合,默认CPU运行,直接运行到图片上,参数控制不变。

目前大世界中舰船等级的数字识别是错误率较高的,(上面素材中,125识别成128/12/1222的那个),不过感觉这个影响已经相对来说很小了。

但是这块的变更对整体的稳定性影响还是相当大的,需要大量的测试,之后会将threshold提升到200以上,放入本地代码中运行一段时间,看看是否会有效果,能否达到可用的状态。

yulu901107 avatar Oct 13 '24 11:10 yulu901107