Face Detection & Age Gender & Expression & Recognition

Overview

FaceLib:

  • use for Detection, Facial Expression, Age & Gender Estimation and Recognition with PyTorch
  • this repository works with CPU and GPU(Cuda)

Installation

  • Clone and install with this command:
    • with pip and automatic installs everything all you need

      • pip install git+https://github.com/sajjjadayobi/FaceLib.git
    • or with cloning the repo and install required packages

      • git clone https://github.com/sajjjadayobi/FaceLib.git
  • you can see the required packages in requirements.txt

How to use:

  • the simplest way is at example_notebook.ipynb
  • for low-level usage check out the following sections
  • if you have an NVIDIA GPU don't change the device param if not use cpu

1. Face Detection: RetinaFace

  • you can use these backbone networks: Resnet50, mobilenet
    • default weights and model is mobilenet and it will be automatically download
  • for more details, you can see the documentation
  • The following example illustrates the ease of use of this package:
 from facelib import FaceDetector
 detector = FaceDetector()
 boxes, scores, landmarks = detector.detect_faces(image)
  • FaceDetection live on your webcam
   from facelib import WebcamFaceDetector
   detector = WebcamFaceDetector()
   detector.run()

WiderFace Validation Performance on a single scale When using Mobilenet for backbone

Style easy medium hard
Pytorch (same parameter with Mxnet) 88.67% 87.09% 80.99%
Pytorch (original image scale) 90.70% 88.16% 73.82%
Mxnet(original image scale) 89.58% 87.11% 69.12%

2. Face Alignment: Similar Transformation

  • always use detect_align it gives you better performance
  • you can use this module like this:
    • detect_align instead of detect_faces
 from facelib import FaceDetector
 detector = FaceDetector()
 faces, boxes, scores, landmarks = detector.detect_align(image)
  • for more details read detect_image function documentation
  • let's see a few examples
Original Aligned & Resized Original Aligned & Resized
image image image image

3. Age & Gender Estimation:

  • I used UTKFace DataSet for Age & Gender Estimation
    • default weights and model is ShufflenetFull and it will be automatically download
  • you can use this module like this:
   from facelib import FaceDetector, AgeGenderEstimator

   face_detector = FaceDetector()
   age_gender_detector = AgeGenderEstimator()

   faces, boxes, scores, landmarks = face_detector.detect_align(image)
   genders, ages = age_gender_detector.detect(faces)
   print(genders, ages)
  • AgeGenderEstimation live on your webcam
   from facelib import WebcamAgeGenderEstimator
   estimator = WebcamAgeGenderEstimator()
   estimator.run()

4. Facial Expression Recognition:

  • Facial Expression Recognition using Residual Masking Network
    • default weights and model is densnet121 and it will be automatically download
  • face size must be (224, 224), you can fix it in FaceDetector init function with face_size=(224, 224)
  from facelib import FaceDetector, EmotionDetector
 
  face_detector = FaceDetector(face_size=(224, 224))
  emotion_detector = EmotionDetector()

  faces, boxes, scores, landmarks = face_detector.detect_align(image)
  list_of_emotions, probab = emotion_detector.detect_emotion(faces)
  print(list_of_emotions)
  • EmotionDetector live on your webcam
   from facelib import WebcamEmotionDetector
   detector = WebcamEmotionDetector()
   detector.run()
  • on my Webcam 🙂

Alt Text

5. Face Recognition: InsightFace

  • This module is a reimplementation of Arcface(paper), or Insightface(Github)

Pretrained Models & Performance

  • IR-SE50
LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%) calfw(%) cplfw(%) vgg2_fp(%)
0.9952 0.9962 0.9504 0.9622 0.9557 0.9107 0.9386
  • Mobilefacenet
LFW(%) CFP-FF(%) CFP-FP(%) AgeDB-30(%) calfw(%) cplfw(%) vgg2_fp(%)
0.9918 0.9891 0.8986 0.9347 0.9402 0.866 0.9100

Prepare the Facebank (For testing over camera, video or image)

  • the faces images you want to detect it save them in this folder:

    Insightface/models/data/facebank/
              ---> person_1/
                  ---> img_1.jpg
                  ---> img_2.jpg
              ---> person_2/
                  ---> img_1.jpg
                  ---> img_2.jpg
    
  • you can save a new preson in facebank with 3 ways:

    • use add_from_webcam: it takes 4 images and saves them on facebank
       from facelib import add_from_webcam
       add_from_webcam(person_name='sajjad')
    • use add_from_folder: it takes a path with some images from just a person
       from facelib import add_from_folder
       add_from_folder(folder_path='./', person_name='sajjad')
    • or add faces manually (just face of a person not image of a person)
      • I don't suggest this

Using

  • default weights and model is mobilenet and it will be automatically download
    import cv2
    from facelib import FaceRecognizer, FaceDetector
    from facelib import update_facebank, load_facebank, special_draw, get_config
 
    conf = get_config()
    detector = FaceDetector()
    face_rec = FaceRecognizer(conf)
    face_rec.model.eval()
    
    # set True when you add someone new 
    update_facebank_for_add_new_person = False
    if update_facebank_for_add_new_person:
        targets, names = update_facebank(conf, face_rec.model, detector)
    else:
        targets, names = load_facebank(conf)

    image = cv2.imread(your_path)
    faces, boxes, scores, landmarks = detector.detect_align(image)
    results, score = face_rec.infer(conf, faces, targets)
    print(names[results.cpu()])
    for idx, bbox in enumerate(boxes):
        special_draw(image, bbox, landmarks[idx], names[results[idx]+1], score[idx])
  • Face Recognition live on your webcam
   from facelib import WebcamVerify
   verifier = WebcamVerify(update=True)
   verifier.run()
  • example of run this code:

image

Reference:

Owner
Sajjad Ayobi
Data Science Lover, a Little Geek
Sajjad Ayobi
PSGAN running with ncnn⚡妆容迁移/仿妆⚡Imitation Makeup/Makeup Transfer⚡

PSGAN running with ncnn⚡妆容迁移/仿妆⚡Imitation Makeup/Makeup Transfer⚡

WuJinxuan 144 Dec 26, 2022
[ICCV 2021] Deep Hough Voting for Robust Global Registration

Deep Hough Voting for Robust Global Registration, ICCV, 2021 Project Page | Paper | Video Deep Hough Voting for Robust Global Registration Junha Lee1,

57 Nov 28, 2022
Distance correlation and related E-statistics in Python

dcor dcor: distance correlation and related E-statistics in Python. E-statistics are functions of distances between statistical observations in metric

Carlos Ramos Carreño 108 Dec 27, 2022
A task-agnostic vision-language architecture as a step towards General Purpose Vision

Towards General Purpose Vision Systems By Tanmay Gupta, Amita Kamath, Aniruddha Kembhavi, and Derek Hoiem Overview Welcome to the official code base f

AI2 79 Dec 23, 2022
Self-Learning - Books Papers, Courses & more I have to learn soon

Self-Learning This repository is intended to be used for personal use, all rights reserved to respective owners, please cite original authors and ask

Achint Chaudhary 968 Jan 02, 2022
This project hosts the code for implementing the ISAL algorithm for object detection and image classification

Influence Selection for Active Learning (ISAL) This project hosts the code for implementing the ISAL algorithm for object detection and image classifi

25 Sep 11, 2022
MoveNet Single Pose on OpenVINO

MoveNet Single Pose tracking on OpenVINO Running Google MoveNet Single Pose models on OpenVINO. A convolutional neural network model that runs on RGB

35 Nov 11, 2022
PyTorch code for Composing Partial Differential Equations with Physics-Aware Neural Networks

FInite volume Neural Network (FINN) This repository contains the PyTorch code for models, training, and testing, and Python code for data generation t

Cognitive Modeling 20 Dec 18, 2022
An experiment to bait a generalized frontrunning MEV bot

Honeypot 🍯 A simple experiment that: Creates a honeypot contract Baits a generalized fronturnning bot with a unique transaction Analyze bot behaviour

0x1355 14 Nov 24, 2022
pytorch implementation of dftd2 & dftd3

torch-dftd pytorch implementation of dftd2 [1] & dftd3 [2, 3] Install # Install from pypi pip install torch-dftd # Install from source (for developer

33 Nov 28, 2022
A 3D Dense mapping backend library of SLAM based on taichi-Lang designed for the aerial swarm.

TaichiSLAM This project is a 3D Dense mapping backend library of SLAM based Taichi-Lang, designed for the aerial swarm. Intro Taichi is an efficient d

XuHao 230 Dec 19, 2022
Official Repo of my work for SREC Nandyal Machine Learning Bootcamp

About the Bootcamp A 3-day Machine Learning Bootcamp organised by Department of Electronics and Communication Engineering, Santhiram Engineering Colle

MS 1 Nov 29, 2021
PyTorch code for EMNLP 2021 paper: Don't be Contradicted with Anything! CI-ToD: Towards Benchmarking Consistency for Task-oriented Dialogue System

PyTorch code for EMNLP 2021 paper: Don't be Contradicted with Anything! CI-ToD: Towards Benchmarking Consistency for Task-oriented Dialogue System

Libo Qin 25 Sep 06, 2022
The Python code for the paper A Hybrid Quantum-Classical Algorithm for Robust Fitting

About The Python code for the paper A Hybrid Quantum-Classical Algorithm for Robust Fitting The demo program was only tested under Conda in a standard

Anh-Dzung Doan 5 Nov 28, 2022
PyTorch implementation of Neural View Synthesis and Matching for Semi-Supervised Few-Shot Learning of 3D Pose

Neural View Synthesis and Matching for Semi-Supervised Few-Shot Learning of 3D Pose Release Notes The official PyTorch implementation of Neural View S

Angtian Wang 20 Oct 09, 2022
Dataset and Source code of paper 'Enhancing Keyphrase Extraction from Academic Articles with their Reference Information'.

Enhancing Keyphrase Extraction from Academic Articles with their Reference Information Overview Dataset and code for paper "Enhancing Keyphrase Extrac

15 Nov 24, 2022
这是一个yolox-pytorch的源码,可以用于训练自己的模型。

YOLOX:You Only Look Once目标检测模型在Pytorch当中的实现 目录 性能情况 Performance 实现的内容 Achievement 所需环境 Environment 小技巧的设置 TricksSet 文件下载 Download 训练步骤 How2train 预测步骤

Bubbliiiing 613 Jan 05, 2023
A Domain-Agnostic Benchmark for Self-Supervised Learning

DABS: A Domain Agnostic Benchmark for Self-Supervised Learning This repository contains the code for DABS, a benchmark for domain-agnostic self-superv

Alex Tamkin 81 Dec 09, 2022
SpiroMask: Measuring Lung Function Using Consumer-Grade Masks

SpiroMask: Measuring Lung Function Using Consumer-Grade Masks Anonymised repository for paper submitted for peer review at ACM HEALTH (October 2021).

0 May 10, 2022
Code to accompany the paper "Finding Bipartite Components in Hypergraphs", which is published in NeurIPS'21.

Finding Bipartite Components in Hypergraphs This repository contains code to accompany the paper "Finding Bipartite Components in Hypergraphs", publis

Peter Macgregor 5 May 06, 2022