Vinnaren i pepparkakshustävlingen!
2022-06-13, 00:36
  #1
Medlem
Följer den här koden för att spela in ett program som jag sedan kommer använda för att "detecta objects" på skärmen. Det finns dock ett problem med koden. Varje gång jag kör main och försöker spela in ett spel så får jag upp en svart fönster istället. Förstår inte varför det uppstår. Tex när jag försöker spela in spotify så funkar den hur bra som helst, men så snabbt man försöker spela in ett spel så går everything sideways. Någon som vet varför det blir så och på hur man kan fixa det?

Här är länken till personens github: https://github.com/learncodebygaming...window_capture

Det är classen windowcapture som krånglar till det. Jag misstänker att det är något fel på "win32gui.FindWindow(None, window_name)"


Hans youtube series: https://www.youtube.com/watch?v=WymC...EZzFPI&index=4

Han visar nämligen på hur man kan fixa problemet i video #5, dock så gör lösningen typ ingenting. Han har inte svarat på hur man kan lösa det efter den video, och ingen har kommit på en lösning heller. Ifall ni undrar något om koden lmk!

Uppskattar hjälpen!
Citera
2022-06-13, 01:13
  #2
Medlem
Utan att provat det själv verkar den ju spruta en screenshot på aktiv windows fönster. Är spelet i ett windows fönster?

Bonusfråga: Hur sker ditt testfall, steg för steg?
Citera
2022-06-13, 01:51
  #3
Medlem
Det var precis så den gjorde, den spammade skärmen med screenshots. Syftet med classen windowcapture är att den ska omvandla den till en "video" istället för bara bilder dvs den lägger ihop alla screenshots och omvandlar det till en livevideo istället. Tanken är att den ska screenshota ett spel, som i mitt fall är crossy roads (den har eget windows fönster), och sedan så ska den detecta objects och rita rektanglar runt dem. Dock så har jag ej kommit så långt än, kan inte få den att live sända bilderna.

Nu när jag kör koden så öppnar den ett fönster där den ska spela upp videon, men fönstret är helt svart.

Om du har möjlighet att titta på videon så kan du se hur den ska se ut. spola fram till 7:24
https://www.youtube.com/watch?v=7k4j-uL8WSQ&t=753s
Citera
2022-06-13, 13:16
  #4
Medlem
Den funkar tex på league of legends client, men när jag testar på Days Gone så får jag upp svart skärm istället...
Citera
2022-06-13, 13:20
  #5
Medlem
Så här ser den ut när jag försöker spela in crossy roads: https://imgur.com/a/L11hB9f

Och här funkar den när jag kör på paint, får en live feed på allt jag gör: https://imgur.com/a/LJvAdRr
Citera
2022-06-13, 13:54
  #6
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av greatinnit
Följer den här koden för att spela in ett program som jag sedan kommer använda för att "detecta objects" på skärmen. Det finns dock ett problem med koden. Varje gång jag kör main och försöker spela in ett spel så får jag upp en svart fönster istället. Förstår inte varför det uppstår. Tex när jag försöker spela in spotify så funkar den hur bra som helst, men så snabbt man försöker spela in ett spel så går everything sideways. Någon som vet varför det blir så och på hur man kan fixa det?

Här är länken till personens github: https://github.com/learncodebygaming...window_capture

Det är classen windowcapture som krånglar till det. Jag misstänker att det är något fel på "win32gui.FindWindow(None, window_name)"


Hans youtube series: https://www.youtube.com/watch?v=WymC...EZzFPI&index=4

Han visar nämligen på hur man kan fixa problemet i video #5, dock så gör lösningen typ ingenting. Han har inte svarat på hur man kan lösa det efter den video, och ingen har kommit på en lösning heller. Ifall ni undrar något om koden lmk!

Uppskattar hjälpen!
Mina Windows-kunskaper är minst sagt rostiga, men jag har lärt mig en gång i tiden att Windows GUI-appar hanteras på ett sätt och DirectX på ett annat. DirectX skriver mer direkt till grafikkortet. Din applikation kanske läser av GUI-lagret. Lite om detta: https://stackoverflow.com/questions/...directx-opengl

Kanske du ska kika på detta:
https://pypi.org/project/d3dshot/
__________________
Senast redigerad av Enterprise 2022-06-13 kl. 14:00.
Citera
2022-06-13, 14:04
  #7
Medlem
oo ska kika på det. Nu när jag kollade genom koden en gång till så såg jag den här lilla koden,
Kod:
 
signedIntsArray = dataBitMap.GetBitmapBits(True)
img = np.fromstring(signedIntsArray, dtype='uint8')
img.shape = (self.h, self.w, 4) 

Jag kör på 64 bits windows, den koden kanske är gjort för 32 bits? Eller spelar det ens något roll? just unit8 ser lite suspicious ut eftersom när jag körde en numpy funktion så fick jag en resultat som är för 64 bits medans han killen fick 32 bits. (som sagt är lite noob :P)
Citera
2022-06-13, 14:08
  #8
Medlem
Under den länken så stod det något intressant:
Kod:
If NumPy is available

# Captures will be np.ndarray of dtype uint8 with values in range (0, 255)
d = d3dshot.create(capture_output="numpy")

# Captures will be np.ndarray of dtype float64 with normalized values in range (0.0, 1.0)
d = d3dshot.create(capture_output="numpy_float")  

Detta är kanske en lösning? Är dock lite osäker hur jag kan implementera den.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback