This is an old revision of the document!


Facial Recognition Locker

Autor

Introducere

  • Metodele traditionale de a obtine accesul sunt metode de tipul “something you have” (descuierea usii folosind o cheie) si “something you know” (parola propriului cont). Scopul proiectului este implementarea unei metode “something you are”, mai exact recunoasterea faciala, oferind accesul fara necesitatea de a memora sau a detine un obiect anume.
  • Proiectul isi propune controlarea unei incuietori electrice pe baza capturilor realizate de o camera atasata si a rezultatului dat de un server extern in urma procesarii imaginilor.

Descriere generala

Ansamblul va avea atasat o camera VGA ce va realiza capturi la apasarea butonului. Imaginile vor fi trimise la un server extern folosind un modul Ethernet, unde acestea vor avea rol de input pentru modelul de recunoastere faciala implementat, urmand ca raspunsul sa fie transmis placutei Arduino. Microcontrolerul va putea atunci sa actioneze asupra incuietoarei prin intermediul unui releu.
face_recognition_locker_diagram.jpg

Hardware Design

Piese necesare

  • Arduino UNO R3
  • Modul extern Ethernet
  • Camera VGA
  • Modul releu 12V
  • Incuietoare electrica 12V
  • Push button
  • Cablu UTP
  • Rezistente 2×4,7k, 2x10k
  • Conectori de pini
  • Placa PCB de prototipare

face_recognition_locker_hardware.jpgface_recognition_locker_front.jpgface_recognition_locker_back.jpg

Schema electrica

face_recognition_locker_schema_electrica.jpg
Initial, proiectul isi propusese sa adauge un card SD pentru stocarea imaginilor si un numpad pentru o metoda alternativa de autentificare prin introducerea parolei, insa s-a renuntat la acestea din moment ce toti pinii pentru uz general au fost folositi (camera necesita conectarea a 18 pini) si a fost necesara si remaparea pinilor.
Microcontroller-ul comunica cu shield-ul Ethernet prin pinii ICSP, fiind astfel necesara nefolosirea pinilor 10-13 (sunt conectati intern la pinii ICSP). Analog, pinii SCL si SDA corespund cu pinii A5, respectiv A4.
Pinii RX si TX sunt folositi pentru buton si releu, la releu fiind de asemenea atasat un alimentator de 12V pentru incuietoare.

Software Design

Atat codul scris pentru placuta Arduino, cat si cel folosit pe server au fost urcate folosind git. Pentru programarea pe microcontroller s-a folosit Arduino IDE, iar pe server se gaseste un script bash ce lanseaza 3 terminale care ruleaza in paralel script-uri Python.

Arduino IDE

Codul sursa se afla in folder-ul “Ethernet_Camera”. Implementarea s-a inceput de la codul oferit de urmatorul ghid, care la randul lui a folosit urmatoarea sursa. La apasarea butonului, se va trimite un batch de 5 imagini, din moment ce unele imagini pot avea probleme de luminozitate sau pozitionare.
La initializare, se configureaza pinul 6 ca si PWM clock pentru camera VGA si se configureaza adresele MAC si IP, urmate de port-ul pentru transmiterea UDP. In urma testelor nu s-a observat o pierdere semnificativa a datelor in comparatie cu protocolul TCP, UDP oferind totodata o viteza mai mare de transmitere a pachetelor.
Pe masura ce se citesc pixelii, acestia sunt salvati intr-un buffer de dimensiune 1280 bytes (4 linii din imagine, a fost necesara optimizarea memoriei din moment ce SRAM-ul placutei Arduino are capacitate maxima de 2048 bytes), urmand a se transmite pachetul la umplerea acestuia. Microcontroller-ul va primi un pachet UDP in caz afirmativ, urmand sa deschida incuietoarea pentru 2 secunde.

Python

Prin rularea script-ului run.sh se lanseaza in executie script-urile python3:

  • udp_server - sterge imaginile salvate anterior si preia datele de la microcontroller, salvandu-le in format .txt in urma primirii unui fisier intreg
  • convert - preia datele din fisierul .txt, dupa care le scrie sub forma RGB si adauga header-ul BMP, urmand sa salveze rezultatul intr-un fisier bmp
  • check_identity - compara encodarea imaginii bmp obtinute cu encodarea imaginii de referinta folosind libraria “face_recognition”. Daca functia returneaza True, script-ul va trimite pachete UDP pentru batch-ul curent de imagini.

Rezultate Obtinute

In prima jumatate a executiei din demo, s-au obtinut imaginile (primele 5):

Avand ca imagine de referinta ultima captura din set, programul a returnat valorile False, True, False, True, respectiv True, dupa care incuietoarea se deschide. Se observa o “shiftare” sau decupare a pozelor (posibil un bug la sincronizare), insa din moment ce se realizeaza 5 capturi iar “shiftarea” pare uniforma, nu este afectat rezultatul final (cel putin intr-o imagine se gaseste fata intreaga). Dupa boot-are, primele 2-3 poze ies intotdeauna cu luminozitate crescuta, dupa care se stabilizeaza si restul pozelor au un rezultat normal, obtinandu-se o corectitudine consistenta.
In a doua jumatate a demo-ului, se testeaza cazul negativ prin capturarea unor imagini ce nu contin nicio fata, si prin urmare incuietoarea nu se deschide.

Concluzii

Download

Jurnal

  • 25 Aprilie - Alegerea temei proiectului si crearea paginii de documentatie
  • 2-3 Mai - Testarea separata a componentelor exceptand camera
  • 5-6 Mai - Acomodarea cu librariile de lucru si realizarea unui ansamblu de autentificare printr-o parola introdusa prin numpad
  • 10-14 Mai - Procurarea unor materiale aditionale si documentarea pentru folosirea camerei pe Arduino
  • 17 Mai - Testarea camerei
  • 20-22 Mai - Realizarea lipiturilor pentru conexiuni
  • 23-25 Mai - Implementarea programului pentru placuta Arduino si a script-urilor de pe server
  • 26-28 Mai - Debugging si testare
  • 30 Mai - Realizarea documentatiei

Bibliografie/Resurse

pm/prj2021/cghenea/facial-recognition-locker.1622393299.txt.gz · Last modified: 2021/05/30 19:48 by razvan.apetroaie
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0