This shows you the differences between two versions of the page.
pm:prj2021:cghenea:facial-recognition-locker [2021/05/30 20:34] razvan.apetroaie |
pm:prj2021:cghenea:facial-recognition-locker [2021/06/04 21:43] (current) razvan.apetroaie |
||
---|---|---|---|
Line 4: | Line 4: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | * Metodele tradiționale de a obține accesul sunt metode de tipul "something you have" (descuierea ușii folosind o cheie) și "something you know" (parola propriului cont). Scopul proiectului este implementarea unei metode "something you are", mai exact recunoașterea facială, oferind accesul fără necesitatea de a memora sau a deține un obiect anume. | + | * Metodele tradiționale de a obține accesul sunt metode de tipul "something you have" (descuierea ușii folosind o cheie) și "something you know" (parola propriului cont). Scopul proiectului este implementarea unei metode "something you are", mai exact recunoașterea facială, oferind accesul fără necesitatea de a memora un cod sau a deține un obiect anume. |
* Proiectul își propune controlarea unei încuietori electrice pe baza capturilor realizate de o camera atașată și a rezultatului dat de un server extern în urma procesării imaginilor. | * Proiectul își propune controlarea unei încuietori electrice pe baza capturilor realizate de o camera atașată și a rezultatului dat de un server extern în urma procesării imaginilor. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Ansamblul va avea atașată o cameră VGA ce va realiza capturi la apăsarea butonului. Imaginile vor fi trimise la un server extern folosind un modul Ethernet, unde acestea vor avea rol de input pentru modelul de recunoaștere facială implementat, urmând că răspunsul să fie transmis plăcuței Arduino. Microcontrolerul va putea atunci să acționeze asupra incuietoarei prin intermediul unui releu.\\ | Ansamblul va avea atașată o cameră VGA ce va realiza capturi la apăsarea butonului. Imaginile vor fi trimise la un server extern folosind un modul Ethernet, unde acestea vor avea rol de input pentru modelul de recunoaștere facială implementat, urmând că răspunsul să fie transmis plăcuței Arduino. Microcontrolerul va putea atunci să acționeze asupra incuietoarei prin intermediul unui releu.\\ | ||
- | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_diagram.jpg?575x200}} | + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_diagram.jpg?450x150}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 23: | Line 23: | ||
* Conectori de pini | * Conectori de pini | ||
* Placă PCB de prototipare | * Placă PCB de prototipare | ||
- | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_hardware.jpg?300x200}}{{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_front.jpg?200x150}}{{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_back.jpg?200x150}} | + | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_hardware.jpg?300x200}}\\ |
+ | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_front.jpg?200x150}} | ||
+ | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_back.jpg?200x150}} | ||
==== Schema electrică ==== | ==== Schema electrică ==== | ||
Line 48: | Line 50: | ||
În prima jumătate a execuției din [[https://youtu.be/h58WgDPylpk|demo]], s-au obținut imaginile (primele 5):\\ | În prima jumătate a execuției din [[https://youtu.be/h58WgDPylpk|demo]], s-au obținut imaginile (primele 5):\\ | ||
{{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_photos.png?250x200}}\\ | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2021/cghenea/face_recognition_locker_photos.png?250x200}}\\ | ||
- | 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.\\ | + | Având ca imagine de referință ultima captură din set, programul a returnat valorile False, True, True, True, respectiv True, după care încuietoarea se deschide. Se observă o "shiftare" sau decupare a pozelor (posibil un bug la sincronizare), însă din moment ce se realizează 5 capturi iar "shiftarea" pare uniformă, nu este afectat rezultatul final (cel puțin într-o imagine se găsește fața întreagă). După boot-are, primele 2-3 poze ies întotdeauna cu luminozitate crescută, după care se stabilizează și restul pozelor au un rezultat normal, obținându-se o corectitudine consistentă.\\ |
- | 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. | + | În a doua jumătate a demo-ului, se testează cazul negativ prin capturarea unor imagini ce nu conțin nicio față, și prin urmare încuietoarea nu se deschide. |
===== Concluzii ===== | ===== Concluzii ===== | ||
- | Utilizarea unei camere pe un Arduino Uno R3 este un bun exemplu de testare a limitelor acestui microcontroller. Atat numarul de pini cat si memoria SRAM au fost utilizate aproape la maxim, aducand dificultati in implementare pe partea de optimizare si remapare a pinilor. Au existat conflicte in utilizarea pinilor din moment ce shield-ul Ethernet necesita ca pinii 10-13 sa fie neutilizati, iar schema originala a camerei se folosea partial de acesti pini. | + | Utilizarea unei camere pe un Arduino Uno R3 este un bun exemplu de testare a limitelor acestui microcontroller. Atât numărul de pini cât și memoria SRAM au fost utilizate aproape la maxim, aducând dificultăți în implementare pe partea de optimizare și remapare a pinilor. Au existat conflicte în utilizarea pinilor din moment ce shield-ul Ethernet necesită ca pinii 10-13 să fie neutilizați, iar schema originală a camerei se folosea parțial de acești pini. Proiectul și-a atins scopul propus, însă ar putea fi îmbunătățit în câteva puncte în condiția în care se utilizează un microcontroller cu mai multe resurse: |
- | Proiectul si-a atins scopul propus, insa ar putea fi imbunatatit in cateva puncte in conditia in care se utilizeaza un microcontroller cu mai multe resurse: | + | * sistemul de lock are câteva vulnerabilități. Pentru a nu permite accesul unei persoane care deține o poză cu proprietarul, serverul ar putea face autentificarea folosindu-se de mai multe poze în diverse poziții sau de o filmare. De asemenea, semnalul trimis pentru deschiderea incuietorii ar trebui să conțină o măsură de securitate. În momentul de față, dacă un atacator se poate conecta la rețeaua locală și află adresa IP și portul microcontroller-ului, acesta poate trimite orice pachet UDP pentru descuiere |
- | * sistemul de lock are cateva vulnerabilitati. Pentru a nu permite accesul unei persoane care detine o poza cu proprietarul, serverul ar putea face autentificarea folosindu-se de mai multe poze in diverse pozitii sau de o filmare. De asemenea, semnalul trimis pentru deschiderea incuietorii ar trebui sa contina o masura de securitate. In momentul de fata, daca un atacator se poate conecta la reteaua locala si alfa adresa IP si portul microcontroller-ului, acesta poate trimite orice pachet UDP pentru descuiere | + | * se pot adauga mai multe funcționalități, precum autentificarea printr-o parolă introdusă la numpad și configurarea dispozitivului folosind tastatura și un display LCD. |
- | * se pot adauga mai multe functionalitati, precum autentificarea printr-o parola introdusa la numpad si configurarea dispozitivului folosind tastatura si un display LCD. | + | |
===== Download ===== | ===== Download ===== | ||
- | [[https://github.com/aptrazvan/FacialRecognitionLocker]] | + | [[https://github.com/aptrazvan/FacialRecognitionLocker|Github - FacialRecognitionLocker]] |
===== Jurnal ===== | ===== Jurnal ===== | ||
- | * 25 Aprilie - Alegerea temei proiectului si crearea paginii de documentatie | + | * 25 Aprilie - Alegerea temei proiectului și crearea paginii de documentație |
- | * 2-3 Mai - Testarea separata a componentelor exceptand camera | + | * 2-3 Mai - Testarea separată a componentelor exceptând camera |
- | * 5-6 Mai - Acomodarea cu librariile de lucru si realizarea unui ansamblu de autentificare printr-o parola introdusa prin numpad | + | * 5-6 Mai - Acomodarea cu librăriile de lucru și realizarea unui ansamblu de autentificare printr-o parolă introdusă prin numpad |
- | * 10-14 Mai - Procurarea unor materiale aditionale si documentarea pentru folosirea camerei pe Arduino | + | * 10-14 Mai - Procurarea unor materiale adiționale și documentarea pentru folosirea camerei pe Arduino |
* 17 Mai - Testarea camerei | * 17 Mai - Testarea camerei | ||
* 20-22 Mai - Realizarea lipiturilor pentru conexiuni | * 20-22 Mai - Realizarea lipiturilor pentru conexiuni | ||
- | * 23-25 Mai - Implementarea programului pentru placuta Arduino si a script-urilor de pe server | + | * 23-25 Mai - Implementarea programului pentru plăcuța Arduino și a script-urilor de pe server |
- | * 26-28 Mai - Debugging si testare | + | * 26-28 Mai - Debugging și testare |
- | * 30 Mai - Realizarea documentatiei | + | * 30 Mai - Realizarea documentației |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | Documentatie camera:\\ | + | Documentație cameră:\\ |
[[https://www.instructables.com/OV7670-Arduino-Camera-Sensor-Module-Framecapture-T/]]\\ | [[https://www.instructables.com/OV7670-Arduino-Camera-Sensor-Module-Framecapture-T/]]\\ | ||
[[https://circuitdigest.com/microcontroller-projects/how-to-use-ov7670-camera-module-with-arduino]]\\ | [[https://circuitdigest.com/microcontroller-projects/how-to-use-ov7670-camera-module-with-arduino]]\\ | ||
[[https://github.com/ComputerNerd/ov7670-no-ram-arduino-uno]]\\ | [[https://github.com/ComputerNerd/ov7670-no-ram-arduino-uno]]\\ | ||
- | [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]] | + | [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]]\\ |
[[https://www.arduino.cc/reference/en/language/variables/utilities/progmem/|PROGMEM]]\\ | [[https://www.arduino.cc/reference/en/language/variables/utilities/progmem/|PROGMEM]]\\ | ||
[[https://www.arduino.cc/en/Reference/Ethernet|Arduino Ethernet]]\\ | [[https://www.arduino.cc/en/Reference/Ethernet|Arduino Ethernet]]\\ | ||
- | [[https://pypi.org/project/face-recognition/|Libraria Python face_recognition]]\\ | + | [[https://pypi.org/project/face-recognition/|Librăria Python face_recognition]]\\ |
- | [[https://linuxhint.com/send_receive_udp_python/|Model client-server in Python]]\\ | + | [[https://linuxhint.com/send_receive_udp_python/|Model client-server în Python]]\\ |
- | [[https://en.wikipedia.org/wiki/BMP_file_format|Formatul BMP]]// | + | [[https://en.wikipedia.org/wiki/BMP_file_format|Formatul BMP]]\\ |
[[https://ocw.cs.pub.ro/courses/pm/prj2021/cghenea/facial-recognition-locker?do=export_pdf|PDF]] | [[https://ocw.cs.pub.ro/courses/pm/prj2021/cghenea/facial-recognition-locker?do=export_pdf|PDF]] |