Video sorveglianza home made

articolo aggiornato con gli sviluppi di motioneye

vedi : video sorveglianza home made 2

Dopo che mi hanno regalato una webcam di poco valore, una D-link DCS-930LB1 ( Wired 10/100 Fast Ethernet or a wireless 802.11g/n wireless network)ho deciso di provarla per dei piccoli test di video sorveglianza, in aiuto è subito venuto il NAS per lo storage delle immagini/video generati dal rilevamento di movimento, successivamente è entrato in scena il raspberryPI B+ per diversi motivi legati alla riservatezza, la connessione WLAN locale non ha una gran velocità e limita le prove (802.11g Compliance Speed Up to 54 Mbps).

Per prima cosa si collega la webcam alla rete con cavo (eth) per configurarla, collegandosi alla webcam attraverso una pagina web da browser, una volta configurato il wifi integrato si potrà piazzare per la casa in modo libero perché basta solo una presa della corrente.

Dopo averla sistemata a dovere e resa operativa, dall’interfaccia web si possono configurare molte cose ed in pratica è già pronta per l’uso, durante i primi test ho generato sul NAS un’utente dedicato con uno spazio ben definito di circa 100 MB per non farmi sfuggire il controllo di registrazioni impazzite e ho impostato il salvataggio dei file attraverso FTP in locale, il flusso video in streaming è buono considerando che non si può ottenere un FPS alto dall’oggetto in questione, qualche difetto sulla qualità dei video è normale, ma tutto sommato non è male.

Da qui abbiamo accesso alle principali configurazioni sulle dimensioni e qualità delle immagini o ottimizzare la rilevazione di movimento con sensibilità e una maschera editabile, possiamo anche aggiornare il firmware, in pratica da qualsiasi apparecchio in LAN è possibile sia visualizzare che controllare la camera.

Per viasualizzare i file salvati basta accedere al NAS in rete.

Per un accesso dall’esterno ho preferito usare un tunnel SSH proxyficando il browser per l’acceso alla web page, mentre per visualizzare immagini e video salvati si proxyfica samba su android, winscp su win e sshfs e fuse su linux.

Per non accontentarsi abbiamo eseguito i test con mydlink / motion / motioneye.

mydlink

Registrandosi al sito mydlink dopo aver generato un proprio account è possibile vedere e gestire la webcam anche da distanza con l’app per android : android mydlink.

Dall’app è possibile visualizzare in diretta il flusso video, è omogeneo e tra tutti i test effettuati quello migliore e con fps più alto, si possono attivare alcuni controlli come l’avvio del rilevamento di movimento (configurato in precedenza su web page), ma non è possibile visionare il file generati e salvati.

Utile la possibilità di attivare un pop-up che in caso di rilevamento di movimento ci avvisa sul cellulare se siamo connessi.

Tutto molto bello ma avere una webcam in casa che fa passare un flusso dati continuo verso ‘ verso non so dove (?)’ non mi piace così parto per la ricerca di nuove strade e in aiuto mi viene il mio raspberryPI con raspbian (testing).

motion

Motion “simple webcam server built in“, questo è un bel progetto che ci permette di gestire la nostra webcam in modo semplice, per certi aspetti poco completo ma alla base di molte altre possibili soluzioni da integrare, installiamo motion :

#aptitude install motion libav-tools

il pacchetto libav-tools occorre per avere il supporto a mpeg

Questa la lista delle dipendenze nella mia raspbian minimale :

The following NEW packages will be installed:
  ffmpeg{a} libaacs0{a} libasound2{a} libasound2-data{a} libass5{a} libasyncns0{a} libav-tools libavc1394-0{a} libavcodec57{a} libavdevice57{a}
  libavfilter6{a} libavformat57{a} libavresample3{a} libavutil55{a} libbdplus0{a} libbluray1{a} libbs2b0{a} libcaca0{a} libcairo2{a} libcdio-cdda1{a}
  libcdio-paranoia1{a} libcdio13{a} libchromaprint1{a} libdc1394-22{a} libdrm-amdgpu1{a} libdrm-freedreno1{a} libdrm-nouveau2{a} libdrm-radeon1{a}
  libdrm2{a} libebur128-1{a} libegl1-mesa{a} libfftw3-double3{a} libflac8{a} libflite1{a} libgbm1{a} libgl1-mesa-dri{a} libgl1-mesa-glx{a}
  libglapi-mesa{a} libgme0{a} libgraphite2-3{a} libgsm1{a} libharfbuzz0b{a} libiec61883-0{a} libjack-jackd2-0{a} libllvm3.8{a} libmariadbclient18{a}
  libmodplug1{a} libmp3lame0{a} libogg0{a} libopenal-data{a} libopenal1{a} libopencv-core2.4v5{a} libopencv-imgproc2.4v5{a} libopenjp2-7{a} libopus0{a}
  liborc-0.4-0{a} libpostproc54{a} libpq5{a} libpulse0{a} libraw1394-11{a} librubberband2{a} libsamplerate0{a} libschroedinger-1.0-0{a} libsdl2-2.0-0{a}
  libsensors4{a} libshine3{a} libsnappy1v5{a} libsndfile1{a} libsndio6.1{a} libsodium18{a} libsoxr0{a} libspeex1{a} libssh-gcrypt-4{a} libswresample2{a}
  libswscale4{a} libtheora0{a} libtwolame0{a} libtxc-dxtn-s2tc{a} libva-drm1{a} libva-x11-1{a} libva1{a} libvdpau-va-gl1{a} libvdpau1{a} libvorbis0a{a}
  libvorbisenc2{a} libvpx4{a} libwayland-client0{a} libwayland-cursor0{a} libwayland-egl1-mesa{a} libwayland-server0{a} libwebpmux2{a} libx11-xcb1{a}
  libx264-148{a} libx265-95{a} libxcb-dri2-0{a} libxcb-dri3-0{a} libxcb-glx0{a} libxcb-present0{a} libxcb-render0{a} libxcb-shape0{a} libxcb-shm0{a}
  libxcb-sync1{a} libxcb-xfixes0{a} libxcursor1{a} libxdamage1{a} libxinerama1{a} libxkbcommon0{a} libxrandr2{a} libxrender1{a} libxshmfence1{a}
  libxss1{a} libxtst6{a} libxv1{a} libxvidcore4{a} libxxf86vm1{a} libzmq5{a} libzvbi-common{a} libzvbi0{a} mariadb-common{a} mesa-va-drivers{a}
  mesa-vdpau-drivers{a} motion va-driver-all{a} vdpau-driver-all{a}
0 packages upgraded, 124 newly installed, 0 to remove and 0 not upgraded.
Need to get 51.0 MB of archives. After unpacking 261 MB will be used.

configurazione

I file di configurazione si trovano in /etc/motion/, quello principale che copre anche la configurazione della webcam quando se ne deve gestire solo una è motion.conf( qui una lista di tutti i parametri ), nel caso ci siano più camere occorre generare file in ordine numerico come camera1.conf e indicarlo nel file principale.

Per poter cominciare occorre per prima cosa conoscere l’origine del flusso dati della webcam, se non si trova l’indirizzo nella documentazione della nostra camera si può vedere nel vecchio sito di motion, nel mio caso con una D-link ho trovato informazioni utili qui.

Flusso JPEG: netcam_url http://x.x.x.x/image.jpg
Flusso MJPEG netcam_url http://x.x.x.x/mjpeg.cgi

Dopo aver ottenuto l’indirizzo del flusso dati possiamo cominciare a modificare il file motion.conf nelle parti utili:

#; netcam_url value
#per dlink 930 wifi
netcam_url http://address/image.jpg

# Username and password for network camera (only if required). Default: not defined
# Syntax is user:password
#; netcam_userpass value
netcam_userpass  user:pass

Per visualizzare da browser su http://motion_server:8081 vedremo il solo flusso video mentre su http://motion_server:8080 potremo avere a disposizione anche la gestione e la modifica di tutti i parametri presenti in motion.conf, non essendo in locale sul PI e volendo accedere a motion dalla rete occorre mettere a off alcune opzioni.

webcam_localhost off
control_localhost off

Controllare Live stream server e HTTP based control con i dovuti settaggi.

Per il salvataggio di foto/video nel rilevamento di movimento ho usato:

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /motion

Nel mio caso ho deciso di inviare su server FTP che nel mio caso è il mio NAS in locale.

on_picture_save wput -B ftp://USERNAME:PASSWORD@YOUTFTP.COM %f

Per usare cambozola disabilitare

Disable despeckle (comment it out in motion.conf).
Disable smartmask

Cambozola (java applet) è spesso usato in diverse GUI che ci possono venire utili, un elenco di vecchi progetti di cui alcuni ancora funzionanti.

link

Alcuni link che ho trovato utili per il mio primo approccio a motion :

new site:https://motion-project.github.io/
git :https://github.com/Motion-Project/motion
motion guida : https://htmlpreview.github.io/?https://github.com/Motion-Project/motion/blob/master/motion_guide.html#Basic_Setup
old wiki : http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome
cambozola e web page con apache2 : http://www.lavrsen.dk/foswiki/bin/view/Motion/WebcamServer
motion gui : http://www.lavrsen.dk/foswiki/bin/view/Motion/RelatedProjects
aumentare maximum sensitivity : https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=68299
https://www.linux.com/learn/tutorials/780055-how-to-operate-linux-spycams-with-motion
http://www.stefanolaguardia.eu/2008/08/30/linux-videosorveglianza-con-webcam-facile-come-bere-un-bicchiere-dacqua-grazie-a-motion/
https://raymii.org/s/tutorials/Setting-up-motion-with-ftp-and-email-support.html

motioneye

Qui siamo al TOP, abbiamo un web frontend che si adatta a monitor PC,tablet o smartphone, con i dovuti permessi si riesce a configurare tutto dall’interfaccia web.

motioneye

Requisiti :

  • a machine running a recent Linux distro
  • python 2.7
  • tornado 3.1+
  • jinja2
  • PIL or pillow
  • curl, libcurl & pycurl
  • motion (optional)
  • ffmpeg (optional)
  • v4l-utils (optional)

Installare i pacchetti necessari

#aptitude install python-pip python-dev curl libssl-dev libcurl4-openssl-dev libjpeg-dev libx264-148 libavcodec57 libavformat57 libmysqlclient18 libswscale3 libpq5

I pacchetti opzionali

#aptitude install motion ffmpeg v4l-utils

Come prima installazione ho provato a usare il metodo Install on Raspbian, ma con pip abbiamo dei problemi a terminare l’operazione perché si inceppa su pillow.
Procediamo con l’installazione manuale : Installazione manuale

Scarichiamo il file aggiornato : https://github.com/ccrisan/motioneye

$tar zxvf motioneye-x.y.tar.gz
$cd motioneye-x.y
#python setup.py install --prefix=/usr

Se il prefix non viene digerito come successo a me:

#python setup.py install

Troveremo tutto installato in : /usr/local/lib/python2.7/dist-packages/motioneye-0.35.1-py2.7.egg/

#mkdir -p /etc/motioneye
#cp /usr/local/lib/python2.7/dist-packages/motioneye-0.35.1-py2.7.egg/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf

Per avviare basta

#meyectl startserver

una volta avviato basta un ctrl+c, oppure avviarlo come demone

#meyectl startserver -b

per spegnere possiamo usare

#meyectl stopserver

In alternativa possiamo realizzare su un dispositivo dedicato con motioneyeOS : https://github.com/ccrisan/motioneyeos/wiki/Installation

Per il salvataggio dati ho preferito indirizzare motioneye a una cartella locale, montando il nas :

mount -t cifs -o username=user,password=my_pass,gid=1000,uid=1000,sec=ntlm //IP_NAS/dir/ /media/nas

Dopo aver avviato motioneye spostiamoci con il browser alla pagina http://IP.macchina:8765, se desideriamo cambiare porta modificare il file /etc/motioneye/motioneye.conf :

# the TCP port to listen on
port 8765

L’utente di default è admin, inserire una password, è possibile inserire anche un altro utente con password ma solo per la visualizzazione e senza accesso alle configurazioni.
Ora basta aggiungere quante camere si vuole, e si potranno visualizzare secondo un ordine che stabiliremo noi nella finestra principale, ogni camera ha le proprie configurazioni.
Molto interessante e utile è poter accedere direttamente ai dati salvati che siano essi immagini o video, nel caso siano immagini possiamo visualizzarle direttamnte sul browser mentre per i filmati occorre scaricarli, la gestione ci permette oltre alla visualizzazione, la cancellazioni di singoli file o direttamente di cartelle complete.
Tra le impostazioni di motioneye è presente una durata massima di permanenza delle immagini salvate nella scheda STILL IMAGE l’opzione Preserve Pictures ci permette di scegliere :

  • one day
  • one week
  • one month
  • one year
  • forever
  • custom (impostare manualmente in numero di giorni)

Attualmente sono ancora in fase di test e posso dire che funziona tutto bene, forse il raspberryPI B+ è un pò limitato come risorse (single core + 256MB di RAM) e con una sola webcam mi trovo la CPU in media al 30%, questo è dovuto al numero di FPS che più sarà elevato maggiore sarà la richiesta di lavoro alla CPU.

Test

Abbiamo eseguito alcuni test per vedere il comportamento associato alle prestazioni, sono state seguite 2 strade:

  • software della camera + motioneye (solo viasualizzazione e gestione file salvati)
  • motioneye (gestione completa)

software della camera + motioneye

In questa condizione la camera gestisce in modo autonomo il rilevamento di movimento e salva le immagini sul NAS, per rendere più sicura la trasmissione dati verso l’esterno ho inserito una regola nel firewall del router chiudendo alla camera le comunicazioni verso l’esterno, in LAN to WAN ho bloccato TCP e UDP all’IP statico della camera.

Motioneye è attivo sul Raspberry PI e nelle configurazioni usa la stessa locazione per il salvataggio delle immagini, accedendo a motioneye dall’esterno (SSH tunnel con browser proxificato) riesco a visualizzare la camera in “live” e volendo posso accedere alle immagini salvate sul NAS.

In termini prestazioni visualizzando in LAN con il programma mydlink da cellulare ottengo circa 15fps mentre dalla WAN (prova con connessione non bloccata) circa 7fps, per il salvataggio delle immagini abbiamo circa 5fps con 320×240 e 3fps con 640×480.

Motioneye è impostato per un limite in Video Device con 2 frame rate, questo mi permette un flusso costante mentre visualizzo dall’esterno con browser perché la mia connessione a 7 mega non mi permette un grande upload, anche se il flusso dati passa in modo costante a motioneye e genera un traffico giornaliero di circa 5 GiB su motioneye.

Il traffico può sembrare elevato, ma motioneye fa passare tutti i fotogrammi anche se il motion detection non è attivo e anche quando non si visualizza da browser, a seconda del tipo di fotogrammi il traffico sarà più o meno elevato, ad esempio di notte (la camera non ha visione notturna) l’immagine nera ha piccole dimensioni mentre di giorno sarà più grande per il numero di colori presenti nel fotogramma.

motioneye

In questo caso le prestazioni live riescono a essere migliori arrivando a 25 fps in LAN e 7 da WAN, ma a parte un leggero uso di CPU in più non sono riuscito a registrare fotogrammi con un fps superiore a 1, il traffico dati dalla camera al PI è rimasto invariato.

Considerazioni finali

Per ora lascio fare alla camera il motion detection con il suo software e quando mi serve avvio motion sia per vedere in live che per visualizzare le immagini registrate in questo modo riesco a risparmiare l’uso di CPU e ottengo un risultato migliore come fps nelle immagini salvate.

Con una sola camera i test da fare non sono molti, sarebbe interessante con almeno 2 o 3.

Un test che non ho fatto e mi ha sempre incuriosito è DomusBoss (bel lavoro di mrdebug), solo perché non ho trovato un pò di documentazione per cominciare, mentre invece in passato avevo provato ZoneMinder ma l’obbligo a installare e usare MySQL mi aveva impedito di proseguire, infatti sul mio vecchio raspberryPI B+ con 256MB di ram quando il servizio mysql si avviava voleva (da file conf) 512MB di memoria, l’impossibilità di soddisfare la richiesta bloccava il servizio e il seguente avvio di zoneminder.

Anche provando a ridurre le dimensioni della memoria in /etc/mysql/my.cnf rimanevano grossi problemi a livello di prestazioni, con il PI 3 si potrebbe provare.

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.