gpt4 book ai didi

python - 如何在 Python 中捕获和处理来自另一个应用程序的实时事件?

转载 作者:行者123 更新时间:2023-11-28 18:38:20 24 4
gpt4 key购买 nike

我是一名计算机科学专业的学生,​​作为个人项目,我对构建可以观看和生成有关在本地模拟器上运行的 Super Nintendo 游戏的有用信息的软件很感兴趣。这可能是当前健康状况、当前分数等(屏幕上任何清晰可见的内容)。模拟器以窗口形式运行(我使用的是 SNES9x),因此我不需要捕获屏幕上的每个像素,而且我只需要捕获大约 30fps。

我研究了一些库,如 FFMPEG 和 OpenCV,但到目前为止,我所看到的让我相信我必须有预先录制的游戏渲染图。

在某些时候,我想探索开发一种可能能够玩 super 银河战士的启发式 AI 的能力,但要做到这一点,它需要解释实时游戏玩法。像这样的东西所需的算法和数据结构在我的研究范围之内;视频处理不是,我是个菜鸟。任何指针都会很棒(请原谅蹩脚的计算机科学双关语)。

对于那些可能会指出抓取游戏内存比抓取屏幕数据更简单的人——是的,确实如此。我的兴趣在于开发仅提供人类玩家可能拥有的信息的东西,即屏幕上的视觉效果,所以这是我暂时感兴趣的方法。谢谢!

最佳答案

答:是的,python 可以通过 USB 输入设备获取和处理任何场景

实时图像(不是流...)处理设计问题是关于整体 RT 循环性能,主要是图像转换和处理,而不仅仅是静态图像大小和采集方法本身.

无论如何,您的代码必须在 [usec, nsec] 中仔细设计和预先测量(是的,有可用的 python 工具允许您将代码的时序问题基准化到大约 25 纳秒的分辨率)以便在您的通用图像处理架构中保持整个 RT 循环的可行性。此外,您将在资源管理和错误处理方面苦苦挣扎,这两者都会在 RT 调度中造成很多问题。

如何?以此为灵感出发

从医学成像 PoC python 原型(prototype)中为最初的图像捕获想法带来的示例:

def demoCLUT( ):
cameraCapture = cv2.VideoCapture(0)

cv2.namedWindow( 'msLIB:ComputerVision.IN' )
cv2.setMouseCallback( 'msLIB:ComputerVision.IN', onMouse )

cv2.namedWindow( 'msLIB:ComputerVision.OUT-0' )
cv2.namedWindow( 'msLIB:ComputerVision.OUT-1' )
cv2.namedWindow( 'msLIB:ComputerVision.OUT-2' )

success, frame = cameraCapture.read()

if success:

while success and cv2.waitKey( 10 ) == -1 and not clicked: # [msec]

aGrayFRAME = cv2.cvtColor( frame, cv2.COLOR_BGR2GRAY )

cv2.imshow( 'msLIB:ComputerVision.IN', frame )
cv2.imshow( 'msLIB:ComputerVision.OUT-0', aGrayFRAME )
cv2.imshow( 'msLIB:ComputerVision.OUT-1', reprocessIntoFalseCOLORs( aGrayFRAME, frame, aFalseCLUT ) ) # <frame>-destructive
cv2.imshow( 'msLIB:ComputerVision.OUT-2', reprocessIntoFalseCOLORs( aGrayFRAME, frame, aFalseCLUT_T ) ) # <frame>-destructive

success, frame = cameraCapture.read()
pass
else:
print "OpenCV.CLUT.DEMO: cameraCapture.read() failed to serve a success/frame ... "
pass
# ------------------------------------------------------------------<RELEASE-a-Resource>
cameraCapture = False #RELEASE-a-Resource setting it asFalse
print 30 * ">", "call clearWIN() to release & tidy up resources..."
# ------------------------------------------------------------------<RELEASE-a-Resource>

预先录制的序列是必须的还是最好的?

就您表达的动机而言,您的原型(prototype)将花费大量时间进行开发。那里预先录制的序列可能会帮助您专注于开发/测试方面,而您的注意力不会在游戏和 python 代码之间一分为二,但是这些不是必须的。

关于 FPS 的评论。您针对人类玩家构建 AI

话虽如此,您的初始 AI 引擎可能会以 10-15 FPS 的任何低速启动,无需仅仅因为人为的高 FPS 率而让自己陷入无法解决的 RT 循环难题。

我们的人眼/大脑串联在电视刷新率附近的某处产生运动幻觉(意思是模拟电视原件,大约 21 个半屏幕对人们来说已经足够几十年了(对狗来说不一样。 .. 因此,营销公司专注于影响人类,用人米而不是狗米来衡量他们的广告事件的影响,因为我们最好的 friend 根本不喜欢在电视屏幕上看那些奇怪的闪烁静电))。

所以不要过度设计要开发的 AI 引擎,它的目标应该是打败人类玩家,而不是狗玩家,不是吗?

关于python - 如何在 Python 中捕获和处理来自另一个应用程序的实时事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com