Farben automatisch erkennen und zuordnen

Du hast eine Idee für ein Projekt?
Antworten
e1st33
User
Beiträge: 1
Registriert: Dienstag 14. Juni 2016, 19:00

Dienstag 14. Juni 2016, 19:09

Moin....

ich bin ein Python Anfänger und wollte mich damit mal beschäftigen.

Mein ziel ist es, unter einem Pi3, ein Programm zu haben das es mit ermöglicht die Farbe die sich unter dem Mauszeiger ist zu erkennen und zu notieren.

Im Sinne von :

35 Sekungen Warten
Farbe erkennen -> Notieren
35 Sekunden Warte


Ich hoffe jemand kann mir weiter helfen :)
Benutzeravatar
noisefloor
User
Beiträge: 2396
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 15. Juni 2016, 08:37

Hallo,
ch hoffe jemand kann mir weiter helfen
Genau die gleiche Frage gibt's ja auch schon bei ubuntuusers.de: Link zum Thread.

Da habe ich schon was dazu geschrieben und da gibt es auch schon eine Musterlösung in C.

Gruß, noisefloor
Benutzeravatar
snafu
User
Beiträge: 5452
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 15. Juni 2016, 08:48

@e1st33:
Was gefällt dir an der Antwort von Vain aus dem uu.de-Forum nicht? Falls die Lösung zwingend in Python sein soll: Es gibt eine Anbindung zur Xlib auch für Python (findet man unter den entsprechenden Suchbegriffen). Ansonsten könnte man ein GUI-Framework benutzen. Ich weiß nicht, inwieweit Qt oder ähnliche Bibliotheken dazu fähig sein. Natürlich würde dies aber die Abhängigkeiten weiter aufblähen. Die Lösung in C wäre deutlich leichtgewichtiger, da die Xlib beim Raspi meines Wissen vorinstalliert ist.
shcol (Repo | Doc | PyPi)
BlackJack

Mittwoch 15. Juni 2016, 10:27

Das C-Programm aus dem uu-Forum leicht abgeändert, so dass kein Bildschirmfoto vom *ganzen* Bildschirm gemacht wird, und nach Python portiert:

Code: Alles auswählen

#!/user/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from time import sleep

from Xlib import X
from Xlib.display import Display


def main():
    display = Display()
    try:
        root = display.screen().root
        while True:
            pointer = root.query_pointer()
            image = root.get_image(
                pointer.root_x, pointer.root_y, 1, 1, X.ZPixmap, 0xffffffff
            )
            pixel = map(ord, image.data)
            print('Color under pointer (BGRA format):', pixel)

            while display.pending_events():
                display.next_event()

            sleep(1)
    finally:
        display.close()


if __name__ == '__main__':
    main()
Adlerauge
User
Beiträge: 2
Registriert: Mittwoch 27. Juli 2016, 12:36

Mittwoch 27. Juli 2016, 12:59

Hallo zusammen,

ich bin gerade auf das Thema hier gestoßen.

Kann mir jemand dazu weiter helfen?
Und zwar habe ich das mal so ausprobiert. funktioniert auf dem Pi ganz gut, leider ist der mit der Rechenleistung zu schnell am Ende.
Jetzt habe ich es probiert, über Python von Windows aus zu starten.
Leider klappt das da nicht. Er gibt mir immer eine Fehlermeldung.

Kann mir wer sagen wo das Problem ist?

Lg
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Mittwoch 27. Juli 2016, 13:02

Hallo!

Wenn du uns verrätst wie die Fehlermeldung lautet, können wir vielleicht helfen.
BlackJack

Mittwoch 27. Juli 2016, 13:19

@Adlerauge: Wieso ist der mit der Rechenleistung zu schnell am Ende? Im Sekunden-Intervall die Farbe eines Pixels auszulesen dürfte selbst das allererste Raspi-Modell nicht wirklich fordern.

Unter Windows erfolgt die Anzeige nicht über X, also kann man da mit `Xlib` auch nichts wollen. Da musst Du Dir irgendwas mit der Windows-API basteln.
Adlerauge
User
Beiträge: 2
Registriert: Mittwoch 27. Juli 2016, 12:36

Freitag 29. Juli 2016, 15:04

Hallo zusammen,

sry das ich mich so spät melde, die 'Woche wahr recht hart :)

Also Fehler ist
Traceback (most recent call last):
File "C:\Users\Adlerauge\Desktop\123 test ohne time.py", line 5, in <module>
from Xlib import X
ImportError: No module named Xlib

Code: Alles auswählen

from __future__ import absolute_import, division, print_function
from time import sleep


from Xlib import X
from Xlib.display import Display


def main():
    display = Display()
    try:
        root = display.screen().root
        while True:
            pointer = root.query_pointer()
            image = root.get_image(
                372, 739, 1, 1, X.ZPixmap, 0xffffffff
            )
            pixel = map(ord, image.data)
            print(pixel)

        
            while display.pending_events():
                display.next_event()

            sleep(50)
    finally:
        display.close()


if __name__ == '__main__':
    main()
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Freitag 29. Juli 2016, 16:11

Adlerauge hat geschrieben:Also Fehler ist
Traceback (most recent call last):
File "C:\Users\Adlerauge\Desktop\123 test ohne time.py", line 5, in <module>
from Xlib import X
ImportError: No module named Xlib
Steht doch alles da, du hast das Xlib-Modul nicht installiert, was aber auch nicht verwunderlich ist .. weil, wie BlackJack das schon gesagt hat, es gibt keinen Xserver auf Windows, deshalb auch der Verweis auf die Windows-API.
the more they change the more they stay the same
Antworten