- De DVR voorbereiden voor RTSP-streaming
- Je Raspberry Pi voorbereiden
- OpenCV en andere bibliotheken installeren op Raspberry Pi
- Raspberry Pi programmeren voor het streamen van RTSP-video vanaf CCTV
- De Raspberry Pi CCTV-viewer testen
In de meeste werk- en bedrijfsgebouwen is tegenwoordig een CCTV-bewakingssysteem geïnstalleerd om de activiteiten te bewaken. Maar vaak is het moeilijk voor de betrokken autoriteit of beveiligingspersoneel om de live feed van alle camera's continu te volgen om te zoeken naar verdachte activiteiten. Nu computervisie en machine learning in een snelle fase vorderen, wordt het tijd dat we onze CCTV-systemen slimmer maken. In dit artikel zullen we bespreken hoe u de videofeed van een bestaande DVR (zoals Hikvision DVR) kunt krijgen via RTSP-streaming met Raspberry pi met Python en OpenCV. Zodra we dit hebben, kunnen we de kracht van OpenCV op deze videofeeds gebruiken om een bepaald object te detecteren, de kentekenplaat van het voertuig te lezen, gezichtsherkenning en wat niet!
Omwille van deze tutorial zal ik een Hikvision 4-kanaals CCTV DVR gebruiken die al in het gebouw is geïnstalleerd. We zullen alle 4 cameraschermen naar de Raspberry streamen en deze weergeven op een 5-inch touchscreen waar de gebruiker naar wens kan schakelen tussen elk kanaal. Ik weet dit niet veel, gezien de kracht van OpenCV en ik heb plannen om het op te schalen met bewegingsdetectie, bugler-video-alert, persoon-tracking, enz. Maar laten we dat allemaal overlaten voor een andere tutorial.
De DVR voorbereiden voor RTSP-streaming
Voordat we in de Raspberry Pi-hardware en Python-code duiken, is het belangrijk om te controleren of de DVR RTSP ondersteunt en hoe je er toegang toe hebt. Ik heb het grootste deel van mijn tijd hier doorgebracht omdat de procedure lijkt te verschillen voor elk type DVR en je moet doen en veel hits en proberen. Maar als je er eenmaal achter bent, werkt het elke keer weer als een charme.
Zorg er allereerst voor dat u de gebruikersnaam en het wachtwoord van uw DVR-systeem kent en dat het is verbonden met internet. Ook in deze tutorial zal ik de RTSP alleen streamen vanaf een lokaal netwerk, als je een statisch IP-adres hebt, kun je port forwarding doen en hetzelfde volgen voor andere netwerken. Maar wat deze tutorial betreft, we zullen alles binnen het lokale netwerk doen.
Stap 1: Zoek het IP-adres van uw DVR. Zodra de DVR is verbonden met internet, krijgt deze een eigen IP-adres toegewezen. U kunt dit IP-adres vinden op de configuratiepagina van uw router of op uw DVR-scherm zelf (ervan uitgaande dat er een monitor is aangesloten op de DVR). Het IP-adres van mijn router was http://192.168.11.110/ (gewijzigd om veiligheidsredenen)
Stap 2: Open een webbrowser naar keuze, voer het IP-adres in en druk op enter. U wordt naar de aanmeldingspagina van de DVR geleid. Waar u de gebruikersnaam (de mijne is gewijzigd) en het wachtwoord voor uw DVR moet invoeren. De standaard gebruikersnaam is admin, maar het wachtwoord moet u weten. Mijn inlogscherm voor DVR wordt hieronder weergegeven, uw uiterlijk kan er anders uitzien.
Stap 3: Zoek na een succesvolle aanmelding het RTSP-poortnummer op uw DVR. Meestal is de standaardwaarde 554, maar deze kan veranderen. Terwijl je hier bent, speel met de configuratie-instellingen om te controleren of er een optie is om RTSP in te schakelen, zo niet, dan kun je het overslaan. U moet hier wat tijd doorbrengen, omdat de procedure anders is op basis van de DVR.
Stap 4: Bereid uw RTSP-link voor, de standaard RTSP-link heeft het volgende formaat:
rtsp: //
Nogmaals, het hangt af van het type DVR, u kunt Google gebruiken om degene te vinden die voor u werkt. Degene die werkte, had het onderstaande formaat, je kunt het ook proberen met dit-
rtsp: //
Waar
rtsp: // admin: [email protected]: 554 / Streaming / Channels / 202 /
Stap 5: Speel de stream af op VLC om te controleren of uw RTSP-verbinding werkt. Installeer VLC op een computer die is verbonden met hetzelfde netwerk als de DVR, start het en druk op Ctrl + N voor netwerkstreaming. Voer de URL in zoals hieronder weergegeven en druk op OK.
Als de RTSP-link naar behoren werkt, zou u een livestream van uw CCTV op de VLC-speler moeten zien, zoals hieronder weergegeven. Als het een fout oplevert, moet je de juiste link vinden.
Nu dit klaar is, hoeven we niet langer over onze DVR te praten, laten we doorgaan met onze Raspberry pi.
Je Raspberry Pi voorbereiden
Vervolgens moeten we onze Raspberry Pi instellen met het 5-inch scherm. Ik ga daar niet op in, aangezien we dat al zo vaak hebben besproken. U kunt de volgende artikelen lezen als richtlijn:
- Aan de slag met Raspberry Pi
- Koppeling van 5-inch display met Raspberry Pi
We gebruiken een Raspberry Pi 3 B + met Debian Buster OS erin. Het is misschien ook een goed idee om Pi 4 te gebruiken als je kunt en ook wat koelopties toe te voegen, zoals een koellichaam of een ventilator, omdat ik merkte dat de temperatuur bijna 70 ° C bereikte. Ik heb vanaf nu geen enkele afkoelprocedure gevolgd en mijn opstelling ziet er als volgt uit:
OpenCV en andere bibliotheken installeren op Raspberry Pi
De volgende stap is om OpenCV op Raspberry Pi te installeren. We hebben eerder besproken hoe OpenCV op Raspberry pi kan worden gecompileerd.
- OpenCV installeren op Raspberry Pi
- Aan de slag met OpenCV
U kunt de bovenstaande link volgen en OpenCV compileren met Cmake of het gewoon installeren met een apt-get-methode. Ik zou het laatste aanraden als je niet van erg serieus OpenCV-programmeren houdt. Ik heb de volgende opdrachten gebruikt om OpenCV te installeren.
sudo apt update sudo apt python3-opencv installeren
In ons programma zullen we ook gebruik maken van de "cvui" -bibliotheek om een basisinterface te maken met twee knoppen waarmee we tussen de vier schermen kunnen navigeren. Volg de onderstaande opdracht om cvui te installeren.
Python3 pip installeert cvui
Als beide pakketten zijn geïnstalleerd, kunnen we het hoofdprogramma openen. Zorg ervoor dat beide geïnstalleerde pakketten werken en probeer ze te importeren vanaf de opdrachtterminal van Pi.
Raspberry Pi programmeren voor het streamen van RTSP-video vanaf CCTV
Het volledige programma voor dit project vindt u aan het einde van deze pagina. De uitleg hiervan is als volgt. We beginnen het programma door de vereiste headerbestanden op te nemen.
import cv2 import cvui
Het volgende deel van het programma vereist enige bewerking. U moet de gebruikersnaam en het wachtwoord van uw DVR invoeren. Voor een 5-inch scherm zijn de breedte en hoogte respectievelijk 800 en 480, dus we hebben hetzelfde ingevoerd.
rtsp_username = "admin" rtsp_password = "aswinth347653" breedte = 800 hoogte = 480 cam_no = 1
Verderop hebben we een functie genaamd een camera maken die wordt gebruikt elke keer dat we het cameranummer wijzigen dat moet worden bekeken.
def create_camera (kanaal): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100: 554 / Streaming / kanalen /" + kanaal + "02" cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # ID-nummer voor breedte is 3 cap. set (4, 480) # ID-nummer voor hoogte is 480 cap. set (10, 100) # ID-nummer voor helderheid is 10qq retour cap
In de hoofd while-lus hebben we ons programma om een frame van het opnameapparaat te lezen en om te zetten naar volledig scherm. Het weergavevenster in ons programma wordt een scherm genoemd.
success, current_cam = cam.read () dim = (breedte, hoogte) Full_frame = cv2.resize (current_cam, dim, interpolation = cv2.INTER_AREA) cv2.namedWindow ('scherm', cv2.WINDOW_NORMAL) cv2.setWindowProperty ('scherm ', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
Daarna hebben we de code voor twee knoppen die op het scherm worden geplaatst. Het commando cvui.button wordt gebruikt om de knop op een gewenste plaats te plaatsen en het commando cvui.mouse wordt gebruikt om de muisklik te detecteren. We hebben twee if- instructies voor twee knoppen: als op de knop wordt geklikt, wordt de respectieve if- instructie uitgevoerd.
if (cvui.button (Volledig_frame, breedte - 100, hoogte - 40, "Volgende") en cvui.mouse (cvui.CLICK)): print ("Volgende knop ingedrukt") cvui.init ('scherm') cam_no = cam_no +1 if (cam_no> 4): cam_no = 1 del cam cam = create_camera (str (cam_no)) if (cvui.button (Volledig_frame, breedte - 200, hoogte - 40, "Vorige") en cvui.mouse (cvui. KLIK)): print ("Vorige knop ingedrukt") cvui.init ('scherm') cam_no = cam_no - 1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
Binnen de if- instructie, op basis van de knop, verhogen of verlagen we het aantal cam_no en verwijderen we vervolgens de bestaande cam en maken we een nieuwe cam met de functie die we hierboven hebben besproken. Merk ook op dat cvui.init elke keer moet bellen om het UI-scherm te vernieuwen.
Het laatste deel van de code is om het frame weer te geven als uitvoer en om het uitvoerscherm te verlaten wanneer q wordt ingedrukt. We wachten gewoon op een toetsaanslag en als de sleutel 'q' is, zullen we alle vensters vernietigen.
cv2.imshow ('scherm', Full_frame) if cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () break
De Raspberry Pi CCTV-viewer testen
Het testen van de code is vrij eenvoudig, start de pi op en start de python-code die onderaan deze pagina wordt gegeven. Zorg ervoor dat u de juiste inloggegevens heeft ingevoerd om de RTSP-link te laten werken. Als je aan de veilige kant wilt zijn, kun je ook proberen de VLC-speler op Pi te gebruiken, die vooraf is geïnstalleerd op buster OS.
Als het werkt op VLC, kunnen we er zeker van zijn dat onze pi is verbonden met hetzelfde netwerk en dat de RTSP-link werkt zoals het hoort. Open vervolgens het programma onder aan deze pagina en start het met een python-IDE. Als de inloggegevens correct zijn ingevoerd, krijgt u het volgende scherm te zien. Die toont de live camerafeed met twee knoppen onderaan.
Aangezien het scherm een TFT-aanraakscherm heeft, kunt u eenvoudig de knoppen "vorige" en "volgende" aanraken om naar de volgende camera te gaan. Het programma is geschreven om te lussen tussen de eerste vier camera's, u kunt het gemakkelijk wijzigen als er meer dan 4 camera's op uw DVR zijn aangesloten.
De volledige werking van dit project is te vinden in de onderstaande video. Ik hoop dat je genoten hebt van de tutorial en iets nuttigs hebt geleerd als je vragen hebt, laat ze achter in de commentaarsectie of je kunt ook onze forums gebruiken om je andere katernen te posten. Ik ben ook van plan om bewegingsdetectie en videobesparingsfunctie toe te voegen aan deze opstelling, dus houd daar ook rekening mee.