AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Imagestream/Videostream

Ein Thema von UnixX · begonnen am 8. Mär 2020
Antwort Antwort
UnixX

Registriert seit: 26. Jul 2003
Ort: Unknown
25 Beiträge
 
FreePascal / Lazarus
 
#1

Imagestream/Videostream

  Alt 8. Mär 2020, 19:26
Hallo,

hat einer eine Idee wie man in Pascal den folgenden Code realisieren kann???
Es ist ein mit Python geschriebener Server um Images(Videostream) das von einem anderen Rechner (RaspberryPi) gesendet wird zu verarbeiten.

Für alle Tipps und Anregungen wäre ich dankbar.

#!/usr/bin/python

import time
import threading
import random
import Queue
from PIL import Image, ImageTk
import Tkinter as tk
import socket
import struct
import io
import tkMessageBox

class GuiPart:

def __init__(self, master, queue, endCommand):
self.queue = queue
self.endCommand = endCommand

self.root=master
self.root.title('My Pictures')

imageFile = "ubuntu640x480.jpg"
self.image1 = ImageTk.PhotoImage(Image.open(imageFile))
w = 640
h = 480
x = 0
y = 0
self.root.geometry("%dx%d+%d+%d" % (w, h, x, y))

self.panel1 = tk.Label(self.root, image=self.image1)

self.panel1.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
self.panel1.configure(image=self.image1)

self.root.protocol("WM_DELETE_WINDOW", self.on_closing)

def on_closing(self):
if tkMessageBox.askokcancel("Quit", "Do you want to quit?"):
self.endCommand()
self.root.destroy()

def processIncoming(self):
"""Handle all messages currently in the queue, if any."""
while self.queue.qsize( ):
try:
self.update_image(self.queue.get(0))
except Queue.Empty:
# just on general principles, although we don't
# expect this branch to be taken in this case
pass
def update_image(self, newImage):
self.image1=newImage
self.panel1.configure(image=self.image1)

class ThreadedClient:
def __init__(self, master):
self.master = master
self.queue = Queue.Queue( )
self.gui = GuiPart(master, self.queue, self.endApplication)

# Set up the thread to do asynchronous I/O
# More threads can also be created and used, if necessary
self.running = 1
self.thread1 = threading.Thread(target=self.workerThread1)
self.thread1.start( )

# Start the periodic call in the GUI to check if the queue contains
# anything
self.periodicCall( )

def periodicCall(self):
"""
Check every 200 ms if there is something new in the queue.
"""
self.gui.processIncoming( )
if not self.running:
# This is the brutal stop of the system. You may want to do
# some cleanup before actually shutting it down.
import sys
sys.exit(1)
self.master.after(200, self.periodicCall)

def workerThread1(self):
#set up server
# Start a socket listening for connections on 0.0.0.0:8000 (0.0.0.0 means
# all interfaces)
self.server_socket = socket.socket()
self.server_socket.bind(('0.0.0.0', 8008))
self.server_socket.listen(0)

# Accept a single connection and make a file-like object out of it
self.connection = self.server_socket.accept()[0].makefile('rb')

try:
while self.running:
# Read the length of the image as a 32-bit unsigned int. If the
# length is zero, quit the loop
image_len = struct.unpack('<L', self.connection.read(struct.calcsize('<L')))[0]
if not image_len:
break
# Construct a stream to hold the image data and read the image
# data from the connection
image_stream = io.BytesIO()
image_stream.write(self.connection.read(image_len) )


image_stream.seek(0)

newPhotoImage=ImageTk.PhotoImage(Image.open(image_ stream))

#self.image.save('sbild.jpg')
self.queue.put(newPhotoImage)
finally:
self.connection.close()
self.server_socket.close()



def endApplication(self):
self.master.destroy()
self.running = 0



root = tk.Tk( )

client = ThreadedClient(root)
root.mainloop( )
Wissen ist Macht, nicht wissen macht auch nichts!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz