Bild erneut laden.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kowi0815
User
Beiträge: 3
Registriert: Donnerstag 1. Juni 2017, 15:00

Hi,

mein kleines Programm holt sich ein Bild von meiner Netzwerkkamera.
Könnte mir jemand einen Tipp geben, wie ich das Bild ständig neu laden kann, damit quasi ein Video draus wird?

Sonst geht alles soweit.

Code: Alles auswählen

  
# -*- coding: utf-8 -*-

import sys
from tkinter import *
import PyQt5
from PyQt5.QtWidgets import *
from PyQt5.uic import loadUi
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.uic import *
import urllib.request
import urllib
import numpy as np
import cv2



app = QApplication(sys.argv)
widget = loadUi('Tu.ui')


def BildAnzeigen(x):
    global zahl
    global testZahl

    if (zahl%2 == 0):
        #PfadCam = 'http://11.11.11.134/Streaming/channels/1/picture.jpg'
        PfadCam = 'http://www.wdr.de/themen/global/webcams/domcam/domcam_960_live.jpg'
        print (PfadCam)
    else:
        IpCamText = widget.LineEditCam.displayText()
        PfadCam = 'http://' + IpCamText + '/themen/global/webcams/domcam/domcam_960_live.jpg'
        #PfadCam = 'http://' + IpCamText + '/Streaming/channels/1/picture.jpg'
        #PfadCam = IpCamText
       
        print(PfadCam)
            url = PfadCam
    data = urllib.request.urlopen(url).read()
    pixmap = QPixmap()
    pixmap.loadFromData(data)
    icon = QPixmap(pixmap)
    widget.BildAnzeige.setPixmap(QPixmap(icon).scaled(600, 500))

def T():
def M():
def C():
def BildSSchwarz():

widget.ButtonAn.clicked.connect(T)
widget.ButtonAn.clicked.connect(BildAnzeigen)
widget.ButtonAn.clicked.connect(M)
#widget.ButtonAn.clicked.connect(C)
widget.ButtonAus.clicked.connect(BildSchwarz)

for Startschleife in range (0, 1):
    BildSchwarz()
    

    print('Erster Durchlauf beende')
    

widget.show()
sys.exit(app.exec_())

     

Danke Grüsse
Zuletzt geändert von Anonymous am Donnerstag 1. Juni 2017, 21:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@kowi0815: Dein kleines Programm macht gar nichts, weil das nicht einmal am Compiler vorbei kommt. Und ich wüsse an einigen Stellen gar nicht wie ich die Fehler beheben sollte, weil teilweise wenig bis gar keinen Sinn macht was dort steht.

Bei GUI-Programmierung kommst Du nicht um objektorientierte Programmierung herum. Das solltest Du vorher lernen. Zusammen mit einem Umfangreichen GUI-Rahmenwerk wird das nämlich eher schwieriger als einfacher.

Bezüglich der Namensschreibweisen lohnt sich ein Blick in den Style Guide for Python Code.
kowi0815
User
Beiträge: 3
Registriert: Donnerstag 1. Juni 2017, 15:00

Hi,

Danke schonmal für deine Antwort.
Ich weiß das ich voll kein Plan vom programmieren habe aber für das bissen was ich machen möchte reicht es. (für mich)
Kannst mir glauben das es funktioniert. Nur jetzt vielleicht nicht, weil ich das alles ein wenig zusammengekürzt habe und das auch noch recht beschissen mit nem Pad ohne Tastatur.

Das einzige was ich wissen möchte ist wie

BildAnzeigen() :

Immer wieder geladen wird obwohl ButtonAn nur einmal geklickt wir.
Da lässt sich h doch bestimmt was machen. ODER???

Grüße
BlackJack

@kowi0815: Warum zeigst Du den kaputten Code dann überhaupt? Man kann dazu ja nichts weiter sagen, ausser das er kaputt und ziemlich schlecht ist, und das es sich wohl auch beim vollständigen Code nicht lohnen wird da noch zusätzlich etwas rein zu frickeln. Und beim gezeigten kann man auch nicht so wirklich sagen wo Du da jetzt was einbauen müsstest. Ob man beispielsweise mit einem `QTimer` auskommt, oder auf Threadprogrammierung ausdehmen muss, damit die GUI nicht einfrieren kann, lässt sich so nicht ohne weiteres sagen.
Benutzeravatar
BigZ
User
Beiträge: 30
Registriert: Mittwoch 1. Juli 2015, 21:18
Wohnort: Hamburg
Kontaktdaten:

Du solltest dich auch nochmal ein wenig über UDP und TCP informieren. :D
Dein Url Request wird über tcp abgesetzt.
Du möchtest aber eher streamen, was man mit udp besser realisiert.
Zusammengefasst begrüßt du jedes Mal jetzt den Server über TCP, er grüßt dich zurück, du sagst du willst ein Bild vom Server, der Server gibt dir ein Bild zurück, du schaust ob du alles so bekommen hast wie der Server es los geschickt hast und wenn ja verabschiedest du dich, der Server verabschiedet sich und die Verbindung ist beendet.
Wenn du das jetzt 25 mal die Sekunde machst, wird der Server Betreiber sehr, sehr böse.
Besonders wenn es ein öffentlicher ist.
Bei UDP machst du zwar auch einen Request, aber du sagst du willst ein Video und der Server kippt es einfach in die Leitung und scheißt vollkommen drauf ob es so bei dir ankommt wie es ankommen soll, und du scheißt drauf und verarbeitest die Daten in der Geschwindigkeit weiter wie du sie kriegst.
Und das ist die Kurzfassung von UDP und TCP *Anmerkung*
Ist die Frage ob deine Cam so etwas auch überhaupt mit macht.
Aber wenn du wirklich deinen privaten Server ein bisschen an seine Belastungsgrenzen bringen willst, musst du im Grunde genommen nur eine Funktion bauen die dir immer wieder ein Bild holt und eine Funktion bauen die dir immer wieder das Bild in deinem Widget updatet.
Das solltest du dann aber auch wirklich nur bei deinem Server machen und nicht bei dem vom WDR :D
"Ist noch λ?"
"Ja, aber das ϕ ist noch ϱ"
kowi0815
User
Beiträge: 3
Registriert: Donnerstag 1. Juni 2017, 15:00

Hi,

so hier mal den ganze Code, der auch wirklich funktioniert.
Den Server von WDR nutze ich nur damit ich das hier testen kann, weil ich mansch mal nicht an meinen Server dran komme.

Und wie gesagt ich habe 0,nix Ahnung von TCP und UDP usw.
Das war halt erstmal ein Versuch, wie ich mir das gedacht habe.

Code: Alles auswählen

# -*- coding: utf-8 -*-


from tkinter import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.uic import *
import urllib.request
import urllib

app = QApplication(sys.argv)
widget = loadUi('Tu.ui')


def TonAn():
    widget.TonStatus.setText("Ton ist an!!")

def TonAus():
    widget.TonStatus.setText("Ton ist aus")

def BildAnzeigen(x):
    global zahl
    global testZahl

    if (zahl%2 == 0):
        #PfadCam = 'http://11.11.11.134/Streaming/channels/1/picture.jpg'
        PfadCam = 'http://www.wdr.de/themen/global/webcams/domcam/domcam_960_live.jpg'
        print (PfadCam)
    else:
        IpCamText = widget.LineEditCam.displayText()
        #PfadCam = 'http://' + IpCamText + '/themen/global/webcams/domcam/domcam_960_live.jpg'
        PfadCam = 'http://' + IpCamText + '/Streaming/channels/1/picture.jpg'
        print(PfadCam)


    url = PfadCam
    data = urllib.request.urlopen(url).read()
    pixmap = QPixmap()
    pixmap.loadFromData(data)
    icon = QPixmap(pixmap)
    widget.BildAnzeige.setPixmap(QPixmap(icon).scaled(600, 500))

def MumbelServerConnect():
    global zahl2

    if (zahl2 % 2 == 0):
        print('feste IP')
        #SH Script hier!
    else:
        IpMumbalText = widget.LineEditMumbel.displayText()
        PfadMumbal = IpMumbalText
        print(PfadMumbal)
        #SH script hier!

def MumbelServerDisconnect():
    print('Server verlassen')
    #SH Script hier

def BildSchwarz():
    widget.BildAnzeige.setPixmap(QPixmap('Testbild2.jpg').scaled(600, 500))

def IpCamVeraenderbar():
    global  zahl
    zahl = float(zahl) + 1

    if (zahl%2 == 0):
        widget.LineEditCam.setDisabled(True)
    else:
        widget.LineEditCam.setDisabled(False)

def IpMumbelVeraenderbar():
    global zahl2
    zahl2 = float(zahl2) + 1

    if (zahl2 % 2 == 0):
        widget.LineEditMumbel.setDisabled(True)
    else:
        widget.LineEditMumbel.setDisabled(False)

def Auf():
    #SH Script hier!
    print ('Auf')




#Button
widget.ButtonTon.clicked.connect(TonAn)
widget.ButtonTon.clicked.connect(BildAnzeigen)
widget.ButtonTon.clicked.connect(MumbelServerConnect)
widget.ButtonAuf.clicked.connect(Auf)
widget.ButtonAus.clicked.connect(TonAus)
widget.ButtonAus.clicked.connect(BildSchwarz)
widget.ButtonAus.clicked.connect(MumbelServerDisconnect)



#Setup
widget.CheckBoxCam.stateChanged.connect(IpCamVeraenderbar)
widget.CheckBoxMumbel.stateChanged.connect(IpMumbelVeraenderbar)


for Startschleife in range (0, 1):
    BildSchwarz()
    TonAus()
    zahl = 1
    zahl2 = 1
    testZahl = 0
    IpCamVeraenderbar()
    IpMumbelVeraenderbar()
    print('Erster Durchlauf beendet')



widget.show()
sys.exit(app.exec_())
[codebox=xml file=Unbenannt.xml]

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1022</width>
<height>598</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="ButtonTon">
<property name="geometry">
<rect>
<x>670</x>
<y>310</y>
<width>121</width>
<height>101</height>
</rect>
</property>
<property name="text">
<string> Ton An</string>
</property>
</widget>
<widget class="QPushButton" name="ButtonAus">
<property name="geometry">
<rect>
<x>850</x>
<y>310</y>
<width>121</width>
<height>101</height>
</rect>
</property>
<property name="text">
<string>Ton Aus</string>
</property>
</widget>
<widget class="QLabel" name="BildAnzeige">
<property name="geometry">
<rect>
<x>40</x>
<y>20</y>
<width>601</width>
<height>501</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>660</x>
<y>10</y>
<width>321</width>
<height>261</height>
</rect>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Anzeige</string>
</attribute>
<widget class="QLabel" name="TonStatus">
<property name="geometry">
<rect>
<x>90</x>
<y>20</y>
<width>111</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>Ton Status !!</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Setup</string>
</attribute>
<widget class="QLineEdit" name="LineEditCam">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>30</y>
<width>113</width>
<height>25</height>
</rect>
</property>
<property name="acceptDrops">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="LineEditMumbel">
<property name="geometry">
<rect>
<x>120</x>
<y>80</y>
<width>113</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QCheckBox" name="CheckBoxCam">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>260</x>
<y>30</y>
<width>101</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QCheckBox" name="CheckBoxMumbel">
<property name="geometry">
<rect>
<x>260</x>
<y>80</y>
<width>101</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="LabelIpCam">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>68</width>
<height>19</height>
</rect>
</property>
<property name="text">
<string>IP Cam</string>
</property>
</widget>
<widget class="QLabel" name="LabelIpMumbel">
<property name="geometry">
<rect>
<x>20</x>
<y>80</y>
<width>91</width>
<height>19</height>
</rect>
</property>
<property name="text">
<string>IP Mumbel</string>
</property>
</widget>
</widget>
</widget>
<widget class="QPushButton" name="ButtonAuf">
<property name="geometry">
<rect>
<x>671</x>
<y>430</y>
<width>301</width>
<height>101</height>
</rect>
</property>
<property name="text">
<string>Auf</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1022</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

[/code]


Zum Hintergrund.
Kamera hängt über der Eingangstür und Tür soll über ein Relais geöffnet werden.

So hoffe mal das passt so
Grüße
Antworten