- Förbereder DVR för RTSP-streaming
- Förbereder din Raspberry Pi
- Installera OpenCV och andra bibliotek på Raspberry Pi
- Programmering av Raspberry Pi för streaming av RTSP-video från CCTV
- Testar Raspberry Pi CCTV Viewer
De flesta arbetsplatser och kommersiella byggnader har idag ett CCTV-övervakningssystem installerat för att övervaka aktiviteterna. Men ofta är det svårt för berörda myndigheter eller säkerhetsannonser att kontinuerligt övervaka livekoden för alla kameror för att leta efter misstänkt aktivitet. Med datorsyn och maskininlärning framåt i en snabb fas är det dags att göra våra CCTV-system smartare. I den här artikeln kommer vi att diskutera hur man hämtar videoflöden från en befintlig DVR (som Hikvision DVR) genom RTSP-streaming med Raspberry pi med Python och OpenCV. När vi väl har fått det här kommer vi att kunna utnyttja kraften i OpenCV på dessa videoflöden för att upptäcka för ett visst objekt, läsa fordonets skylt, ansiktsigenkänning och vad inte!
För denna handledning kommer jag att använda en Hikvision 4-kanals CCTV DVR som redan är installerad i byggnaden. Vi kommer att strömma alla de fyra kameraskärmarna till Raspberry och visa den på en 5-tums pekskärm där användaren kan växla mellan varje kanal efter behov. Jag vet inte så mycket, med tanke på kraften i OpenCV och jag har planer på att skala upp det med rörelsedetektering, buglervideovarning, personspårning etc. men låt oss lämna allt det för en annan handledning.
Förbereder DVR för RTSP-streaming
Innan vi dyker in i hallon-pi-hårdvaran och pythonkoden är det viktigt att kontrollera om DVR stöder RTSP och hur du får åtkomst till den. Jag tillbringade större delen av min tid fast här eftersom proceduren verkar skilja sig åt för varje typ av DVR och du måste göra och många träffar och försök. Men när du förstår det här fungerar det som en charm varje gång.
Först och främst, se till att du känner till användarnamnet och lösenordet för ditt DVR-system och att det är anslutet till internet. Även i denna handledning kommer jag bara att strömma RTSP från ett lokalt nätverk, om du har en statisk IP kan du vidarebefordra port och följa detsamma för andra nätverk. Men när det gäller denna handledning kommer vi att göra allt i det lokala nätverket.
Steg 1: Hitta IP-adressen till din DVR. När DVR-enheten är ansluten till Internet tilldelas den sin egen IP-adress. Du hittar den här IP-adressen antingen från din routerkonfigurationssida eller från din DVR-skärm (förutsatt att du har en bildskärm ansluten till DVR). IP-adressen till min router var http://192.168.11.110/ (ändrad av säkerhetsskäl)
Steg 2: Öppna valfri webbläsare och ange IP-adressen och tryck på enter. Du kommer till DVR-inloggningssidan. Där du måste ange användarnamnet (mitt ändras) och lösenord för din DVR. Standardanvändarnamnet är admin, men lösenordet måste du veta. Min inloggningsskärm för DVR visas nedan, du kan se annorlunda ut.
Steg 3: Efter en lyckad inloggning, leta efter RTSP-portnumret på din DVR, oftast är standardvärdet 554 men det kan ändras. Medan du är här spelar du med konfigurationsinställningarna för att kontrollera om det finns ett alternativ för att aktivera RTSP, om inte kan du hoppa över det. Du måste spendera lite tid här eftersom proceduren är annorlunda baserat på DVR.
Steg 4: Förbered din RTSP-länk, den grundläggande RTSP-länken kommer att ha följande format-
rtsp: //
Återigen beror det på typen av DVR, du kan använda google för att hitta den som fungerar för dig. Den som arbetade för hade formatet nedan, du kan också prova med detta-
rtsp: //
Var
rtsp: // admin: [email protected]: 554 / Streaming / Channels / 202 /
Steg 5: Spela strömmen på VLC för att se till att din RTSP-anslutning fungerar. Installera VLC på en dator som är ansluten till samma nätverk som DVR, starta den och tryck på Ctrl + N för nätverksströmning. Ange webbadressen enligt nedan och tryck okej.
Om RTSP-länken fungerar som den ska bör du se en livestream av din CCTV på VLC-spelaren som visas nedan. Om det ger ett fel måste du ta reda på rätt länk.
Med detta gjort behöver vi inte längre prata om att vår DVR kan fortsätta med vår Raspberry pi.
Förbereder din Raspberry Pi
Därefter måste vi ställa in vår hallon-pi med 5-tums skärm. Jag kommer inte att gå in i detaljerna om det eftersom vi redan har täckt så många gånger. Du kan läsa följande artiklar för vägledning-
- Komma igång med Raspberry Pi
- Gränssnitt 5-tums skärm med Raspberry Pi
Vi använder en Raspberry Pi 3 B + med Debian Buster OS som körs i den. Det kan också vara en bra idé att använda Pi 4 om du kan och även lägga till några kylalternativ som en kylfläns eller fläkt eftersom jag märkte att temperaturen nådde nästan 70 * C. Jag har inte följt någon kylningsprocedur just nu och min inställning ser ut så här-
Installera OpenCV och andra bibliotek på Raspberry Pi
Nästa steg är att installera OpenCV på Raspberry Pi. Vi har tidigare diskuterat hur man kompilerar OpenCV på Raspberry pi.
- Installerar OpenCV på Raspberry Pi
- Komma igång med OpenCV
Du kan antingen följa länken ovan och kompilera OpenCV med Cmake eller bara installera den med en apt-get-metod. Jag skulle rekommendera det senare om du inte gillar mycket allvarlig OpenCV-programmering. Jag använde följande kommandon för att installera OpenCV.
sudo apt uppdatering sudo apt installera python3-opencv
I vårt program kommer vi också att använda biblioteket "cvui" för att skapa ett grundläggande användargränssnitt med två knappar som gör att vi kan navigera mellan de fyra skärmarna. Följ kommandot nedan för att installera cvui.
Python3 pip installera cvui
Med båda paketen installerade kan vi komma in i huvudprogrammet. Se till att båda de installerade paketen fungerar och försöker importera dem från Pi-kommandoterminalen.
Programmering av Raspberry Pi för streaming av RTSP-video från CCTV
Det fullständiga programmet för detta projekt finns i slutet av denna sida. Förklaringen av detsamma är som följer. Vi börjar programmet med att inkludera de nödvändiga rubrikfilerna.
importera cv2 importera cvui
Nästa del av programmet kräver lite redigering. Du måste ange användarnamnet och lösenordet för din DVR. För en 5-tums skärm är bredden och höjden 800 respektive 480, så vi har angett samma.
rtsp_username = "admin" rtsp_password = "aswinth347653" width = 800 höjd = 480 cam_no = 1
När vi går vidare har vi en funktion som heter skapa en kamera som kommer att användas varje gång vi ändrar det kameranummer som måste ses.
def create_camera (kanal): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100: 554 / Streaming / kanaler /" + kanal + "02" cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # ID-nummer för bredd är 3 cap.set (4, 480) # ID-nummer för höjd är 480 cap.set (10, 100) # ID-nummer för ljusstyrka är 10qq returlock
Inuti huvudslingan har vi vårt program för att läsa en ram från fångsenheten och konvertera den till helskärm. Visningsfönstret i vårt program kommer att kallas som en skärm.
success, 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)
Följt av det har vi koden för två knappar som kommer att placeras på skärmen. Kommandot cvui.button används för att placera knappen på önskad plats och kommandot cvui.mouse används för att upptäcka musklicket. Vi har två if- uttalanden för två knappar om du klickar på knappen, respektive if- uttalande kommer att köras.
if (cvui.button (Full_frame, bredd - 100, höjd - 40, "Nästa") och cvui.mouse (cvui.CLICK)): skriv ut ("Nästa knapp tryckt") cvui.init ('skärm') 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, bredd - 200, höjd - 40, "Föregående") och cvui.mouse (cvui. KLICKA)): skriv ut ("Föregående knapp tryckt") cvui.init ('skärm') cam_no = cam_no - 1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
Inuti if- uttalandet, baserat på knappen, ökar eller minskar vi antingen cam_no- antalet och tar sedan bort den befintliga kameran och skapar en ny kamera med den funktion som vi diskuterade ovan. Observera också att cvui.init måste ringa varje gång för att uppdatera UI-skärmen.
Den sista delen av koden är att visa ramen som utdata och för att gå ut från utskärmen när q trycks in. Vi väntar bara på en tangenttryckning och om nyckeln är 'q' förstör vi alla fönster.
cv2.imshow ('screen', Full_frame) om cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () bryta
Testar Raspberry Pi CCTV Viewer
Att testa koden är ganska rakt framåt, slå på pi och starta pythonkoden som ges längst ner på den här sidan. Se till att du har angett rätt referenser för att RTSP-länken ska fungera. Om du vill vara på den säkra sidan kan du också prova att använda VLC-spelaren på Pi som är förinstallerad på buster OS.
Om det fungerar på VLC kan vi vara säkra på att vår pi är ansluten till samma nätverk och RTSP-länken fungerar som den ska. Öppna sedan programmet som ges längst ner på denna sida och starta det med valfri python IDE. Om autentiseringsuppgifterna är korrekta visas följande skärm. Vilket visar livekameraflödet med två knappar i botten.
Eftersom skärmen har en TFT-pekskärm kan du helt enkelt peka på "föregående" och "nästa" för att gå till nästa kamera. Programmet är skrivet för att slinga mellan de första fyra kamerorna, du kan enkelt ändra det om det är mer än fyra kameror anslutna till din DVR.
Det fullständiga arbetet med detta projekt finns i videon som länkas nedan. Hoppas att du gillade handboken och lärde dig något användbart om du har några frågor, lämna dem i kommentarsektionen eller så kan du också använda våra forum för att skicka dina andra frågor. Jag planerar också att lägga till rörelsedetektering och videobesparingsfunktion till den här inställningen, så håll dig uppdaterad också.