yuka-friends / Windrecorder

Windrecorder is a memory search app by records everything on your screen in small size, to let you rewind what you have seen, query through OCR text or image description, and get activity statistics.
GNU General Public License v2.0
2.97k stars 128 forks source link

Roadmap: Add multi-monitor support #66

Closed ASC8384 closed 6 months ago

ASC8384 commented 10 months ago

「多屏开发」也是开发 roadmap 的一项,不过由于目前使用了 pyautogui 来做一些检测与处理操作,它还尚未加入多显示器支持,因此暂时还阻塞着🫨

Originally posted by @Antonoko in https://github.com/yuka-friends/Windrecorder/issues/54#issuecomment-1838883948

拟采用 https://python-mss.readthedocs.io/examples.html 来替代 pyautogui。

ASC8384 commented 10 months ago

如果多屏记录的话,是每个屏幕分开存储好,还是合在一起好?

Antonoko commented 10 months ago

我个人倾向合在同个视频/画面画布上不论是 OCR 还是回溯都是更方便的🤔 (应该很少有场景会想分开检索其中一个屏幕,逻辑上实现感觉也更复杂零碎

ASC8384 commented 10 months ago

我个人倾向合在同个视频/画面画布上不论是 OCR 还是回溯都是更方便的🤔 (应该很少有场景会想分开检索其中一个屏幕,逻辑上实现感觉也更复杂零碎

这样实现的话,逻辑确实好处理多了,但是如果屏幕是异形搭配(如下图),就会产生大量黑边。 图片

Antonoko commented 10 months ago

我觉得黑边是可以接受的(原本什么样就什么样),感觉没太多优雅可以雕花的花样,也能直接反应用户布局,挺好的🪼

配置中可以让用户决定录制【某单显示器】或【录制全部显示器】,应该就能满足大部分场景了(如果是“三个显示器只想录制其中两个”之类的就比较小众和复杂了,感觉可以先不管)

ASC8384 commented 10 months ago

我觉得黑边是可以接受的(原本什么样就什么样),感觉没太多优雅可以雕花的花样,也能直接反应用户布局,挺好的🪼

配置中可以让用户决定录制【某单显示器】或【录制全部显示器】,应该就能满足大部分场景了(如果是“三个显示器只想录制其中两个”之类的就比较小众和复杂了,感觉可以先不管)

但是,OCR 时忽略屏幕四边的区域范围,这块就有点难做了,感觉还是得分开,检索的时候同时呈现(但是 UI 上得重新设计?)

Antonoko commented 10 months ago

我觉得黑边是可以接受的(原本什么样就什么样),感觉没太多优雅可以雕花的花样,也能直接反应用户布局,挺好的🪼 配置中可以让用户决定录制【某单显示器】或【录制全部显示器】,应该就能满足大部分场景了(如果是“三个显示器只想录制其中两个”之类的就比较小众和复杂了,感觉可以先不管)

但是,OCR 时忽略屏幕四边的区域范围,这块就有点难做了,感觉还是得分开,检索的时候同时呈现(但是 UI 上得重新设计?)

是个好问题!如果能获取到屏幕的大小和坐标,应该可以用 PIL 给不识别的部分盖一层黑色遮掉、而不用裁剪~(其实最佳方法也是用黑色区域盖掉不识别的内容,而不是现在的剪裁静帧图片)。如果用这个方案,需要以复制图片的方式来处理,然后存入数据库的缩略图仍然使用最开始的录制原图进行处理。(现在是存储了裁剪后的图片作为缩略图,实际上不大合理)

现在的忽略范围是个相对的比例,应该是可以套用到不同屏幕上的(当然会有一些不精确的牺牲,不过我觉得还是能囊括大部分的情况)。如果这个功能要做到最完全体,就是截个完整的屏幕图片、用户拉框选择遮盖哪些地方了,现阶段应该还不用做这么复杂精细,用忽略范围的比例计算后遮掉画面应该是可行的。

ASC8384 commented 10 months ago

现在的忽略范围是个相对的比例,应该是可以套用到不同屏幕上的(当然会有一些不精确的牺牲,不过我觉得还是能囊括大部分的情况)。如果这个功能要做到最完全体,就是截个完整的屏幕图片、用户拉框选择遮盖哪些地方了,现阶段应该还不用做这么复杂精细,用忽略范围的比例计算后遮掉画面应该是可行的。

如果按照统一的比例裁剪的话,上面一个竖屏加一个横屏的使用场景就不合适了。不如先给自定义每个屏幕的裁剪范围?

Antonoko commented 10 months ago

现在的忽略范围是个相对的比例,应该是可以套用到不同屏幕上的(当然会有一些不精确的牺牲,不过我觉得还是能囊括大部分的情况)。如果这个功能要做到最完全体,就是截个完整的屏幕图片、用户拉框选择遮盖哪些地方了,现阶段应该还不用做这么复杂精细,用忽略范围的比例计算后遮掉画面应该是可行的。

如果按照统一的比例裁剪的话,上面一个竖屏加一个横屏的使用场景就不合适了。不如先给自定义每个屏幕的裁剪范围?

感觉也可以,先做到配置项中(放一个 dict/list 里吧,有几个屏幕就对应几项配置),ui 可以最后再看看怎么做(比如下拉选择每个屏幕进行配置,这个不急,可以我这边接入🪼)

ASC8384 commented 10 months ago

感觉也可以,先做到配置项中(放一个 dict/list 里吧,有几个屏幕就对应几项配置),ui 可以最后再看看怎么做(比如下拉选择每个屏幕进行配置,这个不急,可以我这边接入🪼)

修的差不多了 (可以先 review 了)

ASC8384 commented 10 months ago

@Antonoko 还需要讨论一下,多屏操作下文本重复率应该如何计算。 如果副屏放文档,导致长期不刷新,无疑会导致文本重复率上升。 或许可以考虑这种处理方式,挨个屏幕检测,一个不重复就记录所有? https://github.com/yuka-friends/Windrecorder/blob/7e8ce06602fee9d7f7059a78de7a97b81ef904f4/record_screen.py#L239C25-L247C57

Antonoko commented 10 months ago

挨个屏幕检测,一个不重复就记录所有?

好问题,我觉得这个思路是可行的👍