Face liveness detection and indentity recognition using fast and accurate convolutional neural networks is implemented in Pytorch. Also a Flask API and ready-to-use Dockerfile can be found in this repository.
This project uses Mediapipe for face detection and the face recognition model is borrowed from facenet-pytorch .The liveness detection model came from Deep Pixel-wise Binary Supervision for Face Presentation Attack Detection paper and, pre-trained models are published by authors.
Download .onnx models and put them in data/checkpoints
folder.
Note: If you have an internet connection, models will be downloaded automatically.
Run the following command to check liveness (and test are you Ryan Reynolds or not!)
$ python webcam_test.py
Note: Liveness score is between 0 and 1 and, in average, it is enough be greater than ~ 0.03 to be considered as a live image.
In the first step you need a facebank. So put some images (jpg, jpeg, png) in a folder and create facebank csv file using create_facebank.py
script:
$ python3 create_facebank.py --images ./data/images \
--checkpoint ./data/checkpoints/InceptionResnetV1_vggface2.onnx \
--output ./data/test.csv
--images: the path to the images folder
--checkpoint: the path to the resnet vggface2 onnx checkpoint
--output: the path to the output csv file
Now you can start the deployment process. Variables (models and facebank names) can be changed in app/.env
file:
DATA_FOLDER=data
RESNET=InceptionResnetV1_vggface2.onnx
DEEPPIX=OULU_Protocol_2_model_0_0.onnx
FACEBANK=test.csv
First build the docker image:
$ sudo docker build --tag face-demo .
Now run the image as a container:
$ sudo docker run -p 5000:5000 face-demo python3 -m flask run --host=0.0.0.0 --port=5000
Finally we can test our app using a python client. So for testing just run this:
# face-recognition-liveness/
$ cd ./app
$ python3 client.py --image ../data/images/reynolds_001.png --host localhost --port 5000 --service main