繁体   English   中英

使用 Python 操作应用程序 window 框架

[英]Manipulate an application window frame using Python

TLDR:是否有 Python 库允许我将应用程序 window 帧作为图像并将其重写为所述应用程序?

所以整个故事是我想使用 Python 编写一个应用程序,它执行类似于Lossless ScalingMagpie的操作。 我想获取一个应用程序 window(例如视频游戏 window),将当前帧作为图像获取,然后使用一些机器学习/深度学习算法(如 FSR 或 DLSS)来放大所述图像,然后重写当前帧具有所述放大图像的应用程序。

到目前为止,我一直在研究一些放大算法,比如来自 Real-ESRGAN 的算法,但现在我的主要问题是如何实时放大视频游戏图像 我发现唯一与我需要做的事情相关的是PyAutoGUI 但是这个 package 只允许你截取应用程序的屏幕截图,而不能重写该应用程序的图形。

我希望我已经澄清了我的问题; 如果您还有任何问题,请随时发表评论。

感谢您阅读这篇文章,祝您有美好的一天。

使用 Python 执行此操作将非常困难。 这类事情涉及的很多性能是尽可能避免 memory 次复制,不幸的是,Python 的字符串和字节处理惯用语在任何惯用程序的过程中都会产生相当多的额外副本。 我说这是作为一个顽固的 Python 粉丝,他不断地试图将 Python 塞进它不属于的任何地方:你最好在 Rust 中这样做。

更新:在收到一些对此类事情有更直接经验的人的反馈后,我可能夸大了这里的困难。 Python 中的许多 ML 工具都提供零拷贝访问, 您可以轻松访问和操作 numpy 中的内存映射数据,甚至还有一个CUDA 协议可以对 GPU memory 中的数据执行此操作,所以虽然这并不容易,只要您操作实现为 numpy 操作而不是纯 python 逐像素逻辑,它不应该比其他 python 机器学习应用程序更难,后者需要访问本机 API 来访问其源数据。

但是,无法直接从 python 访问帧缓冲区数据,因此第 1 步将通过相关的 DirectX API 编写您自己的绑定。 由于 Magpie 是开源的,您可以看到它正在使用哪些 API,例如,在其各种 C++ “Frame Source”后端。 例如,这看起来很相关: https://github.com/Blinue/Magpie/blob/42cfcba1222b07e4cec282eaff639aead229f123/Runtime/GraphicsCaptureFrameSource.cpp#L87

然后您可以在 MSDN 上查找这些 API; 那个,例如,在这里: https://learn.microsoft.com/en-us/uwp/api/windows.graphics.capture.direct3d11captureframepool.createfreethreaded?view=winrt-22621

CFFI 是编写原生包装器的不错选择: https://cffi.readthedocs.io/en/latest/

将这些适当地粘合在一起留给读者作为练习:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM