Webcam Videostream mit Opencv und Tkinter

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Schönen Guten Abend zusammen,

    Ich bin neu in eurem Forum, konnte aber schon einige tolle Beiträge für meine Raspberry Pi Projekte Anwenden :) Leider komme ich bei meinem jetzigen Projekt nicht weiter und konnte auch nirgends eine passende Lösung finden.

    Über eine Webcam soll ein Videostream auf einer GUI angezeigt werden. Nach 10 Sekunden soll sich der Stream beenden und das Videofenster schließen.

    Mit dem folgenden Code bekomme ich per Button den Stream angezeigt, nur bekomme ich die zeitliche Abschaltung nicht hin.. Gibt es bei Opencv einen eigenen Befehl dafür?

    Dass man mit cap.release() und cv2.destroyAllWindows() den stream beenden und das Fenster schließen kann habe ich schon raus..

    Für jeden Kommentar und Hilfe bin ich sehr Dankbar!! :):)

  • Hallo,

    du könntest dir einen Zähler bauen, der nach 10 Sekunden ein 'after.cancel' aufruft.

    Ich habe noch nie einen Stream programmiert, mir leuchtet es auch ein, dass der oft bzw. schnell geupdatet wird, aber jede Millisekunde?

    Du solltest keine '*' importieren. Das bedeutet nämlich, dass du alle Namen von, in deinem Fall tkinter, in dein Programm lädst. Dadurch kann es durch unerwünschte Namenskollisionen kommen. Es sei denn du kennst alle tkinter-Namen plus die die tkinter selbst importiert auswendig und benutzt sie nicht. Wenn du nicht vor jeden Button 'tkinter.' schreiben willst, kannst du 'tkinter' umbennen, z.B. so : import tkinter as tk. Wenn du eine überschaubare Anzahl bestimmter Funktionen eines Moduls importieren willst, dann geht auch from tkinter import Label, Button.

    Du importierst 'time' nutzt es aber nicht, das kann also weg.

    Du solltest dir gleich angewöhnen dein Programm in Funktionen zu unterteilen. Außerhalb einer Funktion stehen eigentlich nur Konstanten, die schreibt man auch in GROSSBUCHSTABEN. Variablen und Funktionen schreibt man klein_und_mit_Unterstrich wenn nötig. Da du schon bei der GUI Programmierung bist, wirst du schnell merken, dass du ohne Objektorientierte Programmierung nicht weiter kommst. Das heißt du brauchst Klassen, die schreibt man dann in CamelCase. Einrückungen macht man in Python mit 4 Leerzeichen und nicht mit 2.

    Da du 'kamera_an' 10 Sekunden lang aufrufen willst, aber die Funktion jede Millisekunde aufrufst, müsstest du von 10000 runter zählen und danach ein after.cancel aufrufen.

    Ich kann es nicht testen, würde es mir aber mit deinem Code so vorstellen:

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo Dennis89, vielen Dank für deine Hilfe und Tipps. :) ich werde dein Code leider erst morgen oder Freitag testen können... Import time ist nur drin, da ich vorher damit versucht habe, die Zeit zu stoppen.

    Da die Webcam ein Teilprojekt ist und noch mehr auf der GUI angezeigt u.a Sensoren von einem Arduino, hat der Stream bei 100msek zu sehr gestockt, weshalb ich 1msek genommen habe, damit es ein wenig flüssiger läuft.

    Deine Anmerkungen zu meinem Skript -Aufbau werde ich zu Herzen nehmen und anpassen. :)

  • Hallo,

    wenn das GUI noch umfangreicher wird, kannst du dich mit dem offiziellen Python Tutorial in Klassen einarbeiten. Das wird bestimmt bald notwendig oder zumindest sehr nützlich sein.

    Vielleicht kann noch jemand was dazu sagen, der so etwas schon programmiert hat.

    Viel Erfolg und Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!