Seite 1 von 1

Webcam in Frame einbinden

Verfasst: Montag 1. März 2010, 18:39
von OpenCV
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

Verfasst: Dienstag 2. März 2010, 09:21
von DeKugelschieber
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^^

Verfasst: Dienstag 2. März 2010, 11:01
von mkesper
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).

Verfasst: Dienstag 2. März 2010, 11:15
von wuf
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:

Verfasst: Dienstag 2. März 2010, 13:30
von DeKugelschieber
Ach ich dachte jetzt das er die Wabcam live abreifen will

Verfasst: Dienstag 2. März 2010, 16:06
von numerix
DeKugelschieber hat geschrieben:die Wabcam live abreifen
Fotos aus einem unreifen Bienenstock? :shock:

Verfasst: Dienstag 2. März 2010, 16:38
von wuf
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:

Verfasst: Dienstag 2. März 2010, 22:29
von Leonidas
Muss wohl an mir vorbeigegangen sein dass Google gleich Web ist...

@Wuf: Meinten Sie Gruss? :twisted:

Verfasst: Dienstag 2. März 2010, 22:43
von wuf
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:

Verfasst: Mittwoch 3. März 2010, 10:20
von dahaze
...oder vielleicht doch eher "Gruß"? :wink:

-> Rechtschreibung

Außer du kommst aus der Schweiz, natürlich..... :D

Verfasst: Mittwoch 3. März 2010, 11:57
von wuf
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:

Verfasst: Mittwoch 3. März 2010, 12:30
von dahaze
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

Verfasst: Mittwoch 3. März 2010, 13:03
von wuf
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:

Verfasst: Montag 8. März 2010, 18:39
von OpenCV
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

Verfasst: Montag 8. März 2010, 22:51
von 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ß

Verfasst: Mittwoch 10. März 2010, 18:35
von OpenCV
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

Verfasst: Mittwoch 10. März 2010, 18:47
von 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ß