Код: Выделить всё
import RPi.GPIO as GPIO
import time
import cv2
import numpy as np
# GPIO-Pin für den Klingelknopf
KLINGEL_PIN = 18
# Setup GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(KLINGEL_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Initialisierung der USB-Kamera
cap = cv2.VideoCapture(0)
# Zeitdauer, wie lange das Bild nach dem Klingeln angezeigt werden soll (in Sekunden)
ANZEIGEZEIT = 10 # in dem Fall 10 Sekunden
def zeige_bild():
# Erstellen eines Vollbildfensters
cv2.namedWindow("Live-Feed", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("Live-Feed", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
# Starten des Live-Feeds
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow("Live-Feed", frame)
# Warten auf eine Taste zum Beenden (oder eine bestimmte Zeit)
key = cv2.waitKey(1)
if key == ord('q') or time.time() > endzeit: # Zum Beenden 'q' drücken oder Zeit abgelaufen
break
# Schließen des Live-Feed-Fensters
cv2.destroyAllWindows()
def zeige_leeres_bild():
# Erstellen eines Vollbildfensters
cv2.namedWindow("Schwarzbild", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("Schwarzbild", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
# Erstellen eines schwarzen Bildes
schwarzbild = np.zeros((1080, 1920, 3), dtype=np.uint8)
# Anzeigen des schwarzen Bildes
cv2.imshow("Schwarzbild", schwarzbild)
# Startzeit für die Überprüfung der Tastatureingabe
startzeit = time.time()
# Warten auf eine Taste oder das Drücken von 'q'
while True:
if cv2.waitKey(1) == ord('q')
break
# Schließen des Fensters für das schwarze Bild
cv2.destroyAllWindows()
def main():
try:
while True:
# Warten auf Klingel-Impuls
GPIO.wait_for_edge(KLINGEL_PIN, GPIO.FALLING)
print("Klingel gedrückt, Live-Feed wird gestartet...")
# Zeige das Bild für eine bestimmte Zeit
global endzeit
endzeit = time.time() + ANZEIGEZEIT
zeige_bild()
print("Live-Feed beendet.")
# Nach dem Schließen des Live-Feeds zeige ein schwarzes Bild
zeige_leeres_bild()
except KeyboardInterrupt:
pass
finally:
# Aufräumen
GPIO.cleanup()
cap.release()
if __name__ == "__main__":
main()
Код: Выделить всё
[ WARN:0@2.422] global ./modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
Traceback (most recent call last):
File "/home/raspi/Desktop/kamera-Impuls_test4.py", line 91, in
main()
File "/home/raspi/Desktop/kamera-Impuls_test4.py", line 70, in main
GPIO.wait_for_edge(KLINGEL_PIN, GPIO.FALLING)
RuntimeError: Error waiting for edge
------------------
(program exited with code: 1)
Press return to continue
Что я пробовал:
-Переустановка всего Pi
-Использование другого Pi
-Установка более старой версии RPi.GPIO
- Установка более старой версии pip
-Изменение используемого контакта GPIO
-проверка правильности root-прав/прав (они есть)
-ведение журнала (единственное, что мне показали журналы: «DEBUG: root:Warte auf Klingel-Impuls")
-Переустановите RPi.GPIO (этот шаг был странным, потому что путь, по которому должен быть установлен этот пакет, не существует. Когда я удалил его, пакет был успешно удален из пути Кажется, этого не существует, но когда я пытаюсь найти пакет сразу после того, как появляется сообщение «Требование уже удовлетворено...»
Подробнее здесь: https://stackoverflow.com/questions/784 ... g-for-edge