ich beschäftige mich schon ne weile mit python und pygame auf meinem Raspberry Pi
nun hab ich ein kleines Problem bei dem ich nicht weiter komme.
Ich habe ein inzwischen recht Großes Pygame Script das ich für meinen Touchscreen gebastelt habe.
Wetter informationen, Ip Adresse, KameraBilder und GPIOs steuere auf anderen PI's
nun zum Problem.
Ein zweites Script (ein fund aus dem Netzt nicht von mir) zeigt mir einen sehr guten mjpg Stream meiner Kameras an nun würde ich gerne dieses Script in mein Pygame integrieren anstelle der momentanen 1sekunden reloads der Kamerabilder.
nur leider weiß ich nicht wie.
Das Kamerascript:
camcv.py
Code: Alles auswählen
import numpy as np
import cv2
import time
import requests
import threading
from threading import Thread, Event, ThreadError
class Cam():
def __init__(self, url):
self.stream = requests.get(url, stream=True)
self.thread_cancelled = False
self.thread = Thread(target=self.run)
print "camera initialised"
def start(self):
self.thread.start()
print "camera stream started"
def run(self):
bytes=''
while not self.thread_cancelled:
try:
bytes+=self.stream.raw.read(1024)
a = bytes.find('\xff\xd8')
b = bytes.find('\xff\xd9')
if a!=-1 and b!=-1:
jpg = bytes[a:b+2]
bytes= bytes[b+2:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)
cv2.imshow('cam',img)
if cv2.waitKey(1) ==27:
exit(0)
except ThreadError:
self.thread_cancelled = True
def is_running(self):
return self.thread.isAlive()
def shut_down(self):
self.thread_cancelled = True
#block while waiting for thread to terminate
while self.thread.isAlive():
time.sleep(1)
return True
if __name__ == "__main__":
#url = 'http://admin:meinsm@192.168.6.10/cgi-bin/faststream.jpg'
url = 'http://192.168.6.127/cam_pic_new.php'
cam = Cam(url)
cam.start()
Dies hätt ich gerne inerhalb meines Pygame surface nur leider weiß ich nicht wie ich das am Besten mache.
ImGui-Script hab ich das obere wie folgt eingebunden.
Code: Alles auswählen
...
from camcv import *
...
...
url = 'http://192.168.6.127/cam_pic_new.php'
cam = Cam(url)
camimag = pygame.image.load(cam)
DISPLAYSURF.blit(camimag,(0,0))
Für eure hilfe wäre ich sehr dankbar.
Zusätzlich würde ich gerne den URL beim Aufruf übergeben, um alle 4 cameras damit abzufragen natürlich imme rnur eine zur selben zeit.
Solltet ihr noch was brauchen kann ich das gerne Liefern.
Grüße Nsession