Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

简中适配替换templates图片素材 #376

Closed
Sunshine40 opened this issue Sep 2, 2023 · 31 comments
Closed

简中适配替换templates图片素材 #376

Sunshine40 opened this issue Sep 2, 2023 · 31 comments

Comments

@Sunshine40
Copy link

作者大大,我想问下替换templates中图片的时候,图片的尺寸(取景框)是不是没有必要和原来的素材完全精确匹配的?

另外请教下抠图的时候用什么工具比较方便?我没怎么做过这块工作,因为国服很快就要开活动了,我想少走点弯路。

顺便再问下这个repo还准备接受适配简中的PR么?不同服务器的适配怎么切换,有指导意见么?

@NateScarlet
Copy link
Owner

NateScarlet commented Sep 2, 2023

作者大大,我想问下替换templates中图片的时候,图片的尺寸(取景框)是不是没有必要和原来的素材完全精确匹配的?

没必要 但是有的模版图片有 {名称}.pos.png 限定有效范围 得跟着变

另外请教下抠图的时候用什么工具比较方便?我没怎么做过这块工作,因为国服很快就要开活动了,我想少走点弯路。

我截图是用 XnViewMP 从 last_screenshot.png 上截图另存,然后用 scripts/capture_template_position.py 生成位置范围 要额外增加范围就用画图改

顺便再问下这个repo还准备接受适配简中的PR么?不同服务器的适配怎么切换,有指导意见么?

不接受 我怕查水表

@Sunshine40
Copy link
Author

从 last_screenshot.png 上截图另存,然后用 scripts/capture_template_position.py 生成位置范围

我直接用Win11自带的“照片”工具提供的裁剪功能另存为了,然后用了capture_template_position.py,默认的参数生成的pos.png是全黑的,把threshold降低到0.4还是全黑的,降低到0.3就匹配到了4个点,但是和目测的图标位置不一致。

我尝试替换的是 single_mode_command_training.png,简中版截图是这样的
single_mode_command_training_cn

请问有什么经验能指导一下么?

@NateScarlet
Copy link
Owner

字怎么会这么大 你是不是缩放了再截的图 必须原始大小

@Sunshine40
Copy link
Author

Sunshine40 commented Sep 2, 2023

字怎么会这么大 你是不是缩放了再截的图 必须原始大小

last_screenshot.png 是这样的:
last_screenshot

哦,是不是要把模拟器调成 540 * 960 分辨率再搞?我看了Readme就按照1080*1920开始用了。

我先试试去。

@NateScarlet
Copy link
Owner

分辨率太小文字识别率会很低的 如果是原图上截下来的 匹配程度应该是100% 不可能需要设置更低阈值

@Sunshine40
Copy link
Author

那就奇怪了,如你所见简中UI的字就是这么大的,如果 scripts/capture_template_position.py 支持1080p分辨率的原图,那么我一开始贴出来的那两个字就是原分辨率未放大情况下裁切的结果,但是0.4的threshold生成出来的都是全黑。

@NateScarlet
Copy link
Owner

安卓模拟器同分辨率比桌面版更糊 模版都是基于960高的截的 我这个项目主要是DMM版用 模拟器只是顺便可以用 你如果要主要支持模拟器可能改成基于1920高的模版更合适

@NateScarlet
Copy link
Owner

项目里的模版都是从960高的截图上截取的

@Sunshine40
Copy link
Author

安卓模拟器同分辨率比桌面版更糊 模版都是基于960高的截的 我这个项目主要是DMM版用 模拟器只是顺便可以用 你如果要主要支持模拟器可能改成基于1920高的模版更合适

哦,简中是没有PC客户端的,只能直接基于Android客户端去尝试(基于iOS端就更玄幻了)。我先试试看怎么把整个图像匹配的流程走通吧。

@Sunshine40
Copy link
Author

确实把初始的out_img和TARGET_WIDTH都改成符合1080p分辨率之后就能生成正确的pos.png了,我再看看整个脚本流程能不能推进下去。

@Sunshine40
Copy link
Author

Sunshine40 commented Sep 2, 2023

你如果要主要支持模拟器可能改成基于1920高的模版更合适

ERROR [21:09:08]:__main__:142: unexpected exception: Traceback (most recent call last):
  File "C:\Users\Sunshine\Projects\auto-derby\auto_derby\__main__.py", line 138, in <module>
    main()
  File "C:\Users\Sunshine\Projects\auto-derby\auto_derby\__main__.py", line 107, in main
    job()
  File "C:\Users\Sunshine\Projects\auto-derby\auto_derby\jobs\nurturing.py", line 343, in nurturing
    tmpl, pos = action.wait_image(*spec.keys())
  File "C:\Users\Sunshine\Projects\auto-derby\auto_derby\action.py", line 46, in wait_image
    return next(template.match(app.device.screenshot(max_age=0), *tmpl))
  File "C:\Users\Sunshine\Projects\auto-derby\auto_derby\template.py", line 193, in match
    for j in _match_one(img, i):
  File "C:\Users\Sunshine\Projects\auto-derby\auto_derby\template.py", line 169, in _match_one
    _, max_val, _, max_loc = cv2.minMaxLoc(res, mask=mask)
cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-kuwfz3h3\opencv\modules\core\src\matrix_iterator.cpp:71: error: (-215:Assertion failed) A.size == arrays[i0]->size in function 'cv::NAryMatIterator::init'

感觉依赖分辨率的地方还挺多的,短期内我还做不到熟悉整个项目,可能从为了开发少踩点坑的角度还是把模拟器分辨率改成960*540吧。

其实这样对设备性能压力也更小,除了识别精度下降是个缺点——后续我碰到识别问题了再想办法吧。

@Sunshine40
Copy link
Author

分字错误

遇到了和 #16 (comment) 一样的问题,但是这次没办法通过修改游戏客户端来适应脚本了, @NateScarlet 能否指点下如何调整ocr分字?

@NateScarlet
Copy link
Owner

改分字算法 我之前按日服文本专门手调的 没有简单方法 或者你自己找文字识别服务

@Sunshine40
Copy link
Author

手调的……好吧那我只能好好研究一下这段分字逻辑了

@Sunshine40
Copy link
Author

Sunshine40 commented Sep 2, 2023

确实被Android端坑了,第1 3 5个选项“决定”的“定”能匹配上,第2 4个就匹配不上,猜测是文字渲染没有和像素对齐的原因。

Edit: 才意识到这个地方只要0.8的threshold,那没事了

@Sunshine40
Copy link
Author

改分字算法 我之前按日服文本专门手调的 没有简单方法 或者你自己找文字识别服务

其实我看了一下,就算分字分错了,两个字打上两个字的标注,完整的ocr结果还是对的,就是要对于经常会连起来的数字(主要是4和7)所在的两位数都标注一遍,之后应该还是正常使用的。

我把标注功能的那段 while len(ret) != 1: 改掉先这么用着了。

@NateScarlet
Copy link
Owner

安卓好像为了省性能 渲染分辨率会低于屏幕分辨率 所以字都会变糊

@Sunshine40
Copy link
Author

我倒不认为这是为了省性能,反而是抗锯齿的逻辑,在大果粒屏幕时代这种功能有效防止了大果粒辣眼睛,然后这个无时无刻不在抗锯齿的传统就保留下来了(我也不是这方面的专业人士,只是根据多年使用经验猜测的)

@Small-Ku
Copy link
Contributor

Small-Ku commented Sep 2, 2023

我個人猜測會因 dpi 調整,我現在用 MuMu 12 + Vulkan 720p 還是能跑日服,不過繁中就不行了

@Sunshine40
Copy link
Author

我個人猜測會因 dpi 調整,我現在用 MuMu 12 + Vulkan 720p 還是能跑日服,不過繁中就不行了

实话说这种项目,除了那些舍得一身剐的敢拿去卖,不然做出来终究是为了自己用的,所以也别指望做到多通配,像 @NateScarlet 这样做到这个程度替换下素材就能用已经超级良心了。

我现在就在一步步走流程查漏补缺+标注ocr,反正程序主体是完全ok的,支持的剧本对国服好歹能用个一年多,到时候我要么弃坑了,要么把该补的功能也补上了。

@Small-Ku
Copy link
Contributor

Small-Ku commented Sep 2, 2023

我有自己弄一個插件來讓 template 讀別的圖片啦,我説繁中不行是 OCR 的部分
(我繁中用的是 900p)

@Sunshine40
Copy link
Author

Sunshine40 commented Sep 2, 2023

我有自己弄一個插件來讓 template 讀別的圖片啦,我説繁中不行是 OCR 的部分

那简中OCR分字也是各种错(仅限于分数字,汉字没问题),我现在是手动给粘连的数字也标注了,先凑合着过,能跑通一整个流程再想办法精雕细琢

(我繁中用的是 900p)

@Small-Ku 能否帮忙看看我上面贴出来的一个报错 #376 (comment) ,你当初遇到过么?能说下改适配分辨率要改哪些地方么?

我是因为急着先弄成能用所以就先按照540p来做了

@Small-Ku
Copy link
Contributor

Small-Ku commented Sep 2, 2023

我是乾脆等比縮小截圖而已,用 900p 的截圖縮小到 540p 基本也能用

@Sunshine40
Copy link
Author

好吧,那我是直接把模拟器设置成540p了,这样的缺点是截出来的templates确实画质挺差的,我没试过能不能适配1080p,目前管不到了,还没到服务大众的地步。

@Small-Ku
Copy link
Contributor

Small-Ku commented Sep 2, 2023

模擬器的適配原本也是這樣做的,分辨率大一點的話分字也比較好分
雖然太大的話分開的部首很可能會被當成不同字

@Sunshine40
Copy link
Author

雖然太大的話分開的部首很可能會被當成不同字

笑死,旱的旱死涝的涝死,分类器能力不足是这样的

@Small-Ku
Copy link
Contributor

Small-Ku commented Sep 2, 2023

其實是日版字體比繁中版粗,漢字基本不會有筆劃分開而已

@Sunshine40
Copy link
Author

看出来了,简中有的时候两个字之间的空隙把背景色漏出来了,日版就没有

@wdjwxh
Copy link

wdjwxh commented Sep 3, 2023

看出来了,简中有的时候两个字之间的空隙把背景色漏出来了,日版就没有

能分享repo吗?

@Sunshine40
Copy link
Author

能分享repo吗?

不好意思,我调了一晚上,发现适配起来没有想象得简单,主要因为我是简中萌新,从没玩过日服,日语也不太懂,不知道一些template到底对应哪些位置。

所以到现在也不能做到production ready(无人值守养完一匹马),可以说没有实用价值,连我自己为了用都是去淘宝买的,你可想而知。

@Small-Ku
Copy link
Contributor

Small-Ku commented Sep 4, 2023

印象中 fork 裡有別人做繁中版的,應該可以參考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants