- Przygotowanie rejestratora do przesyłania strumieniowego RTSP
- Przygotowanie twojego Raspberry Pi
- Instalowanie OpenCV i innych bibliotek na Raspberry Pi
- Programowanie Raspberry Pi do przesyłania strumieniowego wideo RTSP z CCTV
- Testowanie przeglądarki CCTV Raspberry Pi
Obecnie większość miejsc pracy i budynków komercyjnych jest wyposażona w system monitoringu CCTV do monitorowania działań. Często jednak zainteresowanym władzom lub pracownikom ochrony trudno jest stale monitorować obraz na żywo ze wszystkich kamer w celu wykrycia podejrzanej aktywności. Ponieważ wizja komputerowa i uczenie maszynowe postępują w szybkim tempie, nadszedł czas, aby uczynić nasze systemy CCTV inteligentniejszymi. W tym artykule omówimy, jak uzyskać sygnał wideo z istniejącego rejestratora DVR (takiego jak rejestrator Hikvision) za pośrednictwem przesyłania strumieniowego RTSP z Raspberry pi przy użyciu Pythona i OpenCV. Gdy już to uzyskamy, będziemy mogli wykorzystać moc OpenCV na tych kanałach wideo, aby wykryć określony obiekt, odczytać tablicę rejestracyjną pojazdu, rozpoznawanie twarzy i co nie!
Na potrzeby tego samouczka będę korzystał z 4-kanałowego rejestratora CCTV firmy Hikvision, który jest już zainstalowany w budynku. Będziemy przesyłać strumieniowo wszystkie 4 ekrany kamer do Raspberry i wyświetlać je na 5-calowym ekranie dotykowym, na którym użytkownik będzie mógł przełączać się między każdym kanałem w razie potrzeby. Wiem o tym niewiele, biorąc pod uwagę moc OpenCV i mam plany, aby skalować go z wykrywaniem ruchu, ostrzeżeniem wideo buglera, śledzeniem osób itp., Ale zostawmy to wszystko na inny samouczek.
Przygotowanie rejestratora do przesyłania strumieniowego RTSP
Zanim zagłębimy się w sprzęt raspberry pi i kod Pythona, ważne jest, aby sprawdzić, czy rejestrator obsługuje RTSP i jak uzyskać do niego dostęp. Spędziłem tutaj większość czasu, ponieważ procedura wydaje się być inna dla każdego typu DVR i musisz zrobić i wiele trafień i spróbować. Ale kiedy już to zrozumiesz, za każdym razem działa to jak urok.
Po pierwsze, upewnij się, że znasz nazwę użytkownika i hasło swojego systemu DVR i jest on podłączony do Internetu. Również w tym samouczku będę przesyłać strumieniowo RTSP tylko z sieci lokalnej, jeśli masz statyczny adres IP, możesz przekierować port i postępować zgodnie z tym samym dla innych sieci. Ale jeśli chodzi o ten samouczek, będziemy robić wszystko w sieci lokalnej.
Krok 1: Znajdź adres IP swojego rejestratora. Po podłączeniu rejestratora do Internetu zostanie mu przypisany własny adres IP. Możesz znaleźć ten adres IP na stronie konfiguracji routera lub na samym ekranie DVR (zakładając, że masz monitor podłączony do DVR). Adres IP mojego routera to http://192.168.11.110/ (zmieniony ze względów bezpieczeństwa)
Krok 2: Otwórz dowolną przeglądarkę internetową, wprowadź adres IP i naciśnij Enter. Zostaniesz przeniesiony do strony logowania DVR. Gdzie musisz wpisać nazwę użytkownika (moja została zmieniona) i hasło do Twojego DVR. Domyślna nazwa użytkownika to admin, ale hasło, które musisz znać. Mój ekran logowania do DVR jest pokazany poniżej, twój wygląd może się różnić.
Krok 3: Po pomyślnym zalogowaniu poszukaj numeru portu RTSP na swoim DVR. W większości przypadków domyślna wartość to 554, ale może się zmienić. Kiedy tu jesteś, baw się ustawieniami konfiguracyjnymi, aby sprawdzić, czy jest opcja włączenia RTSP, jeśli nie, możesz ją pominąć. Trzeba tu poświęcić trochę czasu, gdyż procedura różni się w zależności od DVR.
Krok 4: Przygotuj łącze RTSP, podstawowe łącze RTSP będzie w następującym formacie:
rtsp: //
Ponownie, zależy to od rodzaju rejestratora DVR, możesz użyć Google, aby znaleźć taki, który będzie dla Ciebie odpowiedni. Ten, który działał, miał poniższy format, możesz również spróbować z tym-
rtsp: //
Gdzie
rtsp: // admin: [email protected]: 554 / Streaming / Channels / 202 /
Krok 5: Odtwórz strumień na VLC, aby upewnić się, że połączenie RTSP działa. Zainstaluj VLC na komputerze podłączonym do tej samej sieci co DVR, uruchom go i naciśnij Ctrl + N, aby strumieniować w sieci. Wprowadź adres URL, jak pokazano poniżej, i naciśnij OK.
Jeśli łącze RTSP działa tak, jak powinno, na odtwarzaczu VLC powinien pojawić się strumień na żywo z telewizji przemysłowej, jak pokazano poniżej. Jeśli generuje błąd, musisz znaleźć poprawny link.
Po wykonaniu tej czynności nie musimy już rozmawiać o naszym DVR, przejdźmy do naszego Raspberry pi.
Przygotowanie twojego Raspberry Pi
Następnie musimy skonfigurować nasze raspberry pi z 5-calowym wyświetlaczem. Nie zamierzam wchodzić w szczegóły tego zagadnienia, ponieważ omówiliśmy to już wiele razy. Możesz przeczytać następujące artykuły, aby uzyskać wskazówki:
- Pierwsze kroki z Raspberry Pi
- Łączący 5-calowy wyświetlacz z Raspberry Pi
Używamy Raspberry Pi 3 B + z uruchomionym systemem Debian Buster OS. Dobrym pomysłem może być również użycie Pi 4, jeśli możesz, a także dodanie kilku opcji chłodzenia, takich jak radiator lub wentylator, ponieważ zauważyłem, że temperatura dochodzi do prawie 70 * C. Na razie nie stosowałem żadnej procedury chłodzenia, a moja konfiguracja wygląda następująco:
Instalowanie OpenCV i innych bibliotek na Raspberry Pi
Następnym krokiem jest instalacja OpenCV na Raspberry Pi. Wcześniej omawialiśmy, jak skompilować OpenCV na Raspberry pi.
- Instalowanie OpenCV na Raspberry Pi
- Pierwsze kroki z OpenCV
Możesz skorzystać z powyższego linku i skompilować OpenCV przy użyciu Cmake lub po prostu zainstalować go metodą apt-get. Poleciłbym później, jeśli nie jesteś zbyt poważnym programowaniem OpenCV. Użyłem następujących poleceń, aby zainstalować OpenCV.
sudo apt update sudo apt install python3-opencv
W naszym programie wykorzystamy również bibliotekę „cvui” do stworzenia podstawowego interfejsu użytkownika z dwoma przyciskami, które umożliwią nam nawigację między czterema ekranami. Aby zainstalować cvui, wykonaj poniższe polecenie.
Python3 pip install cvui
Po zainstalowaniu obu pakietów możemy wejść do programu głównego. Upewnij się, że oba zainstalowane pakiety działają, kup próbując zaimportować je z terminala poleceń Pi.
Programowanie Raspberry Pi do przesyłania strumieniowego wideo RTSP z CCTV
Pełny program tego projektu można znaleźć na końcu tej strony. Wyjaśnienie tego samego jest następujące. Rozpoczynamy program od dołączenia wymaganych plików nagłówkowych.
import cv2 import cvui
Kolejna część programu wymaga edycji. Musisz podać nazwę użytkownika i hasło do swojego DVR. W przypadku wyświetlacza 5-calowego szerokość i wysokość to odpowiednio 800 i 480, więc wprowadziliśmy to samo.
rtsp_username = "admin" rtsp_password = "aswinth347653" szerokość = 800 wysokość = 480 cam_no = 1
Idąc dalej, mamy funkcję o nazwie tworzenie kamery, która będzie używana za każdym razem, gdy zmienimy numer kamery, która ma być oglądana.
def create_camera (kanał): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100: 554 / Streaming / Channels /" + channel + "02" cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # Numer identyfikacyjny dla szerokości to 3 cap.set (4, 480) # Numer identyfikacyjny dla wysokości to 480 cap.set (10, 100) # Numer identyfikacyjny dla jasności to 10qq powrót czapka
Wewnątrz głównej pętli while mamy nasz program do odczytywania klatki z urządzenia przechwytującego i konwertowania jej na pełny ekran. Okno wyświetlania w naszym programie będzie nazywane ekranem.
sukces, current_cam = cam.read () dim = (width, height) Full_frame = cv2.resize (current_cam, dim, interpolation = cv2.INTER_AREA) cv2.namedWindow ('screen', cv2.WINDOW_NORMAL) cv2.setWindowProperty ('screen ', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
Następnie mamy kod dla dwóch przycisków, które zostaną umieszczone na ekranie. Polecenie cvui.button służy do umieszczenia przycisku w wymaganym miejscu, a polecenie cvui.mouse służy do wykrywania kliknięcia myszą. Mamy dwie instrukcje if dla dwóch przycisków, jeśli przycisk zostanie kliknięty, odpowiednia instrukcja if zostanie wykonana.
if (cvui.button (Full_frame, width - 100, height - 40, "Next") and cvui.mouse (cvui.CLICK)): print ("Next Button Pressed") cvui.init ('screen') cam_no = cam_no +1 if (cam_no> 4): cam_no = 1 del cam cam = create_camera (str (cam_no)) if (cvui.button (Full_frame, width - 200, height - 40, "Previous") i cvui.mouse (cvui. KLIKNIJ)): print ("Wciśnięty przycisk poprzedni") cvui.init ('screen') cam_no = cam_no - 1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
Wewnątrz instrukcji if na podstawie przycisku zwiększamy lub zmniejszamy liczbę cam_no, a następnie usuwamy istniejącą krzywkę i tworzymy nową krzywkę za pomocą funkcji, którą omówiliśmy powyżej. Należy również pamiętać, że cvui.init musi dzwonić za każdym razem, aby odświeżyć ekran interfejsu użytkownika.
Ostatnią częścią kodu jest wyświetlenie ramki jako wyjścia i wyjście z ekranu wyjściowego po naciśnięciu q. Po prostu czekamy na naciśnięcie klawisza i jeśli klawisz to „q”, zniszczymy wszystkie okna.
cv2.imshow ('screen', Full_frame) if cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () break
Testowanie przeglądarki CCTV Raspberry Pi
Testowanie kodu jest całkiem proste, włącz pi i uruchom kod Pythona podany na dole tej strony. Upewnij się, że wprowadziłeś odpowiednie poświadczenia, aby łącze RTSP działało. Jeśli chcesz być po bezpiecznej stronie, możesz również spróbować użyć odtwarzacza VLC na Pi, który jest fabrycznie zainstalowany w buster OS.
Jeśli działa na VLC, możemy być pewni, że nasze pi podłączone do tej samej sieci, a łącze RTSP działa tak, jak powinno. Następnie otwórz program podany na dole tej strony i uruchom go za pomocą dowolnego Python IDE. Jeśli poświadczenia zostały wprowadzone poprawnie, zostanie wyświetlony następujący ekran. Który pokazuje obraz z kamery na żywo z dwoma przyciskami u dołu.
Ponieważ ekran jest wyposażony w ekran dotykowy TFT, wystarczy dotknąć przycisków „poprzedni” i „następny”, aby przejść do następnej kamery. Program jest napisany tak, aby zapętlał pierwsze cztery kamery, możesz go łatwo zmodyfikować, jeśli do rejestratora są podłączone więcej niż 4 kamery.
Pełne działanie tego projektu można znaleźć w poniższym filmie wideo. Mam nadzieję, że spodobał Ci się samouczek i nauczyłeś się czegoś przydatnego, jeśli masz jakieś pytania, zostaw je w sekcji komentarzy lub możesz również skorzystać z naszych forów, aby opublikować inne pytania. Planuję również dodać funkcję wykrywania ruchu i zapisywania wideo do tej konfiguracji, więc bądź na to również przygotowany.