2017-07-04 1 views
0

En ce moment je suis dans le besoin d'un screenshotter vraiment rapide pour alimenter capture d'écran dans un CNN qui mettra à jour le mouvement de la souris basé sur la capture d'écran. Je cherche à modéliser le même type de comportement présenté dans this paper, et de même faire les étapes décrites dans la figure 6 (sans la conversion polaire). En conséquence d'avoir besoin d'entrée très vite, je l'ai cherché un peu et ai été en mesure d'obtenir ce script from here légèrement modifié que les sorties 10fpsEst-il plus rapide que 10 captures d'écrans par seconde possible avec Python?

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') 

Puis-je attendre quoi que ce soit plus rapide? Je serais bien d'utiliser un programme différent s'il est disponible.

+0

Avez-vous besoin de prendre une capture d'écran complet? Il y a probablement un moyen de capturer directement les coordonnées de la souris si c'est tout ce dont vous avez besoin. – dimo414

+0

Ah merci: P ne pouvait pas le repérer. Le mouvement du curseur va être déplacé en fonction des autres éléments de la capture d'écran, tout comme le joueur dans le papier change sa position en fonction des murs du jeu. – Dinoswarleafs

+0

Utilisez-vous un SSD? – cup

Répondre

2

écriture sur le disque est très lent, et est probablement une grande partie de ce qui rend votre boucle prendre si longtemps. Essayez de commenter la ligne im.save() et de voir combien de captures d'écran peuvent être capturés (ajouter un similaire à compter variables counter ou quelque chose combien de captures d'écran sont en cours de capture).

En supposant que le E/S disque est le goulot d'étranglement, vous aurez envie de partager ces deux tâches vers le haut. Avoir une boucle qui capture simplement les captures d'écran et les stocke dans la mémoire (par exemple dans un dictionnaire avec l'horodatage comme clé), puis dans un fil séparé extraire les éléments du dictionnaire et les écrire sur le disque.

Voir this question pour les pointeurs sur le filetage en Python si vous ne l'avez pas fait beaucoup de ça.

+0

Oh vous avez raison, le goulot d'étranglement grave dans mon disque. Dans mon cas, je n'ai pas besoin de sauvegarder les fichiers sur un disque, j'ai juste besoin de les lire en tensorflow. Je suppose que je pourrais juste utiliser la capture d'image directement dans un script tf pour l'utilisation, qui semble obtenir environ 20-30 fps, ce qui est tout ce dont j'ai besoin :) Je ne sais pas pourquoi je ne pensais pas à ce sujet, mais maintenant tout semble évident. Merci beaucoup pour votre réponse! Ça m'a probablement juste sauvé des tonnes de temps – Dinoswarleafs

+0

Content de pouvoir aider :) – dimo414