Facial recognition

๐๐ฃ๐ ๐ณ๐ฎ๐ฐ๐ฒ ๐ฟ๐ฒ๐ฐ๐ผ๐ด๐ป๐ถ๐๐ถ๐ผ๐ป (ageitgey)







โโโโ ๐๐ฃ๐จ
# raspi-config
split under 'Advanced'. Set it up '16'.
โโโโ ๐๐๐๐ (25min)
# cd /opt && mkdir -p dlib
# git clone -b 'v19.6' --single-branch https://github.com/davisking/dlib.git dlib/
# cd ./dlib
# python3 setup.py install --compiler-flags "-mfpu=neon"
โโโโ ๐๐๐๐๐๐ง๐๐ฌ ๐๐๐๐๐๐ ๐ฅ๐๐๐ข ๐๐ฃ๐
# pip3 install face_recognition
โโโโ ๐ฅ๐๐๐ข๐๐ก๐๐ง๐๐ข๐ก ๐๐ข๐๐ ๐๐ซ๐๐ ๐ฃ๐๐
# cd /opt && mkdir -p ageitgey
# git clone --single-branch https://github.com/ageitgey/face_recognition.git ageitgey/
# cd ./face_recognition/examples
# python3 facerec_on_raspberry_pi.py
โโโโ ๐๐๐ง ๐๐๐ง๐ง๐๐ฅ ๐ฃ๐๐ฅ๐๐ข๐ฅ๐ ๐๐ก๐๐ (optio?)
โ ๐จ๐ฉ๐๐ง๐๐ฅ๐๐ฌ
# apt install libopenblas-dev liblapack-dev libatlas-base-dev
On injecte dans l'environnement du shell avant l'execution du script de reco
# export OPENBLAS_NUM_THREADS=1
# export OPENBLAS_MAIN_FREE=1
source : https://gist.github.com/ageitgey/1ac8dbe8572f3f533df6269dab35df65#gistcomment-2071073
โโโโ ๐ง๐๐๐๐๐ฅ๐๐
# pip3 install python-telegram-bot --upgrade
source : https://github.com/python-telegram-bot/python-telegram-bot
โโโโ ๐ฉ๐ข๐๐๐ ๐ง๐ง๐ฆ
Puis installation de pico tts, la voix synthรฉtique est de
meilleur qualitรฉ que 'espeak' ou 'google'
# apt install libttspico-utils
Augmenter le volume gรฉnรฉral au max
# amixer sset 'PCM' 100%
source : https://la-programmation.surleweb-france.fr/linux-faire-parler-systeme/
source : https://www.framboise314.fr/donnez-la-parole-a-votre-raspberry-pi/
โโโโ ๐ฆ๐ฌ๐ฆ๐ง๐๐ ๐
# nano /lib/systemd/system/recofacial.service
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
[Unit]
Description=Facial Reco
After=network.target
[Service]
Type=forking
ExecStart=/opt/reco/cronfacial.sh
Restart=always
RuntimeMaxSec=43200
[Install]
WantedBy=multi-user.target
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
RuntimeMaxSec=43200 = reboot du prog toute les 12h
# systemctl daemon-reload
# systemctl enable recofacial
# systemctl start recofacial
# nano /opt/reco/cronfacial.sh
# chmod +x cronfacial.sh
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#!/usr/bin/env bash
cd /opt/reco/
screen -dmS recofacial python3 /opt/reco/reco.py --cpus 4
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐๐จ๐ซ๐ซ๐ฎ๐ฉ๐ญ๐ข๐จ๐ง ?
๐๐ฎ๐ฅ๐ค๐ฉ๐๐๐จ๐ 1
Aprรจs 35heures de fonctionnement, le systรจme se voit apparaรฎtre une fuite de mรฉmoire...
On remarque facilement les crontabs screen de 4h.
๐๐ฎ๐ฅ๐ค๐ฉ๐๐๐จ๐ 2
Visiblement la fautive serait la pi camera !
source : https://github.com/raspberrypi/linux/issues/2680 (faire CTRL+F : camera)
๐๐ฎ๐ฅ๐ค๐ฉ๐๐๐จ๐ 3 ( โ โ ) (( ๐๐๐ข๐ญ ๐ฌ๐๐ฉ๐ญ๐๐ฆ๐๐ซ๐ ๐๐๐๐))
trop de reboot de la carte SD, il y a des dรฉgats sur le FileSystem (FS)
besoin de rรฉparer avec l'utilitaire "fsck"
( screen UAG478 )
( screen YZB416 )
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# fsck /dev/mmcblk0p1
1) Remove dirty bit <----
2) No action
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
https://raspberrypi.stackexchange.com/questions/251/how-can-i-determine-when-an-sd-card-needs-replacement
edit : idรฉe, mettre un watchdog du process screen, si down alors faire la commande qui repare la carte SD puis reboot
# cat /var/log/kern.log
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Jan 21 04:00:20 raspberrypi kernel: [135619.301497] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 21 08:13:25 raspberrypi kernel: [150804.353280] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 21 12:00:20 raspberrypi kernel: [164419.222848] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 21 16:00:19 raspberrypi kernel: [178818.772892] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 21 20:00:20 raspberrypi kernel: [193219.314390] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 22 00:00:20 raspberrypi kernel: [207619.939983] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 22 04:00:20 raspberrypi kernel: [222019.662578] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 22 08:58:54 raspberrypi kernel: [239933.801494] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 22 12:00:19 raspberrypi kernel: [250819.417679] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 22 16:00:20 raspberrypi kernel: [265219.816146] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 22 20:00:20 raspberrypi kernel: [279620.458547] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 23 00:00:20 raspberrypi kernel: [294020.066337] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 23 04:00:20 raspberrypi kernel: [308420.471800] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 23 08:00:20 raspberrypi kernel: [322820.903216] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 23 12:00:20 raspberrypi kernel: [337220.452950] cma: cma_alloc: alloc failed, req-size: 1 pages, ret: -16
Jan 23 13:13:24 raspberrypi kernel: [ 0.000000] Booting Linux on physical CPU 0x0
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
A l'heure actuelle, je ne trouve aucune solution mise ร part un reboot du systรจme
Pas tรฉrrible pour la sdcards sur la longueur. Nous allons faire ce reboot via crontab.
# nano /opt/reco/reboot.sh
# chmod +x reboot.sh
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#!/usr/bin/env bash
screen -X -S recofacial kill
sleep 20
/sbin/shutdown -r now
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# crontab -e (reboot miniuit tous les jours)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
0 0 * * * /opt/reco/reboot.sh >/dev/null 2>&1
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐๐๐ข๐ญ ๐ฃ๐ฎ๐ข๐ฅ๐ฅ๐๐ญ ๐๐๐๐ : 3 fois sur 5 nous avons cette erreur au reboot de la Pi
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
root@raspberrypi:/opt/reco# python3 reco.py --cpus 4
Traceback (most recent call last):
File "reco.py", line 3, in <module>
import face_recognition
File "/usr/local/lib/python3.5/dist-packages/face_recognition/__init__.py", line 7, in <module>
from .api import load_image_file, face_locations, batch_face_locations, face_landmarks, face_encodings, compare_faces, face_distance
File "/usr/local/lib/python3.5/dist-packages/face_recognition/api.py", line 17, in <module>
pose_predictor_68_point = dlib.shape_predictor(predictor_68_point_model)
RuntimeError: Error deserializing object of type short
while deserializing a floating point number.
while deserializing a dlib::matrix
while deserializing object of type std::vector
while deserializing object of type std::vector
while deserializing object of type std::vector
root@raspberrypi:/opt/reco#
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ce problรจme pourrait etre du ร la carte micro SD, corruption?
pour pallier le problรจme, il faut reboot jusqu'a ce que le systeme (carte sd?) soit ok
et donc le programme pourra รชtre lancรฉ!
la solution: arreter de reboot toute les nuits. mettre un reboot du prog sur systemd
=============
Restart=always
RuntimeMaxSec=604800
=============
๐ฒ๐ฑ๐ถ๐ : Rigolo.. Adrian Rosebrock recommande aussi
d'utiliser un script bash puis d'appeller un script python

โโโโ ๐ข๐จ๐ฉ๐๐ฅ๐ง๐จ๐ฅ๐ ๐ฃ๐ข๐ฅ๐ง๐
โ ๐ฌ๐ฌ๐ก ๐ฉ๐๐ฌ๐ฌ๐ฐ๐จ๐ซ๐๐ฅ๐๐ฌ๐ฌ
(Depuis rpi recofacial)
# ssh-keygen
Enter passphrase (empty for no passphrase): on laisse vide
# ssh-copy-id user@ip_relai
normalement nous pouvons รชtre log passwordless
# ssh user@ip_relai
source : https://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login
โ ๐ฌ๐๐ซ๐ข๐ฉ๐ญ ๐ฉ๐ฒ๐ญ๐ก๐จ๐ง ๐ซ๐๐๐จ.๐ฉ๐ฒ
Pas besoin d'utiliser de librairies comme "paramiko"
juste quelques lignes suffisent avec subprocess
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
import subprocess
import sys
...
HOST="pi@192.168.1.24"
COMMAND="sudo python relay.py"
...
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND])
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
voir : hg commit nยฐ 13 et 15"
source : https://stackoverflow.com/questions/28411960/execute-a-command-on-remote-machine-in-python/28413657#28413657
sinon pour paramiko (mais on l'utilise pas!) :
* https://github.com/paramiko/paramiko
* https://blog.ruanbekker.com/blog/2018/04/23/using-paramiko-module-in-python-to-execute-remote-bash-commands/
* https://stackoverflow.com/questions/3586106/perform-commands-over-ssh-with-python (best!)
# pip3 install paramiko
โ ๐๐ข ๐๐๐ฅ๐๐ฒ
voir guide install basics rpi puis,
$ cd ~
$ nano relay.py
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, GPIO.LOW)
time.sleep(4)
GPIO.output(17, GPIO.HIGH)
GPIO.cleanup()
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
source : https://github.com/teroknor01/relay_pi/blob/master/relay.py
$ chmod +x relay.py
โค GPIO.setwarnings(False)
on dรฉsactive log warning ร cause de
/home/pi/relay.py:7: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
car le trigger s'active hyper rapidement avec la boucle for
โค time.sleep(4)
4 secondes c'est le temps durant lequel on resterait appuyer
sur l'interrupteur de la porte
connection PIN photos



โ ๐๐๐๐จ๐จ๐ญ ๐๐ข ๐๐๐ฅ๐๐ฒ
Etrange aprรจs plusieurs jours
le temps de latence augmente sur la commande SSH
un reboot daily est nรฉcessaire
$ sudo nano /home/pi/reboot.sh
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#!/usr/bin/env bash
sudo /sbin/shutdown -r now
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
$ sudo chmod +x reboot.sh
$ crontab -e (reboot miniuit tous les jours)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
0 0 * * * /home/pi/reboot.sh >/dev/null 2>&1
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐๐๐๐๐๐๐๐๐ ๐๐ ๐๐๐๐๐๐ ๐๐๐๐
By mirroring /dev/fb0 onto /dev/fb1, we can take advantage of the GPU for hardware accelrated video playback.
fbcp takes a snapshot of /dev/fb0, copies it to /dev/fb1 and waits 25ms before repeating.
Snapshotting takes ~10ms and with a 25ms delay it gives roughly 1000/(10+25) = 28fps
CPU usage: ~2% Note: Snapshot and /dev/fb1 driver refresh is not syncronized.
If you have a TFT display , you must use omxplayer and fbcp together
fbcp has to run in the background.
Il est impossible out of the box d'utiliser omxplayer.
omxplayer utilise le fb0 (hdmi) et rien d'autre..
la seule solution c'est de copier le flux du fb0 vers fb1
-----------
๐๐๐๐ผ๐พ๐๐ ๐๐ ๐๐๐ (commun aux 2 mรฉthodes ci-dessous)
mettre un delay pour l'execution du script dans la crontab
pour รชtre certain que le shell soit terminer ร 100%
puis mettre de couleur noir le shell :p black is black.
# cd ~
# nano clear.sh
# chmod +x clear.sh
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#!/usr/bin/env bash
TERM=linux setterm -foreground black -clear all >/dev/tty1
# la commande dd ci-dessous fonctionne, mais me semble un poil aggressif?
# dd if=/dev/zero of=/dev/fb0
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# crontab -e
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
@reboot sleep 120 && /root/clear.sh
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
https://raspberrypi.stackexchange.com/questions/3268/how-to-disable-local-terminal-showing-through-when-playing-video/3269#3269
โโโโโโ ๐๐๐ (๐ณ๐ฟ๐ฎ๐บ๐ฒ ๐ฏ๐๐ณ๐ณ๐ฒ๐ฟ ๐ถ๐บ๐ฎ๐ด๐ฒ ๐๐ถ๐ฒ๐๐ฒ๐ฟ)
๐๐ (๐ณ๐ฟ๐ฎ๐บ๐ฒ ๐ฏ๐๐ณ๐ณ๐ฒ๐ฟ)
fb0 = HDMI
fb1 = LCD
On check si fb1 est lร
# ls /dev/fb*
๐ข๐๐ข๐ค๐๐ง๐
Je sais pas si c'est l'utilisation du LCD, mais le script crash
pour de la mรฉmoire avec le message suivant :
"picamera.exc.PiCameraMMALError: Failed to enable connection: Out of resources"
On augmente de 128MB ร 256MB
# raspi-config
Advanced options -> Memory split -> and set at least 256MB
source : https://raspberrypi.stackexchange.com/questions/26829/picamera-not-working
๐๐ฃ๐จ๐ฉ๐๐ก๐ก๐๐ฉ๐๐ค๐ฃ
# apt install fbi
Creation dossier contenant les visages qui seront afficher sur le LCD
# mkdir /recofacial/reco/lcd
โ ๐พ๐ค๐ข๐ข๐๐ฃ๐๐ ๐๐ฝ๐ ๐ฅ๐ง๐๐ฃ๐๐๐ฅ๐๐ก๐
# fbi -T 1 -d /dev/fb1 -noverbose -t 5 -1 -once /opt/reco/lcd/{}.jpg
๐๐
๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป ๐ณ๐น๐ฎ๐ด๐:
-T 1 = console tty nยฐ1 (nous avons 6 tty, switch entre-eux [Ctrl]+[Alt][F1-6])
-d = device sur framebuffer1 , le lcd
-t 5 -1 = durรฉe affichage image 5 secondes et -1 termine le loop de FBI, donc รฉcran noir
โโโโโโ ๐ข๐ ๐ซ๐ฃ๐๐๐ฌ๐๐ฅ
omxplayer est un excellent sur unix, il est super lรฉger
Creation dossier contenant les visages qui seront afficher sur le LCD
# mkdir /recofacial/reco/lcd
# apt install omxplayer
Puis dans le script python reco
os.system("omxplayer --orientation 270 /opt/reco/lcd/{}.mp4".format(name))
Je n'utilise pas le flag : -b
qui permet un black screen, vue que j'ai dรฉjร black la console dans le boot
sa permet peut-etre d'รฉconomiser du CPU sur omxplayer.

โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐๐ฅ๐๐๐ง๐๐ข๐ก ๐ ๐๐ก๐ ๐ฉ๐๐๐๐ข
๐ข๐๐ฆ - ๐ฐ๐ฎ๐ฝ๐๐๐ฟ๐ฒ ๐ฒ๐ฐ๐ฟ๐ฎ๐ป ๐ฝ๐ฐ (๐๐ถ๐บ๐ถ๐น๐ฎ๐ถ๐ฟ๐ฒ ๐๐ฟ๐ฎ๐ฝ๐)
Tรฉlรฉcharger OBS
https://obsproject.com/fr
๐๐ถ๐๐ฎ๐ด๐ฒ๐ฏ๐ฑ
Utiliser le site suivant pour faire un visage 3D
http://cvl-demos.cs.nott.ac.uk/vrn/index.php
puis filmer l'รฉcran avec OBS
๐ฆ๐ข๐ก๐ฌ ๐ฉ๐๐๐๐ฆ
utiliser les templates "lcd"
dans les FX puis dans le render
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Nous pouvons creer un script (python, bash, etc..) qui porte simplement le nom de la personne :-)
Pleins d'utilisation !
os.system("mon logiciel /opt/reco/lcd/{}.mp4".format(name))
os.system("mon logiciel /opt/reco/lcd/{}.mp3".format(name))
os.system("mon logiciel /opt/reco/lcd/{}.txt".format(name))
os.system("mon logiciel /opt/reco/lcd/{}.sh".format(name))
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐๐๐จ๐ซ ๐ฃ๐ข๐ฆ๐๐ง๐๐
๐๐๐๐ค๐ก๐๐จ: Comme l'indique Adrian, il s'agit un rรฉseaux neurones
prรฉ entainer sur des millions de visages (majoritairement blanc)
pour calculer les 128D. Il recommande d'entrainer le rรฉseaux neurones
sur nos propres visages pour รฉviter de faux positif.
๐๐ช๐๐จ๐ฉ๐๐ค๐ฃ ๐ฉ๐ค๐ข๐ข๐ฎ
Hi, Adrian.
Always thanks for your wonderful article.
I have tested your code for a week.
It was working for small dataset(1~2 people face).
But when I increased number of people(upto 10),
it looked unstable sometims.
๐๐๐ฅ๐ค๐ฃ๐จ๐
Once you start getting more and more people in your dataset
this method will start to fail. Keep in mind that weโre
leveraging a pre-trained network here to compute the 128-d
facial embeddings. Try instead fine-tuning the network itself
on the people you want to recognize to increase accuracy.
source : https://www.pyimagesearch.com/2018/09/24/opencv-face-recognition/#comment-485420
ajuster la tolรฉrance pour รฉviter les faux positives
https://github.com/ageitgey/face_recognition/wiki/Face-Recognition-Accuracy-Problems
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ง๐ข๐๐ข
โค ๐๐จ๐ฎ๐๐ฅ๐ ๐๐๐๐ญ๐๐ฎ๐ซ (new)
" pour de la double auth,
pourquoi ne pas utiliser le probe request wifi, ou du bluetooth
regarder mes projets probe request python "
rpi zรฉro bluetooth. smartphone auto connect bluetooth (check nouveau device connected) ouvre la porte
https://towardsdatascience.com/real-time-face-liveness-detection-with-python-keras-and-opencv-c35dc70dafd3
https://www.youtube.com/watch?v=arQN6w0fZw8&feature=youtu.be
https://www.pyimagesearch.com/2019/03/11/liveness-detection-with-opencv
https://github.com/ageitgey/face_recognition/issues/371
โค๐๐๐ญ๐๐ฌ๐๐ญ๐ฌ ๐๐จ๐ซ ๐ฆ๐๐๐ก๐ข๐ง๐ ๐ฅ๐๐๐ซ๐ง๐ข๐ง๐
https://www.datasetlist.com/
โค๐๐๐๐ผ๐บ๐ฎ๐๐ถ๐ฐ ๐ ๐ฎ๐ฐ๐ต๐ถ๐ป๐ฒ ๐๐ฒ๐ฎ๐ฟ๐ป๐ถ๐ป๐ด
https://www.makeml.app/?ref=producthunt
โค๐๐๐๐๐ ๐๐๐๐๐ง๐ฅ๐๐ค๐จ๐ (serrure electrique comme au bureau)
https://www.manomano.fr/serrure-electrique-2266
https://youtu.be/-dMSBzsO2Qw
โค๐ฐ๐ฟ๐ผ๐ฝ
https://github.com/theidentity/Face-Tracker/blob/master/detect_faces.py#L11
https://github.com/ageitgey/face_recognition/blob/master/examples/blur_faces_on_webcam.py#L35
โค๐๐ฒ๐ ๐ป๐ฎ๐บ๐ฒ๐ ๐ณ๐ฟ๐ผ๐บ ๐ป๐ฎ๐บ๐ฒ ๐ณ๐ผ๐น๐ฑ๐ฒ๐ฟ ๐ถ๐ป๐๐๐ฒ๐ฎ๐ฑ ๐ผ๐ณ ๐ณ๐ถ๐น๐ฒ๐ป๐ฎ๐บ๐ฒ
https://github.com/ManishaNatarajan/Facial-Recognition/blob/master/get_encodings.py
https://github.com/ageitgey/face_recognition/issues/599#issuecomment-417850005
https://github.com/jrosebr1/imutils
โค๐จ๐๐ถ๐น๐ถ๐๐ฒ๐ฟ ๐ฆ๐ค๐ ๐ฝ๐ผ๐๐ฟ ๐๐๐ผ๐ฐ๐ธ๐ฒ๐ฟ ๐น๐ฒ๐ ๐ญ๐ฎ๐ด๐
https://github.com/Nakroma/facial_recognition_system
https://github.com/ageitgey/face_recognition/issues/403#issuecomment-376136244
https://github.com/vearutop/face-postgre
https://github.com/d-demirci/face-postgre
โค๐๐จ๐
https://github.com/TheDogeOfTheInternet/ModFaceMatch
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐๐๐๐ง๐จ๐ฅ๐๐ฆ / ๐ฆ๐ข๐จ๐ฅ๐๐๐ฆ
โค๐๐ง๐ฌ๐ญ๐๐ฅ๐ฅ๐๐ญ๐ข๐จ๐ง
https://robotzero.one/face-recognition-party-greeter-raspberry-pi/
https://gist.github.com/ageitgey/1ac8dbe8572f3f533df6269dab35df65
โค๐๐ข๐ฏ๐๐ซ๐ฌ
https://twitter.com/techinsider/status/1114222166713741312?s=21
https://blog.csdn.net/qq_30460905/article/details/80864081
https://github.com/ageitgey/face_recognition/issues/501#issuecomment-395716780
https://twitter.com/shirokunet/status/1174322070265556993?s=12
โค๐๐ผ๐บ๐บ๐ฒ๐ป๐ ๐๐๐๐ ๐ฒ๐ ๐๐ฟ๐ฎ๐ถ๐ ๐น๐ฒ๐ ๐ญ๐ฎ๐ด ๐ฑ๐ถ๐บ๐ฒ๐ป๐๐ถ๐ผ๐ป๐
http://dlib.net/dnn_metric_learning_on_images_ex.cpp.html