2017-07-04 4 views
0

Im Moment brauche ich einen wirklich schnellen Screenshot, um den Screenshot in ein CNN einzufügen, das die Mausbewegung anhand des Screenshots aktualisiert. Ich versuche, die gleiche Art von Verhalten zu modellieren, die in this paper dargestellt ist, und in ähnlicher Weise die Schritte, die in 6 gezeigt sind (ohne die polare Umwandlung). Als Folge der sehr schnell Eingang benötigt, habe ich um ein wenig gesucht und konnte diesen Skript geändert from here leicht bekommen, dass AusgängeIst mit Python schneller als 10 Screenshots pro Sekunde möglich?

10fps
from PIL import ImageGrab 
from datetime import datetime 

while True: 
    im = ImageGrab.grab([320, 180, 1600, 900]) 
    dt = datetime.now() 
    fname = "pic_{}.{}.png".format(dt.strftime("%H%M_%S"), dt.microsecond // 100000) 
    im.save(fname, 'png') 

Kann ich etwas schneller erwarten? Mir wäre es gut, ein anderes Programm zu benutzen, wenn es verfügbar ist.

+0

Müssen Sie einen vollständigen Screenshot machen? Es gibt wahrscheinlich eine Möglichkeit, die Mauskoordinaten direkt zu erfassen, wenn das alles ist, was Sie brauchen. – dimo414

+0

Ah danke: P konnte es nicht erkennen. Die Bewegung des Cursors wird basierend auf den anderen Elementen auf dem Screenshot verschoben, ähnlich wie der Spieler im Papier seine Position basierend auf den Wänden im Spiel ändert. – Dinoswarleafs

+0

Verwenden Sie eine SSD? – cup

Antwort

2

Schreiben auf die Festplatte ist sehr langsam und ist wahrscheinlich ein großer Teil dessen, was Ihre Schleife so lange dauert. Versuchen Sie, die Zeile im.save() zu kommentieren und zu sehen, wie viele Screenshots erfasst werden können (fügen Sie eine counter Variable oder etwas Ähnliches hinzu, um zu zählen, wie viele Screenshots erfasst werden).

Angenommen, die Platten-E/A ist der Engpass, sollten Sie diese beiden Aufgaben aufteilen. Haben Sie eine Schleife, die nur die Screenshots erfasst und im Speicher ablegt (z. B. an ein Wörterbuch mit dem Zeitstempel als Schlüssel), dann ziehen Sie in einem separaten Thread Elemente aus dem Wörterbuch heraus und schreiben sie auf die Festplatte.

Siehe this question für Zeiger auf Threading in Python, wenn Sie nicht viel davon vorher getan haben.

+0

Oh, du hast Recht, der ernste Engpass in meiner Platte. In meinem Fall muss ich die Dateien eigentlich nicht auf einem Datenträger speichern, ich muss sie nur im Tensorflow lesen. Ich schätze, ich könnte einfach Bildgrab direkt in einem TF-Skript verwenden, das ungefähr 20-30 fps zu haben scheint, was alles ist, was ich brauche :) Ich bin nicht sicher, warum ich nicht darüber nachgedacht habe, aber jetzt Alles scheint offensichtlich. Vielen Dank für Ihre Antwort! Es hat mir wahrscheinlich nur eine Menge Zeit gespart – Dinoswarleafs

+0

Ich bin froh, dass ich helfen konnte :) – dimo414

Verwandte Themen