Da ich auf v4l2rtspserver als rtsp-Server setze, ist währenddessen der Zugriff auf die picamera gesperrt. Abhilfe schafft hier z.B. das man auf den Stream zugreift. Dazu muss allerdings die take_snapshot-Funktion etwas erweitert werden (es sei denn ich hab da was übersehen...). Der Stream kann aber auch von einer externen IP-Kamera odg. sein.
def get_snapshot_from_stream(snapshot_path, url):
import cv2
filename = get_next_filename(snapshot_path)
cap = cv2.VideoCapture(url)
if cap.isOpened():
ret, frame = cap.read()
if ret:
cv2.imwrite(filename, frame)
cap.release()
conf.set_value(DOORPI_SECTION, 'last_snapshot', filename)
return filename
Alles anzeigen
Zu take_snapshot.py hinzufügen und get anpassen:
def get(parameters=""):
snapshot_path = conf.get_string_parsed(DOORPI_SECTION, 'snapshot_path', '/tmp')
if parameters == "":
return SnapShotAction(get_snapshot_from_picam, snapshot_path=snapshot_path)
parameter_list = parameters.split(',')
if len(parameter_list) is not 2: return None
type = parameter_list[0]
url = parameter_list[1]
if type.upper() == "STREAM":
return SnapShotAction(get_snapshot_from_stream, snapshot_path=snapshot_path, url=url)
else:
return SnapShotAction(get_snapshot_from_url, snapshot_path=snapshot_path, url=url)
Alles anzeigen
Danach ist die Funktion allerdings anders aufzurufen. (z.B.: take_snapshot:stream,rtsp://url:port/unicast ) Ihr braucht dafür OpenCV, was einem auch noch andere Funktionen (Gesichtserkennung, etc.) ermöglicht.
Vorkompilliert für Python2.7 sollte sich OpenCV mit
installieren lassen.
Sollte so funktionieren (hab's noch nicht ausführlich getestet) und hilft ja evtl. jemandem.