Sistema di videosorveglianza

Ezio Tomassetti  •  Lorenzo Forcellini Reffi -

Componenti del sistema

  • Web Server, Database server, Cam Server, Android Server
  • Cellulari o Smartphone con Android
  • Computer (Client) dotati di accesso al sistema via browser e applicazione java
  • VideoCamere IP

Descrizione

Il sistema ha l'obiettivo di fornire ai clienti un interfaccia di controllo delle proprie videocamere di sicurezza, considerando il fatto che l'utente può anche trovarsi fuori dalla propria postazione di controllo, pertanto è necessario fornire un servizio a distanza che gli permette di tenere sotto controllo gli eventi verificati sotto gli "occhi" delle telecamere. Vediamo in dettaglio:1) Il server web appoggerà un sito che permetterà ad ogni cliente di modificare le proprie impostazioni, di avere un report di tutti gli eventi che si sono verificati (e quindi di tutti gli allarmi o segnalazioni), di visualizzare le proprie videocamere (o anche ruotarle) e di segnalare eventuali anomalie/allarmi da ogni videocamera. Questi segnali verranno gestiti come segue:
  • L'anomalia viene spedita ad un servizio che funge da sensore di allarme
  • Questo sensore si occuperà di smistare l'anomalia a chi di dovere (quindi invierà un messaggio alla centralina)
  • Android Server smisterà l'anomalia al numero di telefono dell'utente collegato alla videocamera
2) Android Server: è la centralina o comunque il medium che gestisce i segnali riferiti ai dispositivi cellulari. Si occupa quindi di impacchettare le segnalazioni e spedirle via sms. Un cliente ha la possibilità di inviare un sms alla centralina (chiedendo ad esempio un report degli eventi) e quest'ultima preparerà tutto il necessario e risponderà al numero mittente ciò che è stato richiesto.3) Cam Server: per rendere il sistema più scalabile si può avere la necessità di avere più server destinati alla gestione delle videocamere. Conterrà quindi il database relativo agli indirizzi ip delle camere. In tal modo l'azienda può ricavarne dei vantaggi, riferiti soprattutto alla risoluzione del problema che si verificherebbe nel caso in cui il numero delle videocamere diventino un numero spropositato. Gestisce anche la parte relativa agli eventi memorizzando le segnalazioni4) Smartphone con Android: avrà la possibilità di visualizzare le videocamere e visualizzare gli eventi. 5) L'amministratore/Tecnico può avere la possibilità di controllare le attività di tutti i clienti e quindi anche di gestire la visualizzazione delle videocamere degli utenti (se ad esempio il cliente vuole il servizio di vigilanza oltre quello di videosorveglianza). Eventualmente sarà implementata la possibilità di visualizzare le posizioni dei clienti.6) Database centrale: Si occupa di memorizzare qualsiasi informazione relativa agli utenti/amministratori permettendo l'archiviazione di dati relativi all'autenticazione e la reperibilità delle risorse desiderate7) Browser web: Permette l'interfacciamento fra l'amministratore/utente e l'intero sistema fornendo tutte le funzionalità descritte8) Applicazione Java: Permette l'interfacciamento fra utente e sistema fornendo servizi di gestione per quel che riguarda gli amministratori e consultazione per quel che riguarda i clienti

Obiettivi

L'obiettivo di questo sistema è garantire alle società di vigilanza un più ampio spettro di servizi da offrire all'utente finale. Può dare la possibilità al cliente ottenere un semplice servizio di videosorveglianza (quindi soltanto per controllare gli eventi), oppure può richiedere che il tutto sia sorvegliato dalla società stessa, garantendo la massima sicurezza e un azione tempestiva contro un eventuale allarme. Si deve dare la possibilità al cliente di poter visualizzare le proprie telecamere attraverso i dispositivi mobili e browser. Dobbiamo quindi porci l'obiettivo di creare l'architettura giusta. Ricordiamo che per architettura informatica si intende l'insieme dei criteri in base ai quali è progettato e realizzato un sistema telematico oppure un dispositivo facente parte di esso. {style} \

Glossario

Utente: persona fisica che accede con credenziali ai servizi del sistema, quindi è sinonimo di cliente. *Amministratore*: persona fisica che gestisce il sistema. Sinonimi: tecnici, forze armate. *Camera*: è la telecamera che si usa per la video sorveglianza, con la possibilità di sfruttare il video in streaming in rete. *Dispositivo mobile*: qualsiasi dispositivo in grado di inviare e ricevere sms, quindi eventualmente anche un telefono di rete fissa. *Controllo camera*: c'è la possibilità che alcune camere possano offrire il controllo di esse, ad esempio si può ruotere, zoomare e compiere altre azioni. Il controllo è il pannello che ci permette di svolgere queste azioni. *Anomalia*: segnale che si è verificato qualche errore nella camera. Nel nostro caso può essere un errore segnalato dal cliente, o dal tecnico al cliente e può essere riferito a un evento non voluto o anche ad un errore di visualizzazione della camera. Altri concetti verranno chiariti in seguito.

Analisi dei componenti dell'architettura

  • {style:type=div|align=justify}WebServer: un server web è un servizio, e per estensione il computer su cui è in esecuzione, che si occupa di fornire, tramite software dedicato e su richiesta dell'utente, file di qualsiasi tipo, nel nostro caso cercheremo di sfruttare la codifica JSON e XML per risolvere dei problemi che citeremo in seguito. La tecnologia sfruttata per garantire velocità a chi utilizza un semplice browser (e quindi la tecnologia utilizzata nel sito web) è AJAX. Ricordiamo cos'è AJAX.
AJAX, acronimo di Asynchronous JavaScript and XML, è una tecnica di sviluppo per la realizzazione di applicazioni web interattive (Rich Internet Application). Lo sviluppo di applicazioni HTML con AJAX si basa su uno scambio di dati in background fra web browser e server, che consente l'aggiornamento dinamico di una pagina web senza esplicito ricaricamento da parte dell'utente. AJAX è asincrono nel senso che i dati extra sono richiesti al server e caricati in background senza interferire con il comportamento della pagina esistente. Normalmente le funzioni richiamate sono scritte con il linguaggio JavaScript. Tuttavia, e a dispetto del nome, l'uso di JavaScript e di XML non è obbligatorio, come non è necessario che le richieste di caricamento debbano essere necessariamente asincrone. AJAX è una tecnica multi-piattaforma utilizzabile su molti sistemi operativi, architetture informatiche e browser web, ed esistono numerose implementazioni open source di librerie e framework. La tecnica Ajax utilizza una combinazione di:
  • HTML (o XHTML) e CSS per il markup e lo stile;
  • DOM (Document Object Model) manipolato attraverso un linguaggio come JavaScript o JScript per mostrare le informazioni ed interagirvi;
  • l'oggetto XMLHttpRequest per l'interscambio asincrono dei dati tra il browser dell'utente e il web server.
  • in genere viene usato XML come formato di scambio dei dati, anche se di fatto qualunque formato può essere utilizzato, incluso testo semplice, HTML preformattato, JSON. Questi file sono solitamente generati dinamicamente da script lato server.
Come DHTML o LAMP, Ajax non è una tecnologia individuale, piuttosto è un gruppo di tecnologie utilizzate insieme.
PRO E CONTRO
Come per le applicazioni DHTML, anche le applicazioni AJAX devono essere testate su più browser per verificarne la compatibilità. Inoltre è richiesto che nel client sia attivato Javascript. Il vantaggio di usare AJAX è la grande velocità alla quale un'applicazione risponde agli input dell'utente. Un problema abbastanza degno di nota è che, senza l'adozione di adeguate contromisure, le applicazioni AJAX possono rendere non utilizzabile il tasto "indietro" del browser: con questo tipo di applicazioni, infatti, non si naviga da una pagina all'altra, ma si aggiorna di volta in volta una singola parte del medesimo documento. Proprio per questo i browser, che sono programmi orientati alla pagina, non hanno possibilità di risalire ad alcuna di tali versioni "intermedie". Google, nella sua Google Maps, ha sviluppato una possibile soluzione al problema: invece di usare XMLHttpRequest quando l'utente clicca sul bottone di ricerca, il risultato della ricerca viene inviato in un iframe invisibile, dal quale le informazioni sono portate nella pagina visibile. In ogni modo, un attento design delle applicazioni AJAX permette di risolvere in parte (talvolta tutti) questi aspetti negativi. \ {style}{style:type=div|align=justify}Perchè usiamo JSON? Perchè questo sarà lo standard con cui le applicazioni del sistema comunicheranno, permettendone l'adattamento a qualsiasi applicazione per qualsiasi piattaforma, sfruttando le potenzialità di questo formato. Vediamo in dettaglio che cos'è. JSON (JavaScript Object Notation) è un semplice formato per lo scambio di dati. Per le persone è facile da leggere e scrivere, mentre per le macchine risulta facile da generare e analizzarne la sintassi. JSON è un formato di testo completamente indipendente dal linguaggio di programmazione, ma utilizza convenzioni conosciute dai programmatori di linguaggi della famiglia del C, come C, C++, C#, Java, JavaScript, Perl, Python, e molti altri. Questa caratteristica fa di JSON un linguaggio ideale per lo scambio di dati. {style}
  • {style:type=div|align=justify}Signal receiver: è il componente che si occupa di smistare la segnalazione dell'allarme della telecamera. Riceverà il messaggio dal web server e lo invierà al servizio relativo, quale android server (si potrà inviare a qualunque altro servizio che gestisce il segnale, per il momento il nostro sistema sarà provvisto soltanto di un servizio per gli sms).
  • Database server: Un Server di database è la parte del DBMS (e, per estensione, il server su cui il programma opera) che si occupa di fornire i servizi di utilizzo del database ad altri programmi e ad altri computer secondo la modalità client/server. Il server memorizza i dati, riceve le richieste dei client ed elabora le risposte appropriate. Il DBMS utilizzato è MySQL.
  • Cam Server: inizialmente sarà posto nello stesso web server, ma si è scelta la possibilità di trattare la lista delle camere e degli eventi su un server separato, in modo da rendere più scalabile il sistema. Parleremo in seguito della scalabilità. Non è prevista la possibilità di creare repliche del database delle telecamere, quindi il fatto che ce ne possa essere più di uno dipende solo dal fatto che si può fornire ad uno specifico cliente uno specifico database. Comunque, in ogni sistema distribuito, bisognerebbe dividere ogni componente per renderlo adattabile a qualsiasi cambiamento nel tempo. Il database separato, può dare quindi la possibilità di non avere tutto nella stessa sede.
  • Android server: è il componente che è in ascolto e pronto ad elaborare il segnale. La connessione deve ovviamente essere sicura e dovranno essere ammessi errori; non può accadere che se la connessione cade il segnale vada perso, quindi dovranno essere presi accorgimenti. La connessione tra signal receiver e Android server dovrebbe risolvere anche i problemi collo di bottiglia, perchè come si può immaginare, molte richieste sulla stessa porta, potrebbero causare non pochi rallentamenti, si parlerà successivamente di una possibile soluzione in modo dettagliato.
  • Smartphone Android o dispositivo mobile: si da la possibilità all'utente di visualizzare le camere a lui associate e gli eventi che si sono verificati. Ma se un cliente non ha Android o comunque non ha un dispositivo mobile che permetta lo sviluppo di un applicazione grafica? Ad esempio un cellulare di vecchia data, o ad esempio un telefono da casa che invia sms. Android server fornirà un servizio di sms, basterà inviare una stringa con nome utente e password e sarà restituita la lista degli eventi che si sono verificati.
  • Applicazione Java: Parallelamente al sistema Android viene fornita un'applicazione Java che permette, oltre alla visualizzazione delle camere, anche l'accesso alle funzionalità di amministratore consentendo l'aggiunta di cam e clienti. Tale applicazione è studiata per connettersi al webserver centrale tramite richiesta http attendendo una risposta in formato JSON gestita con le opportune librerie. In questo modo non si realizza un interazione diretta con il database conferendo la possibilità di monitorare il numero e le tipologie di accessi.
    • {style:type=div|align=justify}Camere ip: inizialmente la società avrà a disposizione (soprattutto per quando riguarda le camere con controllo), due tipi di camere:
  • Edimax ic 7000 (con possibilità di ruotare la camera)
  • Digitus dn16005 (senza controlli)
Ovviamente il sistema sarà standardizzato, in modo da poter inserire in modo facile anche altre camere. Per il momento standardizzeremo soltanto lo streeming delle camere senza controllo, sfruttando il refresh d'immagine con un tempo adeguato. Non sarà comunque difficile adattare il sistema ad altri modelli di camere con controllo. \Iniziamo a vedere i casi d'uso del sistema:

Casi d'uso

{style:type=div}{PrimaryUseCases.jpg} {style}

Architettura

Il modello del sistema è quindi:{style:type=div}{ComponentModel.jpg}mentre il sistema comprendente l'applicazione Java:{style:type=div}{Architettura.Sistema-Java.jpg~|600~|800}Il modello del database si divide in:
  • Database centrale
{style:type=div}{Database.jpg~|400~|700}
  • Database Webcam
{style:type=div}{Database.cam.jpg}

Struttura del sistema

Vediamo nel dettaglio la struttura interna dei componenti:{style:type=span|font-family=Arial,sans-serif}Cam Viewer)))
{CamViewer.jpg}\

{style:type=span|font-family=Arial,sans-serif}La Classe CamViewer sarà la classe di inizializzazione, che si occuperà anche di gestire i cambiamenti di immagine.

{style:type=div|align=justify}{style:type=span|font-family=Arial,sans-serif}Image è stata introdotta per poter permettere un futuro adattamento, ad esempio se si vogliono far visualizzare più camere insieme, mediante questa classe sarà più facile.
\

{style:type=span|font-family=Arial,sans-serif}eventList si occupa invece della raccolta degli eventi, quindi sarà l'archivio degli eventi (una sorta di cache interna).

Map Locator
{MapLocator.jpg} \

{style:type=span|font-family=Arial,sans-serif}MapLocator è la classe che gestisce la mappa. ItemOverlay sono i punti da gestire.

{style:type=span|font-family=Arial,sans-serif}-
Android Server
{style:type=div}{androidserver.jpg}

{style:type=span|font-family=Arial,sans-serif}Questa è una struttura un pò più complessa, ma comunque con poche entità da definire.

{style} \

{style:type=span|font-family=Arial,sans-serif}Web Server

Webserver.jpg

\Quello che ci interessa definire nel server web, per il momento, è soltanto la forma di comunicazione dei 2 componenti. Il sito web ha al suo interno un servizio che invia il segnale ad un altro componente, il Signal Receiver. Ma perchè questa scelta? Perchè scegliere 2 gestori di segnale? In realtà non è proprio così, il gestore del sito impacchetta il segnale e poi spedisce tutto all'altro componente, che invece si occupa di smistare il segnale. In questo modo è possibile dividere i due componenti, in modo tale da poter avere anche più gestori. Ad esempio, se poniamo il caso che il numero di clienti sia spropositato, si potrebbe inviare ogni segnale ad un gestore diverso e risolvere il collo di bottiglia. Vediamo che per il momento la porta in ascolto è la 10000.

\ \

{style:type=span|font-family=Arial,sans-serif}Java CamViewer

JCamViewer.jpg

Le classi ListCam e GetImage permettono di recuperare rispettivamente la lista delle webcam relative all'utente e le immagini relative a queste. Entrambe si appoggiano alle classi che gestiscono le richieste http con relativo metodo POST

Java Update system

UpdateSystem.jpgLe classi insertCam e insertClient danno la possibilità di agire sul sistema come amministratore salvando clienti e camere.

Java Connection

JConnection.jpgLa classe connection permette di gestire una connessione http in cui la richiesta, effettuata con metodo POST, viene gestita dalla classe POST_request. In questo modo riusciamo a gestire tutte le connessioni tramite due componenti

Java Login

JLogin.jpgIl Login avviene ancora una volta appoggiandosi alla classe Connection mentre il valore di ritorno sarà lo stato di autenticazione o errore.

Per comodità le Webcam , i clienti e le credenziali dei clienti verranno implementate nel modo seguente:

ClassModel.jpg Database centrale

Il database centrale situato nel webServer è progettato per permettere la gestione di tutti gli utenti.

ENTITA':

  • CREDENZIALI: Tramite un identificativo numerico autoincrementato distingue tutti gli utilizzatori del sistema archiviando username e password codificata con chiave crittografica md5 e distinguendo clienti e amministratori tramite un campo "Admin".
  • UTENTE: Permette il salvataggio di tutte le informazioni relative agli utilizzatori
  • APPLICAZIONE: Registra l'applicazione consentita
  • CAMSERVER: Contiene la lista di tutti i server associati ai clienti contenenti le rispettive webcam
  • LOCATION: Consente il salvataggio di dati relativi alla posizione, espressa in coordinate geografiche, dell'utente
  • TELEFONO: Contiene i recapiti telefonici di ogni utente distinguendo la tipologia fissa o mobile

    Il database viene interrogato tramite query SQL inoltre rispetta la terza forma normale eliminando le dipendenze funzionali transitive per garantirne la qualità ed evitare inutili ridondanze. La gestione delle transazioni permette inoltre di incrementare l'efficienza e la completezza delle informazioni evitando il salvataggio di dati parziali. In caso di errore la funzione di rollback ripristina infatti il database allo stato precedente l'inserimento di nuovi dati. Questa funzionalità è volta al raggiungimento delle proprietà ACID (Atomicity, Consistency, Isolation, Durability) tipiche dei DBMS. E' stata aggiunta anche un entità "Applicazione". Questa potrebbe permettere in uno sviluppo futuro di collegare le credenziali ad un particolare tipo di piattaforma gestendo una sorta di "permessi" dando la possibilità quindi di approvare o bloccare la visualizzazione delle webcam in base al dispositivo utilizzato. Potrebbero infatti esserci varie forme di contratto col cliente in grado di modificare la quota di retribuzione in base ai permessi concessi. Database Webcam

    Il database delle webcam situato nel CamServer è progettato per permettere la gestione di tutte le cam.

    ENTITA':

  • TELECAMERA: Entità che identifica una Webcam tramite un ID e mantiene in memoria l'IP, la modalità d'uso che puo essere visiva o a controllo remoto, l'utente al quale la cam è assegnata, l'activex o l'immagine a seconda della modalità di visualizzazione.
  • EVENTO: Consente di memorizzare tutte le informazioni relative agli eventi segnalati dall'utente

    L'interazione è ovviamente pensata per associare zero o piu eventi ad una cam

    Note sulla crittografia MD5:

L'acronimo MD5 (Message Digest algorithm 5) indica un algoritmo crittografico di hashing realizzato da Ronald Rivest nel 1991 e standardizzato con la RFC 1321. Questo tipo di codifica prende in input una stringa di lunghezza arbitraria e ne produce in output un'altra a 128 bit che può essere usata per calcolare la firma digitale dell'input. La codifica avviene molto velocemente e l'output (noto anche come "MD5Checksum" o "MD5 Hash") restituito è tale per cui è altamente improbabile ottenere con due diverse stringhe in input una stessa firma digitale in output. Inoltre, come per la maggior parte degli algoritmi di hashing, non dovrebbe esserci possibilità, se non per tentativi (forza bruta), di risalire alla stringa di input partendo dalla stringa di output (la gamma di possibili valori in output è infatti pari a 2 alla 128esima potenza). La crittografia tramite algoritmo MD5 viene applicata in tutti i settori dell'informatica che lavorano con il supporto delle firme digitali o che comunque trattano dati sensibili. È diffuso anche come supporto per l'autenticazione degli utenti attraverso i linguaggi di scripting Web server-side (PHP in particolare): durante la registrazione di un utente su un portale internet, la password scelta durante il processo verrà codificata tramite MD5 e la sua firma digitale verrà memorizzata nel database (o in qualsivoglia contenitore di dati). Successivamente, durante il login la password immessa dall'utente subirà lo stesso trattamento e verrà confrontata con la copia in possesso del server, per avere la certezza dell'autenticità del login.

Comportamento

Segnale

signal.jpg\

Interazioni

Le principali interazioni tra l'utente e il sistema sulle quali ci vogliamo focalizzare di più sono:
{interaction.jpg~|749~|786} \{style:type=div|align=justify}Queste sono le interazioni tra l'utente che usa il sito web e il sistema. Riguardo l'applicazione Android, dato che abbiamo bisogno della visualizzazione degli eventi e delle camere, avremo che tutto sarà sincrono, per meglio dire, quando richiedo la lista delle camere, aspetto la risposta e poi visualizzo. Per la lista degli eventi stessa cosa. Finchè non ho ricevuto tutto l'applicazione rimane in attesa. Vediamo ora su quali caratteristiche ci vogliamo focalizzare, in modo da iniziare a predisporre il sistema alla distribuzione. Partiamo ovviamente dalla correttezza. Che cos'è la correttezza? Un programma o sistema software si dice corretto se si comporta esattamente secondo quanto previsto dalla sua specifica dei requisiti. Più difficoltoso sarà rendere il sistema completamente affidabile, dati anche i tempi ridotti per realizzarlo, si parlerà comunque di possibili soluzioni a problemi, in modo da poter permettere in futuro un possibile miglioramento. Ovviamente il sistema deve risultare usabile, ovvero facile da utilizzare e da comprendere. Questo aspetto non è difficile da affrontare, in quanto uno stile grafico "organizzato" permette all'utente di capire qual'è la funzione che vuole attivare. Quello che ci interessa di più è la scalabilità che può essere geografica, di calcolo o amministrativa. Ci interessano al momento le prime due.  Un sistema geograficamente scalabile è quello che mantiene inalterata la sua usabilità e utilità indipendentemente dalla distanza fisica dei suoi utenti o delle sue risorse; questa condizione è già verificata dai modelli sopra descritti. Ovviamente, la scalabilità di calcolo dipende anche dalle linee di comunicazione e dalla loro velocità a trasmettere i dati, pertanto il nostro compito sarà quello di scomporre i vari componenti in modo da adattarli a cambiamenti di questo tipo. I componenti sui quali focalizzarci per ottimizzare questo tipo di scalabilità sono sostanzialmente il gestore di segnale e le forme di interazione con il web server. Perchè il gestore di segnale può causare problemi? Se 1000 utenti inviano un segnale d'allarme in contemporanea può verificarsi un rallentamento (se si utilizza un solo gestore). Una soluzione a questo problema è quella di scomporre il gestore e metterne in giro più di uno, così pure più di un server web. Ci sarà un server centrale che random reindirizzerà le richieste degli utenti ad altri server, e questi server (in caso di segnale), invieranno l'allarme a un gestore qualsiasi. In pratica una sorta di superserver, che risolve il problema dell'uso di una porta univoca. Il sistema deve quindi fare in modo che ad ogni richiesta utente sia assegnata una porta diversa e non intralciare il traffico di altre forme d'interazione. Un altra soluzione al problema potrebbe essere simile alla prima già descritta, con la variante che le porte dei gestori di segnale siano divise per area geografica. Spiegando meglio: poniamo il caso che i clienti siano metà in provincia FC, metà in provincia di Modena. Quando essi contattato il sito web, quest'ultimo assegna la porta del gestore e chiamerà il gestore in base alla zona. Se ci sono 5 sensori, i primi 2 sono in ascolto nella porta 9000 e 9001 per esempio, ebbene, questi saranno quelli chiamati. L'uno dalla provincia FC e l'altro dalla provincia MO. In questo caso si ha bisogno di riconoscere la zona e quindi di introdurre nuove funzioni. La miglior scelta sarebbe una scelta random dei gestori. Se in futuro il messaggio inviato sarà di gran lunga superiore a quello attualmente utilizzato (con sole le informazioni utente), si potrebbe adottare un'altra soluzione: fare in modo che ad ogni connessione tra segnal sender e signal receiver, venga associata una porta random. Ci interessa predisporre il sistema anche per modifiche future. Questa caratteristica è la manutenibilità o evoluzione del software. La scomposizione dei vari componenti, permette un migliore approccio verso la modifica e il miglioramento del sistema stesso. L'essere un sistema eterogeneo è invece la caratteristica cuore di questo sistema. La codifica in formato JSON permetterà la comunicazione con qualsiasi piattaforma, dato che si tratta di un formato standard. Ogni messaggio sarà spedito secondo questa codifica e gestito nel modo più appropriato. Il protocollo usato è sostanzialmente l'HTTP (con formato XML), ma per comunicazioni affidabili (per i segnali d'allarme) utilizziamo il TCP. Nel diagramma notiamo che è l'utente a inviare la segnalazione e qui c'è un attimo da chiarire le cose. Attualmente non ci è possibile implementare un sistema automatico che riconosca movimenti "estranei" della camera, quindi abbiamo introdotto una segnalazione manuale che può comunque avere un'utilità. Pensiamo al fatto che un cliente vada all'estero e dia le credenziali per controllare ad un altra persona. In quel caso se c'è qualche problema la persona può avvertire immediatamente il cliente dell'anomalia tramite sito web in modo veloce. L'anomalia in questo caso può anche rappresentare un semplice errore nella visualizzazione della camera e non solo un movimento allarmante. \

FASE PROGETTUALE

Interazione del sistema

In conclusione, l'interazione di tutti i componenti del sistema è riassunta in figura. Modello interazione

PATTERN

I pattern individuati sono: {style:type=div|align=center}{Proxy.jpg}))) Un proxy, nella sua forma più generale è una classe che funziona come interfaccia per qualcos'altro. L'altro potrebbe essere qualunque cosa: una connessione di rete, un grosso oggetto in memoria, un file e altre risorse che sono costose o impossibili da duplicare. Nel nostro caso è un immagine. Questo pattern è stato usato anche per il refresh dell'immagine nel sito web. l'immagine proxy è stata creata in javascript. \ {Singleton.jpg}))) Questo pattern ci aiuta semplicemente ad evitare di creare più istanze della connessione (causerebbe solo rallentamenti o addirittura malfunzionamenti). \{strutturasignal.jpg}))) Questo pattern è molto utile per dare la giusta responsabilità alla giusta entità. Quindi un entità ha la responsabilità di leggere il messaggio, per poi darlo in mano all'entità che smista il messaggio nel modo appropriato.
{Template.jpg})))Il Pattern Observer permette la gestione degli eventi. Avendo strutturato l'applicazione Java tramite una classe principale la quale ripartisce l'uso dei vari componenti, il pattern observer è particolarmente utile nel compiere proprio questa azione soprattutto in ambito grafico. In particolare la classe principale sarà vista come un observer che attende l'immissione delle credenziali nella fase di login per poter avviare le procedure di autenticazione e le funzionalità restanti in caso di successo. I pulsanti utili a visualizzare e salvare webcam e clienti saranno trattati come generatori di eventi facenti parete di classi observable.Observer.jpg

Modello strutturale Android Server

StrutturaAndroid.jpg

Modello strutturale Cam Viewer

CamViewerSystem.jpgla classe httpreq si occuperà delle richieste su protocollo HTTP, come la richiesta della lista delle cam o del controllo dell'esistenza di un utente. md5 è la classe che si occupa di criptare la password secondo codifica md5. CamGui si occupa di configurare l'interfaccia grafica. CamViewer in realtà non è l'unica classe che si occupa di configurare il sistema. Questa crea una classe chiamata Configurator che si occupa di configurare e mettere insieme il tutto.

Considerazioni finali

L'implementazione di questo sistema rispecchia un architettura multilivello, partendo dal client e terminando dal server Android. In sostanza possiamo pensarla come se al primo livello ci sia il client, al secondo livello il server web e il server android e al terzo livello il database server. Vista in questo modo è proprio un'architettura 3-tier, con la possibilità di aggiungere facilmente altri livelli.

Team

  • Ezio Tomassetti - Matricola: 408057
  • Lorenzo Forcellini Reffi - Matricola: 282355

File caricati

CamViewerSystem.rar -> Applicazione android client, per visualizzazione eventi e camere MapLocator.zip -> Applicazione per visualizzare le posizioni dei clienti SignalReceiver.zip -> Gestore del segnale (invia il segnale ad Android Server) SMSCentral.zip -> Android Server videosorveglianza.rar -> Sito web