Proiectarea Unui Sistem de Protectie a Serverelor la Actiunea Temperaturii Si a Persoanelor Neautorizate

PROIECT DE DIPLOMĂ

PROIECTAREA UNUI SISTEM DE PROTECȚIE A SERVERELOR LA ACȚIUNEA TEMPERATURII ȘI A PERSOANELOR NEAUTORIZATE

Introducere

Lucrarea intitulată “Proiectarea unui sistem de protecție a serverelor la acțiunea temperaturii și a persoanelor neautorizate” tratează aspecte ale securitații și monitorizării temperaturii serverelor.

Lucrarea este alcătuită din patru capitole, structurată în așa fel încât să transmită informațiile necesare și utile pentru protecția serverelor și monitorizarea temperaturii acestora. Tema a fost abordată în urma unor cercetări profunde asupra lucrărilor unor specialiști și autori în domeniu, tot demersul cercetării fiind transpus în cele patru capitole ale lucrării.

Primul capitol se intitulează „Sisteme de securitate”, aici regăsindu-se definirea sistemelor de securitate, ca fiiind un ansamblu de dispozitive ce interacționează între ele și detectează sau semnalizează o stare de pericol sau o intrare neautorizată într-un spațiu protejat. Tot aici se regăsește clasificarea sistemelor de securitate, dar și descrierea în sens larg a sistemelor de control acces. Sistemele de control access controlează accesul la resursele clădirii/companiei, autentifică și înregistrează accesul vizitatorilor.

Cel de-al doilea capitol “Monitorizarea temperaturii serverelor”, aduce în atenție noțiunea de server și modalitățile de monitorizare a temperaturii. Noțiunea de server provide de la cuvântul englez „to serve” care înseamna a servi. Un server este o aplicație pe calculator sau un calculator fizic, care operează în mod continuu în rețea și așteaptă solicitări din partea altor calculatoare. Tot în acest capitol se regăsesc informații utile despre poziționarea corectă a senzorilor de temperatură și tipuri de senzori de temperatură.

În capitolele trei și patru intitulate „Elemente hardware pentru realizarea proiectului” respectiv „Elementele software folosite în realizarea sistemului”, sunt descrise atât componentele hardware cât și cele software care au ajutat la construcția sistemului. În structura hardware intră componente precum microcontroler-ul Raspberry Pi, camera Raspberry Pi, plăcuța cu relee dedicată pentru Raspberry Pi.

Pentru funcționarea microcontrolerului s-a folosit un sistem de operare Raspbian, care a fost introdus direct pe cardul SD cu ajutorul softului Win32diskimager. Programarea s-a realizat cu limbajul de programare Python, el fiind recomandat și de către cei care au creat platforma de dezvoltare Raspberry Pi. Acest limbaj de programare vine în distribuția de Linux originală a plăcii.

Pentru monitorizarea temperaturii a fost creat un script capabil să preia temperatura de la UCP și să o afișeze în linia de comandă în timp real, iar dacă valoarea temperaturii depășește valoarea de referință să declanșeze alarma sonoră. Pentru a simula temperatura unui server s-a folosit temperatura UCP-ului de la Raspberry Pi.

La realizarea sistemului de securitate control acces este folosită metoda biometrică de recunoaștere a feței. Tehnologia biometrică de recunoaștere a feței prezintă o alternativa pentru sistemele clasice bazate pe cartele magnetice, chei fizice sau coduri de bară. Această tehnologie prezintă câteva avantaje unice față de sistemele clasice. Metoda de recunoaștere a feței se bazează pe identificarea feței utilizatorului, de aceea „cheia” se află în permanență la utilizator, această cheie neputând fi furată sau pierdută.

Primii algoritmi folosiți în metoda de recunoastere a feței aveau ca bază geometria, acestea identificând doar trăsăturile principale ale feței (poziția nasului, a ochilor, a gurii). Algoritmul folosit în acest proiect pentru recunoașterea feței se numește Eigenface și se bazează atât pe geometrie cât și pe fotometrie (masoară intensitatea surselor de lumină). Pentru o precizie cât mai mare este recomandată folosirea imaginilor la o calitate ridicată, imagini fără umbre, cu o luminozitate și contrast potrivite.

La ora actuală acest algoritm este unul dintre cei mai buni și cei mai folosiți algoritmi. Studiile recente demonstrează creșterea eficienței algoritmilor de recunoaștere facială cu până de 10 ori mai precise fată de algoritmii folosiți în anul 2002 și cu aproximativ de 100 de ori mai eficienți față de algoritmii din anii 1995.

Capitolul I

Sisteme de securitate

1.1. Noțiuni generale despre sistemele de securitate

Securitatea a reprezentat încă de la începutul omenirii o preocupare esențială, așa cum reiese și din piramida lui Maslow, unde nevoia de securitate este plasată ca nivel de importanță imediat după nevoile fiziologice. În ciuda faptului că acest concept este unul cu vechime, nu există o definiție larg acceptată a „securității”, tocmai datorită faptului că ea acoperă o multitudine de arii.

Demersul definirii conceptului de „securitate” este unul cu atât mai dificil în zilele noastre, având în vedere numeroasele dimensiuni ale securității și diversificatele pericole și amenințări la adresa securității din lumea contemporană.

În sens pragmatic, conceptul de securitate poate fi echivalat cu sintagma „absența pericolului”, iar cel de insecuritate cu sintagma „prezența pericolului”. Una dintre cele mai cunoscute și vechi definiții a securității îi aparține lui Arnold Wolfers: „securitatea, în sens obiectiv, măsoară absența amenințărilor la adresa valorilor dobândite, iar într-un sens subiectiv, absența temerii ca asemenea valori vor fi atacate”.

O latură foarte importantă și aparte a securității o reprezintă conceptul de „sistem de securitate”. Sistemul de securitate poate fi definit ca un ansamblu de dispozitive ce interacționează între ele și detectează sau semnalizează o stare de pericol sau o intrare neautorizată într-un spațiu protejat. [1]

O cauză a apariției sistemelor de securitate este frica, nesiguranța, neputința omului în fața unui pericol ce poate distruge echilibrul de zi cu zi. Din această cauză au apărut și și-au dezvoltat activitatea firmele specializate în conceperea și montarea de echipamente și sisteme ce conțin tehnici sofisticate de securitate. Ele au ca obiectiv protejarea bunurilor, oamenilor sau a datelor. [2]

În Figura 1, sunt detaliate la nivel de bloc elementele ce formează un sistem de securitate complex (Danger Management System):

Figura1. Blocurile unui sistem de securitate

Tehnologia unui sistem de securitate este bazată pe conceptul inteligenței distribuite, prin care mai multe subsisteme autonome (unități de control) sunt conectate, printr-o rețea, la sistemul terminal. Unitățile de control pot menține autonomia totală și capacitatea de funcționare, independent de orice rețea terestră de comunicare deoarece au posibilitatea de transmisie prin satelit către sistemul terminal. Nu există ierarhie actuală de funcționare, adică nu există relație master-slave între unitatea de control și sistemul terminal. De fapt, unitățile de control sunt cele ce controlează rețeaua de securitate. Nu sistemul terminal este cel ce scanează unitățile de control, ci unitățile de control emit spontan mesajele lor de alarmă, acest principiu fiind piatra de temelie a conceptului de securitate fizică.

Operația de alarmă locală și funcțiile de control ale unității de control previn eșecul total al sistemului, chiar și în timpul întreruperii liniilor de transmisie între subsisteme și terminalul de sistem.

1.2. Clasificarea sistemelor de securitate

Principalele categorii de sisteme de securitate sunt:

sisteme antiefracție;

sisteme de detecție și avertizare antiincendiu;

sisteme de securitate a informației.

Sistemele antiefracție se pot clasifica și ele în funcție de: tipul obiectivului, aplicație și modul de implementare.

Clasificare în funcție de tipul obiectivului:

Rezidențiale

Comerciale/industriale

Financiar bancare

Militare

Clasificare în funcție de aplicație:

De interior

De exterior sau perimetral

Clasificare în funcție de modul de implementare:

Cablat

Wireless

Din sistemele antiefracție derivă următoarele subsisteme uzuale:

Subsistem control acces și/sau pontaj

Subsistem supraveghere video în circuit închis (CCTV)

Subsistem protecție perimetrală

Subsistem comunicații de securitate

Subsistem gestiune a rondurilor

6. Subsistem monitorizare alarme tehnice sau puncte non alarmă

Sistemele de detecție și alarmare antiincendiu se pot clasifica și ele în funcție de: tipul sistemului, aplicație, parametrii detectați de senzori și tipul detectorului.

Clasificare în funcție de tipul sistemului:

Convențional

Convențional adresabil

Analogic adresabil

Clasificare în funcție de aplicație:

De interior

De exterior

Clasificare în funcție de parametrii detectați de senzori:

Fum:

– detectoare cu cameră optică

– detectoare cu ionizare

– detectoare cu fascicul IR proiectat (IR BEAM DETECTOR)
Temperatura:

– detectoare de temperatura clasice (termistor)

– detectoare de temperatura în infrarosu

Flăcări și Scântei:

– detectoare în infrarosu

– detectoare în ultraviolet

4. Clasificare în funcție de tipul detectorului:

a. Punctual

b. Cu absorbție multipunct

Din sistemele de detecție și alarmare antiincediu derivă următoarele subsisteme uzuale:

 Sisteme de stingere automată

a. cu apă

b. cu gaz

c. cu pulberi sau spumă

2. Sisteme de acționare trape de fum

3. Sisteme de detecție a inundațiilor

4. Sisteme de monitorizare parametri tehnologici critici

5. Sisteme de detecție gaze toxice și/sau explozive

6. Sisteme de evacuare centralizată și public anouncement

1.3. Sisteme control acces

Sistemul de control acces reprezintă una dintre cele mai sigure și eficiente metode de protecție a unui obiectiv, datorită restricționării accesului persoanelor sau autovehiculelor. Acestea se pot aplica în interiorul clădirilor sau în exteriorul acestora (perimetru).

Sistemele de control access controlează accesul la resursele clădirii/companiei, autentifică și înregistrează accesul vizitatorilor prevenind traficul nedorit către resurse.

Utilizarea sistemelor de control acces este o alegere foarte bună din mai multe motive și anume: oferă utilizatorilor acces și autentificare rapidă; reduce riscul scurgerii de informații; operează cu diverse tipuri de utilizatori, aplicații și servicii; permite gestionarea automată a intrărilor și ieșirilor oamenilor în/din anumite zone de securitate; permite vizualizarea situației prezenței personalului; permite definirea zonelor de acces pentru fiecare persoană și intervalele de timp în care aceasta va avea acces; accesul vizitatorilor este permis fără a fi compromisă securitatea internă; este un instrument esențial pentru managementul resurselor umane într-o organizație; sistemul poate fi utilizat doar pentru zonele cu potențial ridicat de risc.

Accesul controlat se realizează prin interconectarea unor elemente electronice și mecanice dedicate. Elementele electronice realizează identificarea persoanei și generează validarea accesului (ex. cititoare, controllere, software). Elementele mecanice
sunt comandate de cele electronice și fac posibil accesul individual al utilizatorilor (turnicheți, broaște electromagnetice, electromagneți de forță).

Sistemele performante realizate la ora actuală permit extinderea nelimitată (rețea LAN, WAN) și conlucrarea cu majoritatea sistemelor interactive (ex: gestionare parcare).

1.3.1. Componentele sistemului de control acces

Centrala de control acces

Reprezintă o unitate centrală care are funcția de gestionare a punctelor de control acces, a cititoarelor, a broaștelor electromagnetice, a unităților de comandă și a yalelor electromagnetice cu care se deschid ușile. Această centrală primeste informații fie de la tastaturi, fie de la cititoare asimilate și decide dacă blochează sau deblochează accesul în respectiva zonă.

O altă funcție importantă a centralei de control acces este aceea de a memora informațiile primite de la tastaturi sau de la cititoare, astfel ținând și evidența persoanelor care au primit accesul în acea zonă.

Cititor de cartela magnetic

Cartela magnetică poate fi citită printr-un contact fizic al acesteia cu capul de citire al cititorului de cartelă magnetic. Această citire se face prin trecerea cartelei prin fanta pe care o are cititorul. Contactul fizic pe care îl presupune această metodă reduce considerabil durata de folosire atât a capului de citire, cât și a cartelei magnetice.

Cititor de cartele de proximitate

Operațiunea de citire a cartelei de proximitate constă în apropierea acesteia la o anumită distanță de cititor, fără a fi nevoie de contact direct. Distanța de citire variază în funcție de tipul de cititor și de tipul de cartelă, uzual folosindu-se cititoare cu distanța de citire de la 5 cm-10 cm pana la 60-70 cm. Durata de viață a cititorului și a cartelei de proximitate nu este limitată de uzura fizică, adica acestea pot să nu mai funcționeze decât în cazul distrugerii fizice a celor doua componente.

Tastatura de acces

Reprezintă unul dintre elementele clasice ale unui sistem de securitate ce permite introducerea unui cod (combinație dintr-un anumit număr de cifre). Se poate folosi independent sau împreună cu un cititor de cartelă, pentru a spori gradul de securitate.

Cititoare biometrice 

Sunt de mai multe tipuri: de scanare a amprentei degetului, a irisului, a palmei, a fetei și a vocii. Cele mai des întâlnite sunt cele de citire a amprentei degetului, avantajul acestor sistemelor biometrice fiind faptul ca permanent „cheia” se află la utilizator.

Software de control

Rulează pe un PC la care este conectat sistemul de control acces. Este utilizat la configurarea inițială a sistemului și administrarea ulterioară a utilizatorilor, gestionarea istoriei cu evenimentele de acces, permițând generarea de rapoarte folosind diverse filtre de timp, de utilizatori, de grupuri de utilizatori sau de uși. Furnizează baza de date primară pentru software-ul de pontaj.

Butoanele „cerere ieșire“ 

Sunt utile în situația în care nu interesează decât intrarea în zona securizată și vor fi instalate la ieșire pentru comanda deblocării căii de acces.

Blocatoare de uși

 Acestea pot fi yale electromagnetice sau electromagneți de forță.

Turnicheții

Sunt folositi pentru căi de acces unde fluxul personalului este mare.

Turnichetul permite accesul pe rând, fiecărei persoane, lucru care nu poate fi realizat folosind o ușă ca și cale de acces, decât dacă se utilizează mijloace electronice suplimentare de detecție a persoanelor. [3]

1.3.2. Clasificarea sistemelor de control acces

Din punct de vedere al modului de funcționare, sistemele de contol acces pot fi:

Cu inteligența centralizată

În acest caz deciziile de acces sunt luate de un server central care conține baza de date, iar sistemul funcționează în rețea LAN / WAN. În cazul celor mai multe sisteme de control al accesului, când comunicația cu serverul se întrerupe, decizia revine controllerelor locale.

Cu inteligența distribuită

În acest caz deciziile de acces sunt luate local, de către un controller, evenimentele apărute în sistem putând fi urmărite pe un calculator client.

În funcție de tipul comunicației echipamentele de control acces pot funcționa independent sau în rețea.

a. Funcționarea independentă (standalone) asigură accesul pe baza autorizării pre programate, fără înregistrarea sau transferul evenimentelor de acces. Aceste echipamente oferă un set minimal de funcții fiind destinate zonelor cu securitate scăzută sau medie.

b. Funcționarea în rețea (RS 485 sau Ethernet) permite stocarea evenimentelor de acces în memoria locală a cititorului și apoi transferarea spre un calculator de administrare.

Acest lucru permite extinderea funcționalității cu accesul în intervale orare predefinite și prin anumite uși pe baza unor profile.[4]

Capitolul II

Monitorizarea temperaturii serverelor

2.1. Noțiuni generale despre servere

Un server este o aplicație pe calculator sau un calculator fizic, care operează in mod continuu în rețea și așteaptă solicitări din partea altor calculatoare. Serverele se pot folosi și in alte scopuri, insa la nevoie ele pot fi rezervate exclusiv pentru funcția de server. De exemplu, un calculator se poate folosi într-un birou simultan pentru două scopuri, și anume, ca stație de lucru și ca server pentru celelalte calculatoare din retea.

Originea cuvântului „server” provine din cuvântul englez „to serve” care inseamna a servi. Calculatorul server poate în principal deservi întreaga rețea de calculatoare, pentru a asigura accesul la toate formele de conectare și servicii.

În zilele noastre serverele sunt asemănătoare fizic cu calculatoarele personale, dar configurația hardware este deseori optimizată pentru funcționarea lor ca servere. Chiar dacă multe componente hardware sunt identice cu cele pe care le găsim într-un calculator personal, totuși serverele rulează sisteme de operare și programe specializate foarte diferite față de cele folosite pe stațiile de lucru.

Un server nu trebuie confundat cu un calculator de tip mainframe, care centralizează informații și procesează activitățile firmelor mari. Un mainframe poate în principiu să funcționeze ca un server sau chiar ca mai multe servere virtuale pe lângă toate celelalte activități. Multe companii mari folosesc ambele tipuri de calculatoare, atât mainframe, cât și servere.

Serverele pot deservii resursele hardware care sunt partajate in retea și pot fi uneori comandate de către calculatoarele-client, cum ar fi imprimantele (atunci serverul se numește print server) sau sistemele de fișiere (atunci el se numește file server).

Din punct de vedere istoric, serverele au apărut în paralel cu rețelele de calculatoare. Rețelele permit calculatoarelor să comunice unul cu celălalt, cu cât rețeaua este mai mare cu atât mai mult este nevoie de un server care sa asigure o buna comunicare intre calculatoarele clienti. După apariția serverelor, rețelele s-au dezvoltat și au crescut semnificativ.

Dispozitive de tip server

Cu toate că serverele pot fi construite din componente obișnuite, pentru operații rapide și de mare amploare este indicat să folosească configurații hardware optimizate.

Serverele sunt compuse din componente mecanice ce au o „rezistență industrială”, iar aceste componente sunt ventilatoarele și hard-discurile. Componentele mecanice au fiabilitate marită față de PC-urile comerciale. Pentru a asigura o bună funcționalitate se folosesc ventilatoare mari și zgomotoase dar eficiente, în unele cazuri sunt folosite și instalații de aer condiționat. De asemenea se folosesc UPS-urile (Uninterruptible Power Supplies) ce asigură continuitatea alimentării cu energie electrică, dar are și rolul de a proteja serverul de fluctuații sau pene de curent.

Viteza microprocesorului folosit la servere poate fi mult mai mică decât a unui PC. Operațiile de intrare/ieșire se execută mult mai rapid deoarece nu exista interfata grafica, în acest caz nu este nevoie de instalarea unei plăci grafice performanta. Folosirea mai multor microprocesoare are ca efect o putere de calcul mai mare.[5]

2.2. Monitorizarea temperaturii

Într-o camera de servere temperatura ideală este de 15-20 de grade Celsius. Temperatura mult mai mare decât cea normală poate duce la nefunctionarea serverului și pierderea de date. În trecut pentru monitorizarea temperaturii era nevoie de o persoană care verifica constant temperatura din cameră, dar în zilele noastre pentru a rezolva această problemă au luat amploare diverse metode de monitorizare a temperaturii la distanță.

Printr-un sistem de monitorizare la distanță, fără fir, se pot extrage informații în timp real și cu acces multi-regional între obiectivul monitorizat și locația de unde se monitorizează temperatura. Acest sistem este format dintr-un PC și mai multe terminale, cu condiția ca toate dispozitivele să fie localizate în aria GSM și SMS. Se poate folosi telefonul mobil pentru a accesa informația în timp real sau cu ajutorul PC-ului prin intermediul internetului. [6]

Temperatura din camera serverului

Temperatura este variabila de mediu pe care majoritatea utilizatorilor o iau în considerare mai întâi de toate. Calculatorul și echipamentul de rețea este proiectat să funcționeze într-un interval de temperatura destul de îngust. Echipamentele emit multă căldură și un defect minor la instalatia de climatizare ar putea transforma camera serverului într-un cuptor în scurt timp. Pentru a asigura funcționarea fiabilă a componentelor este necesar sa ne asiguram că temperatura rămâne în limitele specificate.

În ceea ce privește temperatura corectă care ar trebui să existe în camera serverului, este recomandat să nu fie mai mică de 10° C sau mai mare de 28° C. Deși pare o gamă largă, acestea sunt valorile extreme, temperatura recomandata este în jurul valorii 20-21° C.

Menținerea temperaturii corecte a serverului

Camera serverului este foarte importantă și de aceea este esențial ca ea să fie bine izolată pentru prevenirea incendiilor, dar și prevăzută cu aer condiționat. Chiar dacă totul funcționează bine, temperatura poate fluctua în timpul zilei in functie de sezon, micile porțiuni fierbinți în jurul echipamentului pot genera multă căldură. Aerul conditionat poate funcționa uneori la o putere mai mică noaptea sau poate să nu facă față căldurii din încăpere in timpul zilei.

Tocmai din aceste motive este nevoie de monitorizarea continuă a temperaturii serverului și în acest scop au fost create mai multe sisteme. Este necesar să se măsoare temperatura în diferite puncte ale camerei pentru a descoperi care sunt zonele fierbinți.

Dispozitivul trebuie să fie capabil sa emita alarma, printr-un număr diferit de metode, cum ar fi e-mail sau SMS.

Nu există un singur răspuns privind plasarea ideală a senzorilor de temperatură în camera serverului. Mai mulți factori influențează cantitatea și pozitia senzorilor de temperatură necesari pentru a functiona în mod corespunzător. Acești factori includ designul serverului, sarcina, capacitatea, procentul de utilizare și eficiența.

Pentru zonele reci și zonele fierbinți cantitatea de senzori poate varia în funcție de obiectivele monitorizate și de buget. Pentru rackurile închise cu uși, este recomant ca senzorii de temperatură sa fie plasati pe partea interioară a ușii. Pentru rackurile deschise, fără uși, tot ce contează este montarea senzorilor într-un loc sigur și convenabil astfel incat sa nu interfereze cu alte echipamente. O locație bună este partea stângă sau partea dreaptă a rackului.

Pozitionare senzorilor de temperatură

Acoperirea minimă cu senzori de temperatură:

Un senzor de temperatură în fața fiecărui rack, în punctul de la jumătatea înălțimii rackului.

Un senzor de temperatură în partea din spate la fiecare cinci rafturi, în punctul de la jumătatea înălțimii rackului.

Acoperirea tipică cu senzori de temperatură:

Doi senzori de temperatură în fața fiecărui rack, unul montat la aproximativ 16 cm de partea de jos a rackului și unul la aproximativ 16 cm in partea de sus a rackului.

Un senzor de temperatură în partea din spate a fiecărui rack, în punctul de la jumătatea înălțimii rack-ului.

Acoperirea maximă cu senzori de temperatură:

Trei senzori de temperatură în fața fiecărui rack, unul montat la aproximativ 12 cm in partea de jos, unul montat în mijloc și unul montat la aproximativ 12 cm in partea de sus.

Un senzor de temperatură în partea din spate a fiecarui rack, în punctul de la jumătatea înălțimii rackului.

Următoarea ilustrație arată plasarea corectă a senzorilor de temperatură (presupunând o acoperire maximă) în fața unui rack închis.

Fig. 2.1.

Indiferent de locația de montare și numarul de senzori de temperatură utilizati, întotdeauna se montează senzorii în mod constant de la rack la rack și de la rând la rând.

Senzori de temperatură

Pentru a măsura temperatura este utilizat un dispozitiv numit senzor. Senzorul este un dispozitiv care măsoară o cantitate fizică și o convertește în semnal care poate fi citit de un observator sau de un instrument. De exemplu, un termometru cu mercur convertește temperatura măsurată în expansiune și contracție a unui lichid, care poate fi citit pe un tub de sticlă calibrat. Pentru acuratețe toți senzorii trebuie să fie etalonați față de standardele cunoscute. Senzorii de temperatură semiconductori, în funcție de tipurile de semnale de ieșire pe care le produc, sunt de trei feluri: analogic, logic, digital. Ei măsoară de asemenea temperatura în două moduri: pe plan intern (senzori de contact) sau de la distanță (senzori noncontact).[7]

Un senzor de temperatură de contact este format din următoarele părți componente:

1.Un element senzitiv – un material care modifică caracteristicile in funcție de temperatură. Materialul trebuie să aibă temperatura specifică mică, conductivitate termică ridicată, senzitivitate mare la temperatură și o bună predictibilitate.

2.Contacte- sunt fire sau plăci conductive care asigura legatura intre elementul senzitiv și circuitul electronic exterior. Acestea trebuie să aibă o conductivitate termică și o rezistență electrică cât mai mici. Ele se folosesc si pentru susținerea senzorului.

3.Un strat protector- acesta separă fizic elementul senzitiv de mediul exterior. Materialul protector trebuie să aibă rezistență termică mică, să fie un bun izolator electric și să fie impermeabil.

Un senzor de temperatură de tip noncontact se aseamănă în principiu cu senzorii de tip contact, excepție făcând modul de transfer a căldurii: la senzorii de tip contact transferul se face prin conducție termică, în timp ce la cei de tip noncontact transferul se face prin radiație termică.

Temperatura unui corp, fie el solid, lichid sau gazos, se poate determina pe baza influentei pe care aceasta o are asupra unei proprietati corpului respectiv sau a altui corp pus in contact cu el, acesta din urma fiind reprezentat de senzorul de temperatura.

Unele dintre marimile ce sunt influentate de temperatura sunt:

Rezistenta electrica;

Tensiunea termoelectromotoare;

Intensitatea radiatiilor termice;

Etc.

Tipuri de senzori de temperatura:

Senzorii de tip termogenerator – sunt senzori termoelectrici a caror functionare se bazeaza pe aparitia unei tensiuni termoelectromotoare intre capetele libere a doi electrozi sudati la un capat (fig. 2.2).

Elementele componente ale senzorului termogenerator sunt:

Structura principala – a;

Protectia termocuplului cu o teaca – b;

Electrozi – A,B;

Termocuplu – 1;

Teaca de protectie – 2;

Tensiune termoelectromotoare – EAB;

Temperaturi in zona sudului – T;

Temperaturi la capetele reci – T0.

Fig.2.2.

Tensiunea termoelectromotoare EAB are urmatoarea expresie de calcul:

EAB= aAB (T-T0);

unde aAB este sensibilitatea medie a termocuplului.

EAB se datoreaza concentratiei diferite de electroni liberi in cele doua metale A si B.

Din punct de vedere dinamic, transferul termic asociat unui termocuplu se poate descrie prin urmatoarea ecuatie diferentiala:

a + E = aAB (T-T0);

unde constanta de timp “a” este ordinul (10-80 secunde).

Termocuplul este un senzor care genereaza o tensiune termoelectromotoare. El este un senzor de tip generator.

Senzorii de tip termorezistiv(termorezistentele) – sunt senzori a caror functionare se bazeaza pe dependenta rezistentei electrice fata de temperatura.

Termorezistentele sunt realizate dintr-un fir de metal pur (platina, cupru, nichel, fier, Wolfram) bobinat neinductiv, pe un suport izolator si introdus intr-o teaca de protective (fig.2.3).

Elementele componente ale senzorului de temperatura termoparametric:

Fir bobinat neinductiv – 1;

Suport izolator pentru bobina – 2;

Teaca – 3.

Fig.2.3.

Pentru senzorii de tip termorezistiv se poate considera dependent intre rezistenta si temperature, cu o buna aproximatie, ca fiind de tip liniar, si anume:

RT= RT0 1+a(T-T0 ),

unde RT – rezistenta la temperatura T;

RT0 – rezistenta la temperatura de referinta T0;

a – coeficient de sensibilitate specific materialului.

Termorezistenta este un senzor de tip parametric. Parametrul care se modifica in raport cu temperatura este rezistenta electrica.[8]

Capitolul III

Elemente hardware pentru realizarea proiectului

3.1. Placa de dezvoltare Raspberry Pi

Raspberry Pi a fost dezvoltat în Marea Britanie de către Raspberry Pi Foundation care au avut ca scop crearea unui PC cu costuri reduse, în scopul folosirii acestuia în școli sau pentru programatori începători. Platforma de dezvoltare Raspberry Pi are dimensiuni reduse și rulează un sistem de operare bazat pe Linux. Raspberry Pi se bazează pe un cip BCM2835 și nu are implementat un sistem de stocare, cum ar fi hard disk sau solid-state, acesta folosind carduri de memorie SD, de pe care se încarcă sistemul de operare și pe care se pot stoca pe termen lung informațiile.

Pentru a alimenta Raspberry Pi este nevoie de o alimentare externă de 5V care se conectează prin portul micro-USB. Alimentarea se poate face și cu ajutorul a patru baterii AA sau direct prin pinii GPIO. Însă ce cantitate de curent (mA) necesită Raspberry Pi depinde de perifericile conectate la el. În general Raspberry Pi folosește 500mA fără periferice, iar cu perifericile conectate poate ajunge la un consum de 1200mA. Pentru a conecta un dispozitiv la portul USB care consuma mai mult de 1000mA, este nevoie ca dispozitivul să fie conectat la un hub USB cu alimentare externă.[9]

3.1.1. Limbaje de programare ale plăcuței de dezvoltare Raspberry Pi

Sistemul de operare al Raspberry Pi este o variantă modificată de Linux. Sunt disponibile variantele: „Raspbian” (bazat pe Debian), „Pidora” (bazat pe Fedora), „Raspbmc” (dezvoltat pentru a folosi raspberry pi ca un Media Center conectat la un HDTV). De asemenea este disponibil și RISCOS ce nu este bazat pe o distribuție de Linux.

Raspberry Pi conține o platformă software foarte flexibilă, de aceea se pot folosi numeroase limbaje de programare. În programarea plăcii de dezvoltare se pot folosi următoarele limbaje de programare:

Python – Este un limbaj de programare foarte popular, oferind posibilitatea programării structurale, dar și orientate pe obiecte, incluzând elemente din paradigma funcțională. Acest limbaj de programare vine în distribuția de Linux originală a plăcii. Python este recomandat chiar de dezvoltatorii plăcii Raspberry Pi.

Jquery – Este o platformă de dezvoltare JavaScript, concepută pentru a ușura și îmbunătății cereri de tip AJAX, pentru manipularea mai bună a elementelor CSS, înregistrarea și modificarea evenimentelor din browser și multe alte probleme specifice programării web.

Java – Limbajul Java este un limbaj de programare de nivel înalt dezvoltat de JavaSoft din cadrul companiei Sun Microsystems. Java moștenește o mare parte din sintaxa C++. Spre deosebire de C++ acest limbaj este în întregime orientat pe obiecte. Java este cel mai de succes limbaj pe piața actuală de software și acest lucru se datorează simplității acestuia, robusteții dar și faptului că este independent de platformă (Linux, Windows).

Perl – Practical Extraction and Report Language prescurtat PERL este un limbaj creat de Lary Wall în 1987. Perl este la fel de puternic și prietenos ca și limbajul C. Multe trăsături ale limbajului Perl au fost împrumutate din limbajul C. Limbajul Perl a fost creat pentru prelucrarea și accesarea textelor mari, obținerea dinamicii datelor, devenind cel mai puternic limbaj în manipularea textelor și a expresiilor regulate. Mulți programatori consideră că acest limbaj este ideal pentru scripturile Web.

Erlang – Limbajul Erlang a fost proiectat la Ericsson Computer Science în anul 1980, după care în anul 1998 a fost lansat pe piață ca fiind open source. Erlang a fost conceput cu scopul de a îmbunătăți aplicațiile de telefon, versiunea inițială fiind implementata în Prolog. Spre deosebire de alte limbaje de programare, cum ar fi C/C++, Java, Erlang este un limbaj de programare pur funcțional, ceea ce înseamnă ca totul în Erlang se compune din funcții.[10]

C – Limbajul de programare C a fost dezvoltat de Ken Thompson și Dennis Ritchie și a fost lansat la începutul anilor 1970. La ora actuală limbajul C este unul foarte cunoscut și în general este folosit la scrierea de sisteme software. Sintaxa limbajului C stă la baza multor limbaje de programare: C++, JavaScript, Java.

C++ – Limbajul de programare C++ nu este un limbaj de nivel înalt și nu este specializat într-un domeniu de aplicație. Limbajul C++ a fost creat de Bjarne Stroustrup și are la bază limbajul C. În jurul anului 1980 acesta a primit o serie de îmbunătățiri, astfel în 1990 a devenit unul dintre cele mai populare limbaje de programare.

Scratch – Scratch este un limbaj de programare care a fost creat pentru a încuraja copiii să învețe tainele programării. Acest limbaj vine odată cu distribuția de Linux și a fost creat de către grupul Lifeling Kindergarten.[11]

3.2. Arhitectura hardware Raspberry Pi

Raspberry Pi este disponibil în doua configurații hardware, modelul A și modelul B. Diferențele între cele două modele sunt: memoria mai mică, un singur port USB și lipsa portului Ethernet în cazul Modelului A. Ca și consum energetic Modelul A necesită o treime din curentul utilizat de Modelul B, ceea ce îl face recomandabil pentru proiecte pe baterii sau energie solară.

Specificații tehnice Raspberry Pi Model A

Fig. 3.1.

– Broadcom BCM2835 ce integrează un CPU ARM v6 și un GPU Broadcom VideoCore IV ambele optimizate cu eficiență energetică;

– SDRAM 256Mb;

– Un port USB;

– Un port pentru ieșire Video Compozit;

– Un port pentru ieșire audio analog. Conector de 3.5mm;

– Un port HDMI;

– Un port pentru card SD, MMC, SDIO;

– Un port de alimentare micro usb;

– 26 pini cu distanță între pini 2.54mm, pentru conexiunea plăcilor de extensie sau accesul la diferite magistrale. Aceștia sunt numiți pini GPIO (General Purpose Input/Output- Intrări / Ieșiri controlate de software-ul ce rulează pe Raspberry Pi);

– port CSI-2, pentru conexiunea camerei foto.

Specificații tehnice Raspberry Pi Model B:

Fig. 3.2.

– Broadcom BCM2835 ce integrează un CPU ARM v6 și un GPU Broadcom VideoCore IV ambele optimizate cu eficiență energetică;

– SDRAM 512Mb;

– 2 port-uri USB ;

– Un port Ethernet 10/100Mb pentru conexiunea la internet;

– Un port pentru ieșire Video Compozit;

– Un port pentru ieșire audio analog. Conector de 3.5mm;

– Un port HDMI;

– Un port pentru card SD, MMC, SDIO;

– Un port de alimentare micro usb ;

– 26 pini cu distanță între pini 2.54mm, pentru conexiunea plăcilor de extensie sau accesul la diferite magistrale. Aceștia sunt numiți pini GPIO (General Purpose Input/Output- Intrări / Ieșiri controlate de software-ul ce rulează pe Raspberry Pi)

– port CSI-2, pentru conexiunea cameri foto.

Placa de dezvoltare Raspberry Pi are 26 de pini de acces situați în partea stânga sus a placuței. Numerotarea pinilor începe de la P1 (pinul 1) care are 3.3V (50mA maxim), pinul 2 are 5V.[12]

Fig. 3.3.

Fig. 3.4.

Pinii care sunt de culoare verde, la număr 17 pini, pot fi configurați ca intrari sau ieșiri, în mod implicit toți acești pini sunt configurați ca intrări, cu excepția GPIO 14 și GPIO 15. În scopul utilizării acestor pini trebuie să i se spună sistemului dacă acestea sunt intrări sau ieșiri. Acest lucru poate fi realizat cu un limbaj de programare la alegere, însă limbajul recomandat de Raspberry Pi Foundation este Python. Ieșirile nu au capacitate de curent mare, însă pot comanda un LED sau alte dispozitive ce necesită puțin curent.

Broadcom-ul BCM2835 încorporează un processor ARM1176. Procesoarele ARM sunt procesoare ieftine de înaltă performanță ce se utilizează la telefoane inteligente, televizoare SMART și alte dispozitive media.

Acest procesor are o particularitate aparte, el fiind optimizat pentru eficiența energetică. Pastila procesorului conține atât UCP cât și procesorul video (VideoCore IV) și memoria RAM. Procesorul video are capacitatea de a reda calitate BluRay, folosind H.264 la 40MBits/s. Acest procesor lucrează la o frecvență de 250Mhz, însă această frecvență nu este limita lui, ea poate fi ridicată până la 500Mhz, dar în acest caz este nevoie de un sistem de răcire activ pentru a nu distruge procesorul. Procesorul dispune de acces rapid la 3D core folosind bibliotecile OpenGL ES2.0 și OpenVG. Este capabil de 1Gpixel/s, 1.5Gtexel/s sau 24Gflops și dispune de multe filtre de textură și de infrastructură DMA.

ARM-ul este un calculator de 32 de biți cu o arhitectură bazată pe instrucțiuni (ISA-Instruction Set Architecture), care lucrează cu instrucțiuni RISC (Reduced Instruction Set Computer).

Arhitectura hardware a fost concepută pentru procesoare pe computer desktop de Acorn Computers. În prezent arhitectura ARM poate fi folosită și de alți producători sub licența companiei deținătoare. Cele mai cunoscute serii de procesoare ARM sunt: ARM7, ARM9, ARM11 și Cortex. Arhitectura care stă la baza procesorului BCM2835 face parte din seria ARM11.

Procesorul BCM2835 în mod normal lucrează la o frecvență de 700Mhz însă limita maximă este de 1000Mhz. Această limită poate fi atinsă doar cu creșterea tensiunii de alimentare și construcția unui sistem de răcire pentru a face față temperaturii ridicate.

Componentele interne ale procesorului:

– Timere

– Controler de întreruperi

– GPIO

– USB

– PCM/I2S

– DMA (Direct Memory Acces) controller

– I2C master

– I2C/SPI slave

– SPI0, SPI1, SPI2

– PWM

– UART0, UART1

3.3. Camera video Raspberry Pi

Camera Raspberry Pi se conecteaza la portul CSI-2 cu ajutorul unui cablu panglică. Acesta oferă conectivitate pentru o cameră ce are capacitatea de a captura imagini sau înregistrări video.

Fig. 3.5.

Camera se conectează la Image System Pipeline (ISP), unde datele de intrare sunt procesate și în cele din urmă convertite într-o imagine sau video. Pentru a funcționa camera are nevoie de 250mA.

Specificațiile hardware Raspberry Pi Camera:

modul camera 5MP Omnivision 5647;

conector serial 15-pin MIPI;

video 1080p / 30fps , 720p / 60fps și 640x480p 60/90;

compatibilă cu modelul A și B;

dimensiune 20 x 25 x 9 mm;

greutate 3 g.

Modulul camerei este capabil să înregistreze fotografii de până la 5 megapixeli (2592×1944 pixeli) și poate înregistra video la o rezoluție de până la 1080p30 (1920x1080x30fps). Modulul camerei suportă capturarea imaginilor RAW, imaginilor comprimate JPEG, PNG, GIF, BMP sau imagini necomprimate YUV și RGB. Se poate înregistra video H.264.

Pentru o bună funcționalitate a camerei este nevoie să instalăm cel mai recent kernel, firmware și GPU-ul aplicației. Pentru a face acest lucru avem nevoie de o conexiune la internet și să folosim comanda „sudo apt-get update”. Pentru a verifica dacă sistemul lucrează în parametrii normali folosim comanda „raspistill-v-o test.jpg”, display-ul ar trebui să arate 5 secunde video și după să înregistreze o imagine, salvată ca test.jpg.

În mod implicit imaginile capturate sunt efectuate la cea mai mare rezoluție, dar acest lucru se poate schimba cu ajutorul (width și height) prin comanda „raspistill-t 2000 –o image.jpg –w640 –h480” sau există posibilitatea de a captura imagini cu o calitate mai mică pentru a reduce dimensiunea fișierului, acest lucru fiind posibil cu comanda „raspistill-t 2000-o image.jpg –q5”.

Optiuni control camera

Setati claritatea imaginii, implicit valoarea este „0”

–sharpness, -sh de la (-100 la 100)

Setati contrastul imaginii, implicit valoarea este „0”

–contrast, -co de la (-100 la 100)

Setati luminozitatea imaginii, 50 este valoarea implicita. Valoarea „0” este negru, valoarea „100” este de culoarea alba.

–brightness, -br de la (0 la 100)

Setati saturatia culorilor imaginii. Valoarea „0” este implicit

–saturation, -sa de la (-100 la 100)

Setati ISO pentru a fi utilizata la captura. Intervalul este 100-800

–ISO, -ISO de la (100 la 800)

Setati doar in mod video, stabilizarea imaginii

–vstab, -vs

Setati compresia EV a imaginii. Gama este de -10 la 10, implicit are valoarea „0”

–ev, -ev[13]

3.4. Relee pentru Raspberry Pi

Releul este un mecanism electromecanic care are posibilitatea de a transforma un semnal electric într-o mișcare mecanică. Releul este compus dintr-o bobină și o armătură metalică și există posibilitatea să aibă unul sau mai multe contacte. În clipa în care bobinei îi este aplicată o tensiune, se produce un câmp magnetic care mișcă armătura metalică permițând închiderea sau deschiderea unui circuit. În zilele noastre releele sunt prezente în diferite domenii, cum ar fi: automobile, comunicații, instalații automatizate.

Pentru Raspberry Pi există plăci cu relee dedicate, cum ar fi această placă cu 2 relee din imaginea de mai jos.

Fig. 3.6.

Releul se conectează la pinul de 5V (pinul nr.2) și la pinul Ground (pinul nr.6) din Raspberry Pi. Plăcuța trebuie conectată și la un pin GPIO la alegere pentru a comanda releul. Trebuie menționat faptul că plăcuța nu solicită deloc pinii GPIO din punct de vedere al curentului.

Specificații tehnice:

– Comanda 5V;

– 250/10A;

– 2 relee Omron G5LE-14-DC5;

– Greutate 33g.

Fig. 3.7.

Bobinele de releu sunt alimentate cu 5V prin VDD și GND (ground). Acestea sunt comandate prin semnal digital în pinii EN1 (comandă releul 1) și EN2 (comandă releul 2). Semnalele de control acționează bobinele releului când tensiunea semnalului este mai mare de 2.5V. Terminalele de comutare a releului sunt COM1 și COM2 (comun), NO1 și NO2 (normal deschis), NC1 și NC2 (normal închis). [14]

3.5. Schema conexiunilor dintre componentele periferice

Pentru construcția sistemului a fost nevoie de placa de dezvoltare Raspberry Pi, o cameră Raspberry, o plăcuță cu două relee dedicate pentru Raspberry Pi, un LED, un buton cu revenire, un card SD și o boxă audio.

Fig. 4.1.

Sistemul construit trebuie să monitorizeze temperatura unui server sau a unei camere de servere, iar dacă temperatura începe să crească și ajunge la o anumită valoare, sistemul trebuie să declanșeze o alarma sonoră. Monitorizarea temperaturii am simulat-o cu ajutorul temperaturii procesorului Raspberry Pi. Alarma se va declanșa în momentul în care temperatura procesorului va ajunge la o valoare setată în prealabil de către mine.

Pentru a nu pătrunde în încăperea serverelor persoane neautorizate, am realizat un sistem de acces control bazat pe recunoaștere facială. Recunoașterea feței se face cu ajutorul camerei Raspberry Pi. Dacă persoana este neautorizată, accesul în încăpere este interzis. Dacă persoana este autorizată accesul se va face prin comanda către releu, care va deschide ușa. Pentru deschiderea ușii este nevoie de o yală electrică, pe care am simulat-o cu ajutorul unui LED. În momentul în care accesul este interzis LED-ul va rămâne stins, iar când accesul este autorizat, LED-ul va primi comanda de la releu și se va aprinde.

Releul se alimentează direct din Raspberry Pi, mai exact din pinul 2 (5V) și din pinul 6 (ground). Releul primește comanda de la Raspberry Pi prin pinul GPIO 23 care este conectat la releu prin pinul EN1 (comanda releu1).

Fig. 4.2.

Ledurile (Light Emitting Diode) sunt realizate prin doparea unui element semiconductor în scopul realizării unei joncțiuni p-n. În timpul în care trece curent prin joncțiune se eliberează energia sub forma de fotoni și astfel se emite lumina.

În esență, ledurile sunt niște diode care conduc curentul într-un singur sens și în acest caz este nevoie de polarizarea lor corect.

Ledul conține 2 pini, anod (0V) și catod (+U). Anodul este conectat la releu, la pinul NO1 (normal deschis), iar catodul la pinul VDD (alimentare tensiune). În momentul în care se dă comanda la releu prin pinul EN1, acesta închide circuitul rezultând aprinderea ledului.[15]

Fig. 4.3.

Butonul reprezintă cel mai simplu sistem de intrare. Un buton este capabil să tragă în „0” logic sau „1” logic un pin de intrare, astfel arătând sistemului o comandă. La rândul său pinul se poate configura în 2 moduri: DDRxy=0, PORTxy=1.

Atunci când butonul nu este apăsat, prin rezistență va trece o tensiune înaltă către pinul GPIO 17, iar la citire pinul GPIO 17 va indica valoarea „1” logic. Atunci când butonul este apăsat, pinul GPIO 17 va fi conectat la GND (ground) și la citire va indica „0” logic. Astfel prin diferența de tensiune aplicată pinului GPIO 17 putem știi dacă butonul este apăsat sau nu.

Fig. 4.4.

Camera Raspberry Pi este conectata la placa de dezvoltare cu ajutorul cabluilui panglica format din 15 conectori. Portul unde este conectata camera se numeste portul CSI-2, situat intre porturile Ethernet si HDMI.

Portul CSI este standard pentru interfata seriala, la ora actual mai exista un port CSI-2 care este folosit la aproape toate dispozitivele. Camera Raspberry Pi este de 5Mp si dispune de o rezolutie ridicata, cantitatea de date trebuie sa fie transferata de la senzorul camerei la procesorul gazda. CSI-2 a fost dezvoltat de Alianta MIPI pentru a rezolva o serie de problem care apar atunci cand cantitatri mari de date trebuie sa fie transferate intre camera si processor.

Portul CSI-2 permite inginerilor si dezvoltatorilor de a integra tehnologia camerei la orice processor, cum ar fi procesorul de la Raspberry Pi care suporta interfata MIPI. Interfata CSI-2 consta in doua interfete mai mici. Prima interfata este pentru schimbul de date si de semnale de ceas, care sunt uni-directionale. Cea de a doua interfata este pentru scopuri de control SCL/SDA si este bidirectionala.

Capitolul IV

Elementele software folosite in realizarea sistemului

4.1. Sisteme de operare care pot fi implementate pe sistemul de dezvoltare Raspberry Pi

Exista o multitudine de sisteme de operare valabile pentru Raspberry Pi:

-Raspbian

-NetBSD

-Plan 9

-ArchLinux

-XBMC

-Pidora

-RISC OS

-Android

-Gentoo Linux

Sistemul de operare adoptat pentru realizarea proiectului

Cel mai folosit si complex sistem de operare este Raspbian, el vine cu peste 35.000 pachete fata de RaspBMC care are aproximativ 20.000 de pachete si este urmat de ArchLinux cu aproximativ 4.600 de pachete.

Pentru dezvoltarea aplicatiei de monitorizare a temperaturii si acces contol, am folosit un sistem de operare Raspbian. Sistemul de operare Raspbian este unul garatuit bazat pe Debian, optimizat pentru hardware-ul Raspberry Pi. Raspbian ofera mai mult decat un sistem de operare el vine cu peste 35.000 de pachete, optimizat pentru cea mai buna performanta de pe Raspberry Pi.

Pentru a folosi sistemul de operare Raspbian este nevoie de descarcarea imaginii sistemului si copierea acesteia pe un card SD/MMC. Descarcarea imaginii Raspbian se face de pe pagina oficiala iar imaginea descarcata este un fisier zip, se dezarhiveaza fisierul pentru a extrage imaginea Raspbian.

Este recomandat sa se foloseasca un card SD clasa 10, cu memorie de minim 4Gb. Inainte de copiere trebuie sa formatam cardul in FAT32. Pentru introducerea imaginii Raspbian am folosit o aplicatie numita win32diskimager. Introducem in caseta de dialog calea unde se afla imaginea Raspbian, selectam unde vrem sa se scrie imaginea Raspbian, in cazul nostru pe cardul SD. Dupa selectarea acestor parametrii apasam butonul „write”.

Dupa ce procesul de scriere este terminat, extragem cardul SD si il conectam la Raspberry Pi. Softul este dependent de reteaua de internet, acest lucru inseamna ca pentru instalare trebuie sa ne asiguram o conectivitate la reteaua de internet, cu ajutorul portului Ethernet. Pachetele necesare pentru instalare se vor descarca automat.

Dupa introducerea cardului in slotul placii Raspbery Pi incepe incarcarea sistemului si se afiseaza o interfata de configurare.

In interfata de configurare avem urmatoarele functii:

-info

Informatii generale despre versiunea Raspbian incarcata pe cardul SD

-expand_rootfs

Initial imaginea sistemul de operare ocupa 2Gb. Cand se copiaza imaginea pe un card SD mai mare restul cardului este nefolosit. Aceasta optiune extinde imaginea initiala pentru a umple restul cardului SD.

-overscan

Este folosit pentru a modifica marginea imaginii redate prin portul video analogic. Overscan va face ca imaginea sa umple tot ecranul si va corecta rezolutia. Orice modificare va intra in vigoare doar dupa restartarea sistemului.

-configure-keyboard

Aceasta optiune selecteaza tastatura utilizata, astfel incat caracterele tastaturii sunt aceleasi cu cele tastate.

-change_pass

Utilizatorul implicit pentru Raspbian este „pi” iar parola „raspberry”. Aceasta optiune permite schimbarea parolei si utilizatorului, pentru a spori securitatea sistemului.

-change_locale

Setarea implicita este en_GB UTF-8. Aceasta optiune selecteaza caracterele si simbolurile afisate pe ecran si este importanta daca vrem sa utilizam cele non-engleza.

-change_timezone

Aceasta optiune permite configurarea ceasul sistemului. Raspberry Pi nu are un ceas de bord astfel incat ceasul se opreste atunci cand se opreste si sistemul. Daca sunteti conectati la internet, Raspberry Pi poate fi configurat pentru a obtine ora exacta direct de pe internet.

-memory_split

Raspberry Pi are doua procesoare, unul pentru sarcini de calcul (CPU) si unul pentru sarcinile grafice (GPU). CPU-ul este descris ca ARM si GPU-ul ca VideoCore. Aceasta versiune tine seama de 256Mb/512Mb placii si permite o realocare dinamica de memorie. Aceasta optiune este utila atunci cand un procesor este folosit intens iar celalalt nu este folosit.

-ssh

Activarea ssh va permite conectarea la Raspberry Pi de la alt dispozitiv, cu conditia ca dispozitivul sa fie conectat la o retea. Nu este nevoie de conectarea unui monitor sau a unei tastaturi la Raspberry Pi.

-boot_behaviour

In mod implicit la pornirea Raspbian, acesta porneste in linei de comanda, folosind aceasta optiune utilizatorul are posibilitatea de a seta sistemul de operare sa porneasca cu interfata grafica.

-update

Cu ajutorul acestei optiuni utilizatorul are posibilitatea de a verifica daca versiunea de raspi-config este cea mai recenta, dar poate si actualiza versiunea. Pentru actualizare este nevoie de o conexiune la internet.[16]

4.2. Modulul Python RPIO

Modulul Python RPIO extinde libraria Raspberry GPIO si foloseste schema numerica BCM GPIO.

Principalele functii ale modulului sunt:

Intreruperi GPIO

Intreruperi Socket TCP

Intrari si iesiri GPIO

Hardware PWM

Intreruperi GPIO si TCP

Modulul RPIO raspunde la 2 tipuri de intreruperi GPIO si TCP. Intreruperile de tip GPIO apar in momentul modificarii valorii de intrare a pinilor. Intreruperile de tip TCP apar cand clientul TCP trimite un mesaj.

Functia RPIO.wait_for_interrupts()

Acesta este principala functie de tip bucla si atat timp cat este activa o sa astepte intreruperile pe pinii GPIO. Aceasta metoda de blocare poate fi si de tipul bucla infinita, mentinand scriptul nostru activ.

Intreruperi GPIO

Intreruperile sunt folosite pentru a receptiona notificarile din kernel cand starea pinilor GPIO se modifica. Avantajele acestor intreruperi sunt reprezentate de scaderea consumului pe procesor si notificarile foarte rapide.

Functia RPIO.add_interrupt_callback()

Adauga o functie callback pentru a primi notificari cand GPIO isi schimba starea din 0 in 1 si invers. .Daca “threaded_callback” este adevarat ,functia callback o sa porneasca in interioriul programului ,daca nu functia callback o sa blocheze pinii GPIO in asteptarea intreruperilor.

Daca “debounce_timeout_ms” este setat functia callback nu o sa ruleze pana cand nu o sa treaca un timp specificat de la ultima intrerupere (acest timp dureaza de obicei intre 10 si 100 ms). Functia callback primeste de obicei 2 argumente: numarul pinului GPIO si o valoarea de tip integer (0 = low si 1 = high).

Intreruperile socket TCP

Folosind doar o singura metoda ,este foarte usor sa deschidem porturile pentru eventualele conexiuni de tip TCP.

Functia RPIO.add_tcp_callback()

Se foloseste pentru a adauga o functie callback, ce ruleaza in momentul in care socketul primeste continut de la un client. Acesta este implementat de RPIO prin creearea unui server TCP la un port specific.

Conexiunile de intare sunt acceptate doar cand “RPIO.wait_for_interrupts()” ruleaza.

Functia callback trebuie sa primeasaca exact 2 parametrii: socket si mesaje.

Pentru a inchide conexiunea unui client folosim”RPIO.close_tcp_client()”.

Un client poate inchide conexiunea in acelasi mod sau prin a trimite un mesaj gol catre server.

Pentru a afla adresa de IP a clientului folosim functia “socket.getpeername()”. Intreruperile TCP se pot testa cu “$ telnet <ip> <port>”.

Functia ”RPIO.close_tcp_client(self,fileno)” inchide conexiunea clientului si il sterge din istoric. Se poate apela si din functia callback folosind “RPIO.close_tcp_client(socket.fileno()”.

4.2.1. Alte module necesare pentru Python

Python-ul este un limbaj de programare foarte popular, oferind posibilitatea programării structurale, dar și orientate pe obiecte, incluzând elemente din paradigma funcțională. Acest limbaj de programare vine în distribuția de Linux originală a plăcii. In distributia de Linux sunt deja instalate cateva module Python, insa pentru a nu avea probleme este nevoie sa fie instalate toate module Python. Acest lucru este posibil prin tastarea in linie de comanda urmatoarele instructiuni:

sudo apt-get install python

sudo apt-get install python-dev

sudo apt-get install libjpeg-dev

sudo apt-get install libfreetype6-dev

sudo apt-get install python-setuptools

sudo apt-get install python-pip

Este nevoie de a instala pinii GPIO impreuna cu alte module.

Sudo pip install RPI.GPIO

Sudo pip install pySerial

Sudo pip install nose

Sudo pip install cmd2

Pentru a putea sterge anumite module se foloseste comanda:

apt-get –purge remove {numele modulului}

Pentru a putea vizualiza toate module instalate se foloseste comanda:

pip freeze –local

Daca se doreste instalarea unui anumit modul Python si nu este cunoscut numele intreg a modului, exista posibilitatea de a cauta modulul dupa anuminte cuvinte cheie.

apt-cache search „text”

apt-cache search „text” | grep „mai mult text” [17]

4.3. Libraria OpenCV

Libraria OpenCV (Open Source Computer Vision), dezvoltata de Intel in 1999, se focuseaza pe procesarea imaginii in timp real si include licenta gratuita pentru ultimele versiuni de algoritmi. In 2008 Willow Garage a preluat OpenCV 2.3.1 si acum vine cu o interfata de programare in: C, C++, Python si Android. Libraria OpenCV este lansata sub licenta BSD, si poate fi folosita in proiecte academice sau produse comerciale.[19]

Algoritmii de recunoastere facial disponibili in prezent sunt:

Eigenfaces

Fisherfaces

Local Binary Patterns Histograms

Recunoasterea faciala se bazeaza pe caracteristicile geometrice ale unui chip. Unul dintre primele sisteme de automatizate ale recunoasteri faciale a fost descris in noiembrie 1973, punctele de marcare au fost (pozitia ochilor, urechi,nas), aceste puncte de marcare au fost folosite pentru crearea unui vector (distant intre puncte, unghiul dintre ele).

Recunoasterea fetei a fost efectuata prin calcularea distantei euclidiene dintre vectori si imaginea de referinta. Aceasta metoda este sensibila la diferentele de lumina si prezinta un dezavantaj important atunci cand trebuie sa inregistreze corect punctele de marcare.

4.4. Algoritmul de recunoastere faciala Eigenfaces

Conceptul de baza al metodei Eigenfaces este reprezentat de reducerea informatiilor, acest lucru insemnand obtinerea cantitatilor mari de informative dintr-o imagine mica. Ca intrari avem un set de invatare si un set de testare. In setul de invatare sunt imagini etichetate iar in setul de testare sunt imagini neetichetate.

Algoritmul conceput de Turk si Pentlan are ca scop de a sustrage informatiile benefice din imaginea fetei. Informatiile extrase se codifica si se compara cu modelele deja existente intr-o baza de date. Modelele din baza de date existente sunt codificate similar. In baza de date sunt prezente imagini cu dimensiune de 100x100pixeli, fiecare imagine este transformata intr-un vector prin concatenarea coloanelor corespunzatoare.

Problemele cu reprezentarea imaginii sunt date de catre dimensiunea ridicata. O imagine bidimesionala cu “P” randuri si “Q” coloane de pixeli poate fi vazuta ca un singur vector dimensional PxQ.

Descrierea algoritmului:

Fie X={x1, x2,…..xn} un vector la alegere

1. Se calculeaza media

2. Se calculculeaza covarianta matricei S

3. Calculul valorilor si vectorilor din

4. Ordonarea vectorilor descrescator dupa valoarea lor.

unde

Reconstructia din baza PCA este data de:

unde

Metoda Eigenfaces efectueaza recunoasterea fetei dupa:

-Proiectarea setului de invatare in subspatiul PCA

-Proiectarea setului de antrenare in subspatiul OCA

-Gasirea numitorului comun dintre imaginile din setul de invatare si setul de antrenare.

Insa mai exista o problema de rezolvat, daca avem 400 de imagini in setul de antrenare care au dimensiune de 100×100 pixeli va rezulta in final o matrice de dimensiune 10000×10000, asta insemnand aproximativ 0.8Gb date. Pentru a rezolva aceasta problema am folosit un truc din algebra, stiind ca matricea M x N cu M > N poate avea N – 1 valori proprii. Putem sa descompunem valorile proprii.

poate fi scris si altfel:  de dimensiune  

Si obtinem vectori proprii din inmultim in stanga matricei: [18]

Vectorii proprii rezultati sunt ortogonali.

Am folosit o harta de culori, astfel incat sa putem vedea modul in care sunt distribuite valorile in tonuri de gri in Eigenfaces. Putem vedea ca Eigenfaces nu codifica numai trasaturile faciale dar de asemenea si iluminarea imaginii.

Pentru ca 10 vectori proprii nu sunt suficienti pentru o recunoastere buna a imaginii, doar la 50 de vectori proprii putem codifica caracteristicile importate ale fetei. O recunostere faciala exacta se face cand sunt implementati aproximativ 300 de vectorii proprii.[20]

4.5. Documentarea codului sursa pentru control acces

Importul librarii OpenCV(cv2) folosita la recunoasterea faciala

import cv2

Fisierul de configurare in care avem principalii parametrii de rulare a aplicatiei

import config (vezi anexa 1)

Fisierul in care este implementata libraria OpenCV

import face (vezi anexa 2)

Fisierul in care sunt implementate functiile pentru controlul releului si a butonului

import hardware (vezi anexa 3)

Libraria de sunet

import pygame

Functia play() primeste ca argument numele fisierului audio

def play(soundname):

pygame.mixer.init()

pygame.mixer.music.load(soundname)

pygame.mixer.music.play()

while pygame.mixer.music.get_busy() == True:

continue

Functia principala care se executa automat la rularea programului

if __name__ == '__main__':

La rularea programului incarcam datele de training necesare pentru recunoasterea faciala. Se afiseaza mesajul 'Loading training data…' in linia de comanda pentru a informa utilizatorul ca programul este in curs de incarcare.

print 'Loading training data…'

Informam, prin intermediul boxei conectate la portul audio si librariei pygame, utilizatorul sa astepte cat timp programul se incarca.

play("sounds/pleasehold.wav")

Instantiaza libraria de recunoastere a fetei, incarca imaginile de training si afiseaza in consola 'Training data loaded!' dupa finalizarea executiei.

model = cv2.createEigenFaceRecognizer()

model.load(config.TRAINING_FILE)

print 'Training data loaded!'

Initializeaza camera si releele

camera = config.get_camera()

box = hardware.Box()

La initializarea programului, usa se va incuia automat indiferent de starea in care se afla.

Aceasta este o masura de securitate, deoarece nu ne dorim ca usa sa ramana descuiata in cazul unei pene de tensiune. Pentru a verifica starea usii si a o incuia in cazul in care este descuiata folosim functia box.lock().

box.lock()

Afiseaza instructiunile de folosire in linia de comanda astfel incat utilizatorul sa stie care sunt comenzile disponibile.

print 'Running box…'

print 'Press button to lock (if unlocked), or unlock if the correct face is detected.'

print 'Press Ctrl-C to quit.'

while True:

Verificam daca butonul este apasat, in cazul in care butonul fizic este apasat verificam daca usa este descuiata sau incuiata si actionam in consecinta:

-daca usa este incuiata, vom capta, cu ajutorul camerei, fata utilizatorului si daca aceasta corespunde cu imaginile din setul de invatare, functia box.unlock() va descuia usa.

-daca usa este descuiata, cu ajutorul functiei box.lock() o vom incuia imediat.

if not box.is_locked:

Daca usa este descuiata, informam utilizatorul si o incuiem imediat.

box.lock()

print 'Door is now locked.'

else:

Daca usa este incuiata, incepem procedura de recunoastere a fetei.

Rugam, audio si vizual, utilizatorul sa stea nemiscat deoarece procedura de

recunoastere a fetei a inceput.

print 'Button pressed, looking for face…'

play("sounds/pleasehold.wav")

Initializam camera si captam imaginea utilizatorului

image = camera.read()

Convertim imaginea in alb negru

image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

Obtinem coordonatele fetei captate

result = face.detect_single(image)

if result is None:

In cazul in care scriptul nu poate detecta nici o fata sau detecteaza mai multe fete in imagine, informam utilizatorul sa repete procedura.

print 'Could not detect single face.'

continue

Cropeaza doar fata din imaginea captata

x, y, w, h = result

crop = face.resize(face.crop(image, x, y, w, h))

Compara imaginea detectata cu imaginile din setul de invatare si afisam in linia de comada valoarea punctelor comune.

label, confidence = model.predict(crop)

print 'Predicted {0} face with confidence {1} (lower is more confident).'.format(

'POSITIVE' if label == config.POSITIVE_LABEL else 'NEGATIVE',

confidence)

if label == config.POSITIVE_LABEL and confidence < config.POSITIVE_THRESHOLD:

Daca fata utilizatorului este recunoscuta descuiem usa si il informam, audio si vizual, faptu ca acesul ii este permis in incinta.

play("sounds/accessgranted.wav")

print 'Recognized face!'

print 'Door is now unlocked'

Folosim functia box.unlock() pentru a descuiem usa

box.unlock()

else:

Daca imaginea fetei nu se afla in setul de invatare, informam utilizatorul vizual si audio, ca accesul in incinta este interzis.

print 'Did not recognize face!'

play("sounds/accessdenied.wav")

4.6. Codul sursa pentru monitorizarea temperaturii

Importul librariei de timp

from time import sleep

Modulul „commands” contine functii utile pentru lucrul cu linia de comanda

import commands

Libraria de sunet

import pygame

Functia „get_cpu_temp()” citeste fisierul „sys/class/thermal/thermal_zone0/temp” din kernel si returneaza temperatura procesorului

def get_cpu_temp():

tempFile = open( "/sys/class/thermal/thermal_zone0/temp" )

cputemp = tempFile.read()

tempFile.close()

return float(cputemp)/1000

Functia „main()” se apeleaza automat la rularea scriptului si executa urmatoarele instructuni:

-citeste temperatura initiala a procesorului

-stabileste temperatura la care sa fie declansata alarma, la 1.2 grade C fata de temperatura initiala

-intr-o bucla infinita verifica temperatura curenta a procesorului si actioneaza dupa caz:

-daca temperatura curenta este mai mica decat temperatura la care este setata alarma, se va afisa pe ecran mesajul: „Temperatura curenta: temp_curenta”

-daca temperatura curenta este mai mare sau egala cu temperatura la care este setata alrma, se va declansa sirena si in linia de comanda se va afisa urmatorul mesaj:

„Atentie: ALARMA TEMPERATURA

Temperatura dupa load este: temp_curenta”

-bucla infinita are o intarziere setata la valoarea de 0,1s pentru a permite utilizatorului sa vada temperatura in timp real.

def main():

Preluarea temperaturii initiale

cpu_temp = float(get_cpu_temp())

Stabilim temperatura de alerta

alert_temp = float( cpu_temp + 1.2)

print 'Temperatura initiala este: ', cpu_temp;

Masuram temperatura constanta, pana cand ajungem la temperatura de alerta

while True:

temp_curenta = float(get_cpu_temp())

if temp_curenta >= alert_temp:

print 'Atentie: ALARMA TEMPERATURA'

print 'Temperatura dupa load este: ', temp_curenta

Avertizare sonora

pygame.mixer.init()

pygame.mixer.music.load("sounds/alarm.wav")

pygame.mixer.music.play()

while pygame.mixer.music.get_busy() == True:

continue

break

else:

print 'Temperatura curenta: ', temp_curenta

Intarzierea pentru a incetini scriptul

sleep(0.1)

if __name__ == '__main__':

main()

Rezumat

Ca o sinteză a acestui proiect pot spune că ceea ce am realizat de-a lungul întregii lucrări este proiectarea unui sistem de siguranță a control accesului bazat pe recunoașterea feței, dar și un sistem de monitorizare a temperaturii unui server. Acest sistem oferă utilizatorului o protecție antiefracție ridicată, avantajele folosirii tehnologiei biometrice și monitorizarea în timp real a temperaturii serverelui.

Am realizat sistemul cu ajutorul microcontrolerului Raspbery Pi la care s-au adăugat ca și periferice o cameră Raspbery Pi și o plăcuță cu relee. Monitorizarea temperaturii este realizată prin preluarea directă de pe senzorul UCP-ului a temperaturii și afișarea acesteia în terminal. Utilizatorul are posibilitatea de a seta o anumită valoare de referință a temperaturii, iar dacă această valoare este atinsă atunci va porni alarma sonoră.

Accesul în încăpere este restricționat cu ajutorul sistemului de recunoaștere a feței. Sistemul folosește o cameră capabilă de performanțe ridicate, iar scriptul este bazat pe metoda Eigenface. Metoda Eigenface este una dintre cele mai bune metode de recunoaștere a feței, acest lucru fiind posibil deoarece metoda Eigenface nu se bazează doar pe geometrie ci și pe fotometrie. Această metodă este deja folosită în Occident și a fost folosită și în Mexic la alegerile prezidențiale cu scopul de a împiedica fraudarea voturilor.

Acest sistem are avantajul de a oferi o siguranță sporită împotriva accesului persoanelor neautorizate. Tocmai de aceea, dar și datorită costurilor reduse, sistemul este considerat a fi perfect pentru companiile mari. Pe lângă costurile mici, acest sistem are avantajul de a putea fi utilizat și de a funcționa în parametrii normali cu un consum energetic relativ scăzut, el putând fi alimentat chiar și de la bateriile normale. Sistemul de protecție și de monitorizare a temperaturii reprezintă un sistem automatizat care dispune de performate ridicate, iar metodele de întrebuințare ale acestuia sunt nelimite.

Concluzii

În elaborarea acestui proiect ce constă în proiectarea hardware și software a unui sistem capabil să monitorizeze temperatura și să permită sau nu accesul persoanelor într-o încăpere, am realizat un studiu amplu asupra generalităților referitoare la servere, monitorizarea temperaturii și sisteme de securitate, cât și asupra unor lucruri mai puțin comune cum ar fi asocierea diferitelor componente ce alcătuiesc proiectul fizic.

Am realizat acest proiect cu scopul de a rezolva problema accesului persoanelor neautorizate, pentru a putea monitoriza temperatura din camera serverului, dar și pentru atenționarea asupra valorii crescute a temperaturii. Sistemul proiectat asigură o securitate sporită deoarece este realizat cu ajutorul unei metode de control acces bazată pe recunoașterea facială, a cărui avantaj este acela că utilizatorul deține cheia asupra lui întotdeauna.

În urma efectuării acestui proiect și pe baza cercetărilor personale asupra subiectului tratat, consider că sitemele de securitate biometrice și RFID (de proximitate) vor fi cele mai utilizate metode în viitorul apropiat. Tehnica de acces prin metode biometrice realizându-se prin analiza trăsăturilor anatomice.

Sistemele de securitate biometrice reprezintă o alternativă pentru sistemele clasice bazate pe coduri de bare, cartele magnetice, etc. Tehnologiile biometrice au câteva avantaje unice față de metodele tradiționale, de unde și interesul meu în folosirea acestor metode. Metodele biometrice se bazează pe identificarea unei anumite părți intrinseci, pe când sistemele clasice se bazează pe utilizarea de cartele magnetice sau chei fizice ce pot fi pierdute, multiplicate sau chiar furate.

Cea de-a doua sarcină în realizarea proiectului a fost să implementez funcția de monitorizare a temperaturii pentru protejarea camerei de server, pentru o funcționare fiabilă și o viață cât mai lungă a componentelor. Temperatura serverului am simulat-o cu ajutorul temperaturii procesorului Raspberry Pi, iar pentru monitorizarea temperaturii am creat un script care afișează în timp real temperatura și este capabil să pornească alarma atunci când ea crește cu mai mult de 1.2 °C față de valoarea de referință.

În ceea ce privește aspectele tehnico-economice, pot spune că tehnologia implicată în sistemele biometrice și în cele de monitorizare a temperaturii, este accesibilă destul de ușor datorită costurilor mici la care pot fi achizitionate componentele. Din acest motiv probabilitatea ca tehnologia să se răspândească rapid și pe o scară largă este ridicată.

În urma realizării acestui proiect am ajuns la concluzia că aș putea îmbunătăți sistemul de monitorizare a temperaturii prin conectarea sistemului la o rețea de internet, astfel putându-se accesa informații referitoare la temperatură fără limită geografică.

Consider că această metodă de asigurare a securității ar putea fi folosită pe viitor la protejarea diverselor obiective importante, însă pentru o securitate mai sporită recomand folosirea ei împreună cu o altă metodă biometrică, cum ar fi recunoașterea amprentei.

Sunt de părere că pe viitor biometria va fi folosită în soluții de securitate națională, cum ar fi prevenirea falsurilor de identitate, verificarea documentelor de identificare și a vizelor, îmbunătățirea securității aeroporturilor sau întărirea granițelor. În Occident este deja implementată tehnologia biometrică în securitatea națională și se iau în considerare ca și obiective de viitor acoperirea parcurilor de distracție, a colegiilor și a băncilor.

Bibliografie

[1] http://revad.uvvg.ro/files/nr5/Nicoleta%20LASAN-Securitatea%20concepte%20in%20societatea%20contemporana.pdf;

[2] http://cadredidactice.ub.ro/sorinpopa/files/2011/10/Curs_Securit_Sist_Inf.pdf;

[3] http://www.silvtech.ro/acces-pontaj-cluj;

[4] http://andrei.clubcisco.ro/cursuri/4sprc/slides/5-securitate_p2_08.pdf;

[5] http://ro.scribd.com/doc/46927624/MICLE-ALINA;

[6] http://www.openxtra.co.uk/articles/recommended-server-room-temperature;

[7] http://ro.scribd.com/doc/45979130/6-senzori-de-temperatura;

[8] Paraschiv, Nicolae, Radulescu, Gabriel, Introducerea in stiinta sistemelor si calculatoarelor, Editura Matrixrom, Bucuresti, 2007;

[9] http://www.jola.ro/raspberry-pi/2-raspberry-pi-model-b.html;

[10] http://stst.elia.pub.ro/news/SOA/Teme_SOA_13_14/SOA%20Raspi.pdf’

[11] Schumer, L., Utilizare UNIX, Editura Teora, Bucuresti, 1999;

[12] http://www.robofun.ro/raspberry-pi-si-componente/RASPBERRY-PI-B;

[13] http://www.farnell.com/datasheets/1730389.pdf;

[14] http://www.pololu.com/product/2485;

[15] http://andrei.clubcisco.ro/cursuri/3pm/lab1.pdf;

[16] http://elinux.org/RPi_raspi-config;

[17] http://jeffskinnerbox.wordpress.com/linux-python-packages-for-my-raspberry-pi/;

[18] Moise, Adrian, Algoritmi pentru prelucrarea imaginilor, Editura Matrixrom, Bucuresti, 2011;

[19] Liu, Simon, Silverman, Mark, A practical guide to biometric security tehnology, publicata in format electronic, http://www.findbiometrics.com, 2002;

[20] http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html#face-recognition-with-opencv;

***Dicționarul Explicativ al Limbii Române, Editura Univers Enciclopedic, București, 2009;

***International journal of multidisciplinary sciences and engineering, Vol.2, No.1, March 2011.

Anexe

Anexa 1 – Codul sursă pentru fișierul de configurare (buton, pinii GPIO, recunoașterea feței)

Portul la care este conectat releul

LOCK_SERVO_PIN = 23

Portul la care este conectat butonul

BUTTON_PIN = 17

Status buton

BUTTON_DOWN = True Low signal

BUTTON_UP = False High signal

Limita de recunoastere pe pozitiv

POSITIVE_THRESHOLD = 3600

Fisierul in care se salveaza datele de antrenare

TRAINING_FILE = 'training.xml'

Directorul care contine imaginile pozitive si negative

POSITIVE_DIR = './training/positive'

NEGATIVE_DIR = './training/negative'

ID identificare negativ si pozitiv

POSITIVE_LABEL = 1

NEGATIVE_LABEL = 2

Dimensiunea imaginilor de antrenare

FACE_WIDTH = 92

FACE_HEIGHT = 112

Configurare librarie recunoasterea fetei

HAAR_FACES = 'haarcascade_frontalface_alt.xml'

HAAR_SCALE_FACTOR = 1.3

HAAR_MIN_NEIGHBORS = 4

HAAR_MIN_SIZE = (30, 30)

Imaginea captata de camera

DEBUG_IMAGE = 'capture.pgm'

Functie pentru captarea imaginii de la camera

def get_camera():

import picam

return picam.OpenCVCapture()

Anexa 2 – Implementarea librăriei OpenCV folosind algoritmul Eigenface

import cv2

import config

haar_faces = cv2.CascadeClassifier(config.HAAR_FACES)

def detect_single(image):

Returneaza fata detectata (in alb si negru) sau False daca detecteaza mai mult de o fata sau niciuna

faces = haar_faces.detectMultiScale(image,

scaleFactor=config.HAAR_SCALE_FACTOR,

minNeighbors=config.HAAR_MIN_NEIGHBORS,

minSize=config.HAAR_MIN_SIZE,

flags=cv2.CASCADE_SCALE_IMAGE)

if len(faces) != 1:

return None

return faces[0]

def crop(image, x, y, w, h):

Decupeaza fata la dimensiunile imaginilor pozitive

crop_height = int((config.FACE_HEIGHT / float(config.FACE_WIDTH)) * w)

midy = y + h/2

y1 = max(0, midy-crop_height/2)

y2 = min(image.shape[0]-1, midy+crop_height/2)

return image[y1:y2, x:x+w]

def resize(image):

Redimensioneaza imaginea

return cv2.resize(image,

(config.FACE_WIDTH, config.FACE_HEIGHT),

interpolation=cv2.INTER_LANCZOS4)

Anexa 3 – Codul sursă pentru controlul butonului și a încuietorii (ledului)

import time

import cv2

import RPIO

import picam

import config

import face

Clasa care controleaza pozitia usii (box)

class Box(object):

def __init__(self):

Seteaza pinii de input output

RPIO.setup(config.LOCK_SERVO_PIN, RPIO.OUT)

RPIO.setup(config.BUTTON_PIN, RPIO.IN)

Starea initiala a releului

self.button_state = RPIO.input(config.BUTTON_PIN)

self.is_locked = None

def lock(self):

Functia care controleaza inchiderea usii

RPIO.output(config.LOCK_SERVO_PIN, False)

self.is_locked = True

def unlock(self):

Functia care controleaza deschiderea usii

RPIO.output(config.LOCK_SERVO_PIN, True);

self.is_locked = False

def is_button_up(self):

Verifica daca butonul a fost apasat

old_state = self.button_state

self.button_state = RPIO.input(config.BUTTON_PIN)

Verifica daca butonul este in curs de ridicare

if old_state == config.BUTTON_DOWN and self.button_state == config.BUTTON_UP:

Asteapta 20 de milisecunde pentru a evita efectul de bounce (apasarea multipla)

time.sleep(20.0/1000.0)

self.button_state = RPIO.input(config.BUTTON_PIN)

if self.button_state == config.BUTTON_UP:

return True

return False

Anexa 4 – Codul sursă pentru captarea imaginilor din setul de învățare

Script pentru captarea imaginilor de training

import glob

import os

import sys

import select

import cv2

import hardware

import config

import face

Prefix imagini pozitive

POSITIVE_FILE_PREFIX = 'positive_'

def is_letter_input(letter):

Functie verificare tasta apasata

if select.select([sys.stdin,],[],[],0.0)[0]:

input_char = sys.stdin.read(1)

return input_char.lower() == letter.lower()

return False

if __name__ == '__main__':

camera = config.get_camera()

box = hardware.Box()

Creaza folderul pentru imagini pozitive daca nu exista

if not os.path.exists(config.POSITIVE_DIR):

os.makedirs(config.POSITIVE_DIR)

Seteaza numarul imaginii in functie de ultima imagine

files = sorted(glob.glob(os.path.join(config.POSITIVE_DIR,

POSITIVE_FILE_PREFIX + '[0-9][0-9][0-9].pgm')))

count = 0

if len(files) > 0:

count = int(files[-1][-7:-4])+1

print 'Capture the positive pictures (train pictures).'

print 'Please press the button or press C to capture an image.'

while True:

Verifica daca a fost apasat butonul sau litera C

if box.is_button_up() or is_letter_input('c'):

print 'Capturing pictures…'

image = camera.read()

Converteste imaginea in alb negru

image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

Verifica daca este o singura fata

result = face.detect_single(image)

if result is None:

print 'Was not detected a single face, please check the image in capture.pgm' \

' please try again, but use only one face.'

continue

x, y, w, h = result

Cropeaza imaginile la dimensiunile necesare

crop = face.crop(image, x, y, w, h)

Salveaza imaginile in folderul positive

filename = os.path.join(config.POSITIVE_DIR, POSITIVE_FILE_PREFIX + '%03d.pgm' % count)

cv2.imwrite(filename, crop)

print 'Found the face, then wrote training picture', filename

count += 1

Anexa 5 – Codul sursă pentru captarea imaginii de la cameră

Clasa de captura pentru libraria OpenCV. Clasa permite captarea unei singure imagini de la Camera Pi

import io

import time

import cv2

import numpy as np

import picamera

import config

class OpenCVCapture(object):

def read(self):

Citeste un singur frame captat de la pi camera si il returneaza ca un obiect OpenCV

data = io.BytesIO()

with picamera.PiCamera() as camera:

camera.capture(data, format='jpeg')

data = np.fromstring(data.getvalue(), dtype=np.uint8)

Decodeaza imaginea in format OpenCV

image = cv2.imdecode(data, 1)

Salveaza imaginea in capture.pgm pentru debuging

cv2.imwrite(config.DEBUG_IMAGE, image)

return image

Anexa 6 – Codul sursă pentru antrenarea setului de învățare

Script pentru a antrena sistemul de recunoastere faciala cu imaginile pozitive si negative.

Modelul de recunoastere a fetei este bazat pe algoritmul Eigenfaces implementat in OpenCV

import fnmatch

import os

import cv2

import numpy as np

import config

import face

Media imaginilor recunoscute de script

MEAN_FILE = 'mean.png'

POSITIVE_EIGENFACE_FILE = 'positive eigenface.png'

NEGATIVE_EIGENFACE_FILE = 'negative eigenface.png'

def walk_files(directory, match='*'):

Parsarea tuturor imaginilor dintr-un folder

for root, dirs, files in os.walk(directory):

for filename in fnmatch.filter(files, match):

yield os.path.join(root, filename)

def prepare_image(filename):

Pregatirea imaginilor pentru antrenare

return face.resize(cv2.imread(filename, cv2.IMREAD_GRAYSCALE))

def normalize(X, low, high, dtype=None):

Functie de normalizare a unui array

X = np.asarray(X)

minX, maxX = np.min(X), np.max(X)

normalizare de la: [0…1].

X = X – float(minX)

X = X / float((maxX – minX))

Redimensionare de la: [low…high].

X = X * (high-low)

X = X + low

if dtype is None:

return np.asarray(X)

return np.asarray(X, dtype=dtype)

if __name__ == '__main__':

print "Reading the training pictures…"

faces = []

labels = []

pos_count = 0

neg_count = 0

Citeste toate imaginile pozitive

for filename in walk_files(config.POSITIVE_DIR, '*.pgm'):

faces.append(prepare_image(filename))

labels.append(config.POSITIVE_LABEL)

pos_count += 1

Citeste toate imaginile negative

for filename in walk_files(config.NEGATIVE_DIR, '*.pgm'):

faces.append(prepare_image(filename))

labels.append(config.NEGATIVE_LABEL)

neg_count += 1

print 'Read', pos_count, 'positive pictures and', neg_count, 'negative pictures.'

Antreneaza imaginile

print 'Training the model…'

model = cv2.createEigenFaceRecognizer()

model.train(np.asarray(faces), np.asarray(labels))

Salveaza rezultatul in fisierul training.xml

model.save(config.TRAINING_FILE)

print 'Training data wae saveded in', config.TRAINING_FILE

Salveaza media imaginilor

mean = model.getMat("mean").reshape(faces[0].shape)

cv2.imwrite(MEAN_FILE, normalize(mean, 0, 255, dtype=np.uint8))

eigenvectors = model.getMat("eigenvectors")

pos_eigenvector = eigenvectors[:,0].reshape(faces[0].shape)

cv2.imwrite(POSITIVE_EIGENFACE_FILE, normalize(pos_eigenvector, 0, 255, dtype=np.uint8))

neg_eigenvector = eigenvectors[:,1].reshape(faces[0].shape)

cv2.imwrite(NEGATIVE_EIGENFACE_FILE, normalize(neg_eigenvector, 0, 255, dtype=np.uint8))

Anexa 7- Listă de abrevieri folosite în cadrul proiectului

BSD – Berkeley Software Distribution

CPU – Central Processing Unit (Unitate Centrala de Procesare – UCP)

CSS – Cascading Style Sheets

DMA – Direct Memory Access

GND – Ground

GPIO – General Purpose Input/Output

GPU – Graphics Processing Unit (unitate de procesare grafică)

GSM – Global Sysstem for Mobile Communications (Sistem Global pentru Comunicații Mobile)

HDMI – High-Definition Multimedia Interface

HDTV – High-Definition Television

IP – Internet Protocol

IR – infrared

ISA – Instruction Set Architecture

ISP – Image System Pipeline

LAN – Local Area Network

LED – Light-Emitting Diode (Diodă Emițătoare de Lumină)

MMC – Multi Media Card

NC – Normally Closed

NO – Normally Open

OpenCV – Open Source Computer Vision

OpenGL – Open Graphics Library

PC – Personal Computer

PCA – Principal Component Analysis

PCM – Pulse-Code Modulation

PWM – Pulse-Width Modulation

RAM – Random-Access Memory

RISC – Reduced Instruction Set Computing

SD- Secure Digital

SDIO – Secure Digital Input Output

SDRAM – Synchronous Dynamic Random Access Memory

SMS – Short Message Services

SPI – Serial Peripheral Interface

SSH – Secure Shell

TCP – Transmission Control Protocol (Protocol de Control al Transmisiei)

UART – Universal Asynchronous receicer/transmitter

UPS – Uninterruptible Power Supplies

USB – Universal Serial Bus (Magistrală Serială Universală)

UTF-8 – Transformation Format 8-bit

VDD – Positive Supply Voltage

WAN – Wide Area Network

Bibliografie

[1] http://revad.uvvg.ro/files/nr5/Nicoleta%20LASAN-Securitatea%20concepte%20in%20societatea%20contemporana.pdf;

[2] http://cadredidactice.ub.ro/sorinpopa/files/2011/10/Curs_Securit_Sist_Inf.pdf;

[3] http://www.silvtech.ro/acces-pontaj-cluj;

[4] http://andrei.clubcisco.ro/cursuri/4sprc/slides/5-securitate_p2_08.pdf;

[5] http://ro.scribd.com/doc/46927624/MICLE-ALINA;

[6] http://www.openxtra.co.uk/articles/recommended-server-room-temperature;

[7] http://ro.scribd.com/doc/45979130/6-senzori-de-temperatura;

[8] Paraschiv, Nicolae, Radulescu, Gabriel, Introducerea in stiinta sistemelor si calculatoarelor, Editura Matrixrom, Bucuresti, 2007;

[9] http://www.jola.ro/raspberry-pi/2-raspberry-pi-model-b.html;

[10] http://stst.elia.pub.ro/news/SOA/Teme_SOA_13_14/SOA%20Raspi.pdf’

[11] Schumer, L., Utilizare UNIX, Editura Teora, Bucuresti, 1999;

[12] http://www.robofun.ro/raspberry-pi-si-componente/RASPBERRY-PI-B;

[13] http://www.farnell.com/datasheets/1730389.pdf;

[14] http://www.pololu.com/product/2485;

[15] http://andrei.clubcisco.ro/cursuri/3pm/lab1.pdf;

[16] http://elinux.org/RPi_raspi-config;

[17] http://jeffskinnerbox.wordpress.com/linux-python-packages-for-my-raspberry-pi/;

[18] Moise, Adrian, Algoritmi pentru prelucrarea imaginilor, Editura Matrixrom, Bucuresti, 2011;

[19] Liu, Simon, Silverman, Mark, A practical guide to biometric security tehnology, publicata in format electronic, http://www.findbiometrics.com, 2002;

[20] http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html#face-recognition-with-opencv;

***Dicționarul Explicativ al Limbii Române, Editura Univers Enciclopedic, București, 2009;

***International journal of multidisciplinary sciences and engineering, Vol.2, No.1, March 2011.

Anexe

Anexa 1 – Codul sursă pentru fișierul de configurare (buton, pinii GPIO, recunoașterea feței)

Portul la care este conectat releul

LOCK_SERVO_PIN = 23

Portul la care este conectat butonul

BUTTON_PIN = 17

Status buton

BUTTON_DOWN = True Low signal

BUTTON_UP = False High signal

Limita de recunoastere pe pozitiv

POSITIVE_THRESHOLD = 3600

Fisierul in care se salveaza datele de antrenare

TRAINING_FILE = 'training.xml'

Directorul care contine imaginile pozitive si negative

POSITIVE_DIR = './training/positive'

NEGATIVE_DIR = './training/negative'

ID identificare negativ si pozitiv

POSITIVE_LABEL = 1

NEGATIVE_LABEL = 2

Dimensiunea imaginilor de antrenare

FACE_WIDTH = 92

FACE_HEIGHT = 112

Configurare librarie recunoasterea fetei

HAAR_FACES = 'haarcascade_frontalface_alt.xml'

HAAR_SCALE_FACTOR = 1.3

HAAR_MIN_NEIGHBORS = 4

HAAR_MIN_SIZE = (30, 30)

Imaginea captata de camera

DEBUG_IMAGE = 'capture.pgm'

Functie pentru captarea imaginii de la camera

def get_camera():

import picam

return picam.OpenCVCapture()

Anexa 2 – Implementarea librăriei OpenCV folosind algoritmul Eigenface

import cv2

import config

haar_faces = cv2.CascadeClassifier(config.HAAR_FACES)

def detect_single(image):

Returneaza fata detectata (in alb si negru) sau False daca detecteaza mai mult de o fata sau niciuna

faces = haar_faces.detectMultiScale(image,

scaleFactor=config.HAAR_SCALE_FACTOR,

minNeighbors=config.HAAR_MIN_NEIGHBORS,

minSize=config.HAAR_MIN_SIZE,

flags=cv2.CASCADE_SCALE_IMAGE)

if len(faces) != 1:

return None

return faces[0]

def crop(image, x, y, w, h):

Decupeaza fata la dimensiunile imaginilor pozitive

crop_height = int((config.FACE_HEIGHT / float(config.FACE_WIDTH)) * w)

midy = y + h/2

y1 = max(0, midy-crop_height/2)

y2 = min(image.shape[0]-1, midy+crop_height/2)

return image[y1:y2, x:x+w]

def resize(image):

Redimensioneaza imaginea

return cv2.resize(image,

(config.FACE_WIDTH, config.FACE_HEIGHT),

interpolation=cv2.INTER_LANCZOS4)

Anexa 3 – Codul sursă pentru controlul butonului și a încuietorii (ledului)

import time

import cv2

import RPIO

import picam

import config

import face

Clasa care controleaza pozitia usii (box)

class Box(object):

def __init__(self):

Seteaza pinii de input output

RPIO.setup(config.LOCK_SERVO_PIN, RPIO.OUT)

RPIO.setup(config.BUTTON_PIN, RPIO.IN)

Starea initiala a releului

self.button_state = RPIO.input(config.BUTTON_PIN)

self.is_locked = None

def lock(self):

Functia care controleaza inchiderea usii

RPIO.output(config.LOCK_SERVO_PIN, False)

self.is_locked = True

def unlock(self):

Functia care controleaza deschiderea usii

RPIO.output(config.LOCK_SERVO_PIN, True);

self.is_locked = False

def is_button_up(self):

Verifica daca butonul a fost apasat

old_state = self.button_state

self.button_state = RPIO.input(config.BUTTON_PIN)

Verifica daca butonul este in curs de ridicare

if old_state == config.BUTTON_DOWN and self.button_state == config.BUTTON_UP:

Asteapta 20 de milisecunde pentru a evita efectul de bounce (apasarea multipla)

time.sleep(20.0/1000.0)

self.button_state = RPIO.input(config.BUTTON_PIN)

if self.button_state == config.BUTTON_UP:

return True

return False

Anexa 4 – Codul sursă pentru captarea imaginilor din setul de învățare

Script pentru captarea imaginilor de training

import glob

import os

import sys

import select

import cv2

import hardware

import config

import face

Prefix imagini pozitive

POSITIVE_FILE_PREFIX = 'positive_'

def is_letter_input(letter):

Functie verificare tasta apasata

if select.select([sys.stdin,],[],[],0.0)[0]:

input_char = sys.stdin.read(1)

return input_char.lower() == letter.lower()

return False

if __name__ == '__main__':

camera = config.get_camera()

box = hardware.Box()

Creaza folderul pentru imagini pozitive daca nu exista

if not os.path.exists(config.POSITIVE_DIR):

os.makedirs(config.POSITIVE_DIR)

Seteaza numarul imaginii in functie de ultima imagine

files = sorted(glob.glob(os.path.join(config.POSITIVE_DIR,

POSITIVE_FILE_PREFIX + '[0-9][0-9][0-9].pgm')))

count = 0

if len(files) > 0:

count = int(files[-1][-7:-4])+1

print 'Capture the positive pictures (train pictures).'

print 'Please press the button or press C to capture an image.'

while True:

Verifica daca a fost apasat butonul sau litera C

if box.is_button_up() or is_letter_input('c'):

print 'Capturing pictures…'

image = camera.read()

Converteste imaginea in alb negru

image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

Verifica daca este o singura fata

result = face.detect_single(image)

if result is None:

print 'Was not detected a single face, please check the image in capture.pgm' \

' please try again, but use only one face.'

continue

x, y, w, h = result

Cropeaza imaginile la dimensiunile necesare

crop = face.crop(image, x, y, w, h)

Salveaza imaginile in folderul positive

filename = os.path.join(config.POSITIVE_DIR, POSITIVE_FILE_PREFIX + '%03d.pgm' % count)

cv2.imwrite(filename, crop)

print 'Found the face, then wrote training picture', filename

count += 1

Anexa 5 – Codul sursă pentru captarea imaginii de la cameră

Clasa de captura pentru libraria OpenCV. Clasa permite captarea unei singure imagini de la Camera Pi

import io

import time

import cv2

import numpy as np

import picamera

import config

class OpenCVCapture(object):

def read(self):

Citeste un singur frame captat de la pi camera si il returneaza ca un obiect OpenCV

data = io.BytesIO()

with picamera.PiCamera() as camera:

camera.capture(data, format='jpeg')

data = np.fromstring(data.getvalue(), dtype=np.uint8)

Decodeaza imaginea in format OpenCV

image = cv2.imdecode(data, 1)

Salveaza imaginea in capture.pgm pentru debuging

cv2.imwrite(config.DEBUG_IMAGE, image)

return image

Anexa 6 – Codul sursă pentru antrenarea setului de învățare

Script pentru a antrena sistemul de recunoastere faciala cu imaginile pozitive si negative.

Modelul de recunoastere a fetei este bazat pe algoritmul Eigenfaces implementat in OpenCV

import fnmatch

import os

import cv2

import numpy as np

import config

import face

Media imaginilor recunoscute de script

MEAN_FILE = 'mean.png'

POSITIVE_EIGENFACE_FILE = 'positive eigenface.png'

NEGATIVE_EIGENFACE_FILE = 'negative eigenface.png'

def walk_files(directory, match='*'):

Parsarea tuturor imaginilor dintr-un folder

for root, dirs, files in os.walk(directory):

for filename in fnmatch.filter(files, match):

yield os.path.join(root, filename)

def prepare_image(filename):

Pregatirea imaginilor pentru antrenare

return face.resize(cv2.imread(filename, cv2.IMREAD_GRAYSCALE))

def normalize(X, low, high, dtype=None):

Functie de normalizare a unui array

X = np.asarray(X)

minX, maxX = np.min(X), np.max(X)

normalizare de la: [0…1].

X = X – float(minX)

X = X / float((maxX – minX))

Redimensionare de la: [low…high].

X = X * (high-low)

X = X + low

if dtype is None:

return np.asarray(X)

return np.asarray(X, dtype=dtype)

if __name__ == '__main__':

print "Reading the training pictures…"

faces = []

labels = []

pos_count = 0

neg_count = 0

Citeste toate imaginile pozitive

for filename in walk_files(config.POSITIVE_DIR, '*.pgm'):

faces.append(prepare_image(filename))

labels.append(config.POSITIVE_LABEL)

pos_count += 1

Citeste toate imaginile negative

for filename in walk_files(config.NEGATIVE_DIR, '*.pgm'):

faces.append(prepare_image(filename))

labels.append(config.NEGATIVE_LABEL)

neg_count += 1

print 'Read', pos_count, 'positive pictures and', neg_count, 'negative pictures.'

Antreneaza imaginile

print 'Training the model…'

model = cv2.createEigenFaceRecognizer()

model.train(np.asarray(faces), np.asarray(labels))

Salveaza rezultatul in fisierul training.xml

model.save(config.TRAINING_FILE)

print 'Training data wae saveded in', config.TRAINING_FILE

Salveaza media imaginilor

mean = model.getMat("mean").reshape(faces[0].shape)

cv2.imwrite(MEAN_FILE, normalize(mean, 0, 255, dtype=np.uint8))

eigenvectors = model.getMat("eigenvectors")

pos_eigenvector = eigenvectors[:,0].reshape(faces[0].shape)

cv2.imwrite(POSITIVE_EIGENFACE_FILE, normalize(pos_eigenvector, 0, 255, dtype=np.uint8))

neg_eigenvector = eigenvectors[:,1].reshape(faces[0].shape)

cv2.imwrite(NEGATIVE_EIGENFACE_FILE, normalize(neg_eigenvector, 0, 255, dtype=np.uint8))

Anexa 7- Listă de abrevieri folosite în cadrul proiectului

BSD – Berkeley Software Distribution

CPU – Central Processing Unit (Unitate Centrala de Procesare – UCP)

CSS – Cascading Style Sheets

DMA – Direct Memory Access

GND – Ground

GPIO – General Purpose Input/Output

GPU – Graphics Processing Unit (unitate de procesare grafică)

GSM – Global Sysstem for Mobile Communications (Sistem Global pentru Comunicații Mobile)

HDMI – High-Definition Multimedia Interface

HDTV – High-Definition Television

IP – Internet Protocol

IR – infrared

ISA – Instruction Set Architecture

ISP – Image System Pipeline

LAN – Local Area Network

LED – Light-Emitting Diode (Diodă Emițătoare de Lumină)

MMC – Multi Media Card

NC – Normally Closed

NO – Normally Open

OpenCV – Open Source Computer Vision

OpenGL – Open Graphics Library

PC – Personal Computer

PCA – Principal Component Analysis

PCM – Pulse-Code Modulation

PWM – Pulse-Width Modulation

RAM – Random-Access Memory

RISC – Reduced Instruction Set Computing

SD- Secure Digital

SDIO – Secure Digital Input Output

SDRAM – Synchronous Dynamic Random Access Memory

SMS – Short Message Services

SPI – Serial Peripheral Interface

SSH – Secure Shell

TCP – Transmission Control Protocol (Protocol de Control al Transmisiei)

UART – Universal Asynchronous receicer/transmitter

UPS – Uninterruptible Power Supplies

USB – Universal Serial Bus (Magistrală Serială Universală)

UTF-8 – Transformation Format 8-bit

VDD – Positive Supply Voltage

WAN – Wide Area Network

Similar Posts