Seite 1 von 1

Performance Frage - Screenshot Modul

Verfasst: Freitag 12. Juni 2020, 16:01
von xXSkyWalkerXx1
Guten Tag,

ich hatte an einem Projekt gearbeitet, welches mich zwar einiges an Zeit kostete, aber mich intellektuell echt gut weiter gebracht hat, denn das ist mein erstes 'großes' Projekt.
Wie aber wahrscheinlich jeder Programmierer irgendwann einmal, muss man sich mit der Performance auseinander setzen.
Aktuell liegt mein Programm bei einer Laufzeit von ~90ms (~11FPS), was für mein Vorhaben, von einem Programm Screenshots zu machen (die nicht als Datei gespeichert werden) und mit OpenCV zu verarbeiten, zu langsam ist.

Die meiste Zeit beansprucht hier leider das Screenshotmodul (im Allgemeinen).
Zuerst nutzte ich 'ImageGrab' und nun 'mss', dass i.d.R. ~60ms (abhängig von Größe des Fensters) braucht.
D.h. 2/3 der Laufzeit geht nur an die Screenshots und nur 1/3 der Zeit wird für den Rest benötigt.

Nun frage ich mich, ob es noch ein schnelleres Modul als 'mss' gibt, um Screenshots aufzunehmen und mit OpenCV zu verarbeiten?
Leider wurde ich bei Google nicht so wirklich fündig.

Grüße,
xXSkyWalkerXx1

Re: Performance Frage - Screenshot Modul

Verfasst: Freitag 12. Juni 2020, 17:10
von xXSkyWalkerXx1
Ich nehme mal an, dass threading hier schon viel bringt?
Schau später Mal hinein.

Re: Performance Frage - Screenshot Modul

Verfasst: Sonntag 14. Juni 2020, 16:02
von xXSkyWalkerXx1
Habe das Aufnehmen des Fensters nun in ein seperaten Thread gesteckt und es funktioniert auch "schneller".
Wie das in der praktischen Anwendung aussieht, werde ich mir später anschauen. Muss bestimmt den Teil doch noch ändern.
Allerdings habe ich bemerkt, dass der Durchlauf der 'run()' Funktion (durch threading.Thread) unterschiedlich lang dauert.

Liegt das an einer möglichen ineffizienten Programmierung meinerseits oder liegt das an Python (GIL) bzw. den implementierten Modulen selbst?

[EDIT] Wohl wegen GIL.

Re: Performance Frage - Screenshot Modul

Verfasst: Sonntag 14. Juni 2020, 16:30
von Sirius3
Wie soll man das wieder beantworten können, ohne den Code zu sehen?