Webcam in Frame einbinden

Fragen zu Tkinter.
Antworten
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

Hallo!

Ich habe mir gerade mit dem GUI Builder für Tkinter eine neue GUI erstellt und weiss nun nicht, wie ich mein kleines Programm, dass ständig Bilder von meiner Webcam abgreift und anzeigt, in die GUI einbinden kann.

Kann mir jemand behilflich sein?

MFG
OpenCV
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Wie ich schon öfters gesagt habe: Ich lerne Python seit erst einer Woche, aber ich bin mir ziemlich sicher das du da was Maschinennahes in C/C++ schreiben müsstest, das du dann einbindest. Du könntest dann die Bilder der Webcam abgreifen und ausgeben. Frag mich aber bitte nicht genau wie das geht. Frag lieber deinen Arzt oder Apotheker^^
MfG DeKugelschieber
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

DeKugelschieber: Quatsch.
Ich habe auch nicht viel Ahnung von Tk, habe aber gehört, dass es ein super Canvas-Widget bietet. Da musst du deine Bitmap draufbringen, hierzu dürfte wahrscheinlich PIL nötig sein (zur Umwandlung).
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo OpenCV

Willkommen in unserem Forum. Kannst du hier einmal den Code deiner mit dem GUI-Builder erstellten Oberfläche präsentieren? Ich nehme an du willst nur einzelne Bilder aus deiner Video-Sequenz herauspicken und auf der GUI darstellen? Also nicht bewegte Videobilder?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ach ich dachte jetzt das er die Wabcam live abreifen will
MfG DeKugelschieber
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

DeKugelschieber hat geschrieben:die Wabcam live abreifen
Fotos aus einem unreifen Bienenstock? :shock:
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Habe das Web nach folgendem gefragt:

Anfrage ans Web:
Wabcam
Antwort vom Web:
Meinten Sie: Webcam?
Anfrage ans Web:
abreifen
Antwort vom Web:
Meinten Sie: abgreifen?
Guss wuf :wink:
Take it easy Mates!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Muss wohl an mir vorbeigegangen sein dass Google gleich Web ist...

@Wuf: Meinten Sie Gruss? :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Leonidas

Danke für die Nachhilfe. Ich sehe ich bin auch noch nicht reif für die Prüfung. :D

NB: Übrigens wo befindet sich 'GOO.....LE' genau? In meiner Glaskugel habe ich ihn nicht gefunden. Ich wollte hier natürlich keine Werbung für einen der Suchgiganten machen.

Gruss wuf :wink:
Zuletzt geändert von wuf am Mittwoch 3. März 2010, 13:44, insgesamt 1-mal geändert.
Take it easy Mates!
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

...oder vielleicht doch eher "Gruß"? :wink:

-> Rechtschreibung

Außer du kommst aus der Schweiz, natürlich..... :D
Zuletzt geändert von dahaze am Mittwoch 3. März 2010, 12:28, insgesamt 1-mal geändert.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo dahaze

Danke für deine Ergänzungen. Versuche mich strikte an die deutsche Norm zu halten. Vielleicht kannst du mir bitte noch erklären wie man das ß am einfachsten über eine schweizer Tastatur eingibt. Ist leider eine meiner Bildungslücke. (Nobody is perfect :D)

Danke für deine Bemühung.

Gruss wuf :wink:
Take it easy Mates!
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

dahaze hat geschrieben:Außer du kommst aus der Schweiz, natürlich..... :D
Das meinte ich ja.... :D

Aber wenn du unbedingt 'ß' tippen willst.... ALT + 225 ->  ß

Gruß,
Simon
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

dahaze hat geschrieben:Aber wenn du unbedingt 'ß' tippen willst.... ALT + 225 -> ß
Funktionier bei mir leider nicht! Aber mit:

Code: Alles auswählen

AltGr + s
geht es.

Auf jeden Fall besten Dank für dein Hinweis.

Gruß wuf :wink:
Take it easy Mates!
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

wuf hat geschrieben:Hallo OpenCV

Willkommen in unserem Forum. Kannst du hier einmal den Code deiner mit dem GUI-Builder erstellten Oberfläche präsentieren? Ich nehme an du willst nur einzelne Bilder aus deiner Video-Sequenz herauspicken und auf der GUI darstellen? Also nicht bewegte Videobilder?

Gruss wuf :wink:
Nein ich will eigentlich schon, dass es Livebilder sind, also, dass z.B. mit einer bestimmten fps-Intervall andauernd Bilder abgegriffen werden.
Der Code:

Code: Alles auswählen

import Tkinter
import os # needed for relative image paths

# Using new-style classes: create empty base class object
# for compatibility with older python interps
#if sys.version_info < (2, 2):
#    class object:
#        pass

class Preview(object):
    _images = [] # Holds image refs to prevent GC
    def __init__(self, root):


        # Widget Initialization
        self._frame_1 = Tkinter.Frame(root,
        )
        self._label_1 = Tkinter.Label(root,
            font = "{Times New Roman TUR} 20 bold",
            relief = "sunken",
            state = "active",
            text = "FaceDec",
        )
        self._button_1 = Tkinter.Button(root,
            font = "{Times New Roman TUR} 8",
            text = "Bild speichern",
        )
        self._label_2 = Tkinter.Label(root,
            text = "#Kurze Programmanleitung...",
        )
        self._listbox_1 = Tkinter.Listbox(root,
            height = 0,
            width = 0,
        )
        self._label_3 = Tkinter.Label(root,
            text = "(C) 2010",
        )

        # widget commands

        self._button_1.configure(
            command = self._button_1_command
        )
        self._listbox_1.configure(
            xscrollcommand = self._listbox_1_xscrollcommand
        )
        self._listbox_1.configure(
            yscrollcommand = self._listbox_1_yscrollcommand
        )


        # Geometry Management
        self._frame_1.grid(
            in_    = root,
            column = 2,
            row    = 1,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = "news"
        )
        self._label_1.grid(
            in_    = root,
            column = 1,
            row    = 1,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = "n"
        )
        self._button_1.grid(
            in_    = root,
            column = 2,
            row    = 2,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = "n"
        )
        self._label_2.grid(
            in_    = root,
            column = 1,
            row    = 2,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = ""
        )
        self._listbox_1.grid(
            in_    = root,
            column = 2,
            row    = 3,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = "news"
        )
        self._label_3.grid(
            in_    = root,
            column = 1,
            row    = 3,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = ""
        )


        # Resize Behavior
        root.grid_rowconfigure(1, weight = 0, minsize = 237, pad = 0)
        root.grid_rowconfigure(2, weight = 0, minsize = 220, pad = 0)
        root.grid_rowconfigure(3, weight = 0, minsize = 40, pad = 0)
        root.grid_columnconfigure(1, weight = 0, minsize = 513, pad = 0)
        root.grid_columnconfigure(2, weight = 0, minsize = 382, pad = 0)

Das wär der ganze Code, ich habs noch nicht ausgestaltet, es sieht nur ungefähr so aus, wies mal ausschauen sollte.


Ich hoffe, ihr könnt mir dabei behilflich sein. ;)
MFG
problembär

@OpenCV: Guckstu:

http://paste.pocoo.org/show/187154/

Bin aber nicht sicher, ob das Canvas für Live-Streaming schnell genug ist. Schreib' später doch mal dazu.

Gruß
OpenCV
User
Beiträge: 20
Registriert: Mittwoch 17. Februar 2010, 15:29

Vielen Dank für den Link, aber ich muss ja kein Bild einfügen, sondern einen Live-Stream...
Also das mit der Methode "getData()" passt schon, aber ich weiss nicht was ich in den Rumpf schreiben soll.
Ich habe in der Klasse Aufnehmen ein Attribut frame, in das mit einer bestimmten fps ein Bild eingelesen wird...

Ich wäre SEHR dankbar, falls jemand mir helfen würde :)

MFG
problembär

OpenCV hat geschrieben:Vielen Dank für den Link, aber ich muss ja kein Bild einfügen, sondern einen Live-Stream
:? Ich denke, ein Live-Stream ist eine schnelle Abfolge von Bildern (ggf. zzgl. Ton).
OpenCV hat geschrieben:Also das mit der Methode "getData()" passt schon, aber ich weiss nicht was ich in den Rumpf schreiben soll.
Ich habe in der Klasse Aufnehmen ein Attribut frame, in das mit einer bestimmten fps ein Bild eingelesen wird...
In Deinem Code oben sehe ich keine Klasse "Aufnehmen".
Wenn irgendwo ein Bild eingelesen wird, müßte das ggf. nach .gif umgewandelt werden und könnte dann wie gezeigt angezeigt werden.
Leider unterstützt Tkinter.PhotoImage derzeit AFAIK nur GIF und PGM/PPM.
(Ich fände schon toll, wenn eines Tages auch noch .jpg, .png und vielleicht noch .bmp möglich würden.)

Gruß
Antworten