簡體   English   中英

如何使用顯示器的 output 作為程序的輸入?

[英]How can I use the output of my monitor as the input to a program?

一些背景:我希望制作一個可以基於視覺輸入玩視頻游戲的程序。 雖然我可以在屏幕上顯示游戲時將網絡攝像頭指向我的顯示器,但我更願意通過某種方式將屏幕上的任何像素信息發送到我的程序。

具體來說,我希望以大約 30fps 的速率對屏幕截圖進行采樣並對其進行計算。 到目前為止,我唯一能想到的就是在我的程序“按下”某個鍵時使用 Fraps 截屏,但這些只能以每秒一個的最大速率截取,並且需要使用這個外部程序。 我希望有一些方法可以更直接地截取這個屏幕信息。

我目前正計划使用 Java 和 Matlab 的組合,但我很樂意切換到具有快速抓取屏幕截圖的好方法的任何語言。 哦,我在 Windows 7 上執行此操作,以防此屏幕抓取操作的級別足夠低。

如果它是 2D Java 游戲,您只需將其發送到幀緩沖區以及您的視覺輸入程序。 If it's 3D and in Java, you could possibly do a similar thing with screenshotting functions in the library the game is written in. If it's a game in another window, you could try using java.awt.Robot ( http://download. oracle.com/javase/1,5.0/docs/api/java/awt/Robot.html )並查看屏幕截圖功能是否有效。 你會得到一個BufferedImage ,你將把它發送到視覺輸入程序(就像你從 Java 2D 或 3D 應用程序發送游戲視圖一樣)。

我會盡力回答你的問題。 基本答案是屏幕數據本身是 memory 映射的,因此它位於物理 memory 的某個位置。 但是,您的操作系統可能已阻止您直接通過其虛擬 memory 系統訪問該 memory。 因此,獲得訪問權限的唯一方法是:

a) 編寫設備驅動程序來訪問它或 b) 使用別人編寫的設備驅動程序來訪問它

在 Windows 上,您可以使用 DirectX 訪問屏幕數據。 該網站解釋了如何做到這一點:

http://www.dgrigoriadis.net/post/2008/01/29/Taking-screenshots-with-DirectX-90.aspx

你可以做到,但需要復雜的圖像處理、手勢識別和機器學習算法。 如果你想贏得那場比賽,系統的響應應該是實時的,這自然會使你的研究變得復雜。

但是如果原版游戲是自己開發的,那么你可能不需要任何圖像處理,網絡攝像頭和FRAPS。 在這種情況下,您只需要機器學習來玩游戲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM