Socket
Socket
Sign inDemoInstall

insightface-paddle

Package Overview
Dependencies
7
Maintainers
2
Alerts
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies

Install

    insightface-paddle

A toolkit for face detection and recognition powered by PaddlePaddle.


Maintainers
2

Readme

简体中文 | English


InsightFace Paddle

1. Introduction

1.1 Overview

InsightFacePaddle is an open source deep face detection and recognition toolkit, powered by PaddlePaddle. InsightFacePaddle provide three related pretrained models now, include BlazeFace for face detection, ArcFace and MobileFace for face recognition.

  • This tutorial is mainly about Whl package inference using PaddleInfernence.
  • For face recognition task, please refer to: Face recognition tuturial.
  • For face detection task, please refer to: Face detection tuturial.

1.2 Benchmark

For face detection task, on WiderFace dataset, the following table shows mAP, speed and time cost for BlazeFace.

Model structureModel sizeWiderFace mAPCPU time costGPU time cost
BlazeFace-FPN-SSH-Paddle0.65MB0.9187/0.8979/0.816831.7ms5.6ms
RetinaFace1.68MB-/-/0.825182.0ms17.4ms

For face recognition task, on MSAM dataset, the following table shows precision, speed and time cost for MobileFaceNet.

Model structurelfwcfp_fpagedb30CPU time costGPU time cost
MobileFaceNet-Paddle0.99450.93430.96134.3ms2.3ms
MobileFaceNet-mxnet0.99500.88940.95917.3ms4.7ms

Benchmark environment:

  • CPU: Intel(R) Xeon(R) Gold 6184 CPU @ 2.40GHz
  • GPU: a single NVIDIA Tesla V100

Note: Performance of RetinaFace is tested using script test.py. The image shape is modified to 640x480 here. Performance of MobileFaceNet-mxnet is tested using script verification.py.

1.3 Visualization

One example result predicted by InsightFacePaddle is as follow. Please refer to the Demo for more.

1.4 Community

Scan the QR code below with your QQ (QQ group number: 705899115) to discuss more about deep learning together.

2. Installation

  1. Install PaddlePaddle

PaddlePaddle 2.1 or later is required for InsightFacePaddle. You can use the following steps to install PaddlePaddle.

# for GPU
pip3 install paddlepaddle-gpu

# for CPU
pip3 install paddlepaddle

For more details about installation. please refer to PaddlePaddle.

  1. Install requirements

InsightFacePaddle dependencies are listed in requirements.txt, you can use the following command to install the dependencies.

pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple
  1. Install InsightFacePaddle
  • [Recommanded] You can use pip to install the lastest version InsightFacePaddle from pypi.
pip3 install --upgrade insightface-paddle
  • You can also build whl package and install by following commands.
cd ./InsightFacePaddle
python3 setup.py bdist_wheel
pip3 install dist/*

3. Quick Start

InsightFacePaddle support two ways of use, including Commad Line and Python API.

3.1 Command Line

You can use InsightFacePaddle in Command Line.

3.1.1 Get help

You can get the help about InsightFacePaddle by following command.

insightfacepaddle -h

The args are as follows:

argstypedefaulthelp
det_modelstrBlazeFaceThe detection model.
rec_modelstrMobileFaceThe recognition model.
use_gpuboolTrueWhether use GPU to predict. Default by True.
enable_mkldnnboolFalseWhether use MKLDNN to predict, valid only when --use_gpu is False. Default by False.
cpu_threadsint1The num of threads with CPU, valid only when --use_gpu is False and --enable_mkldnn is True. Default by 1.
inputstr-The path of video to be predicted. Or the path or directory of image file(s) to be predicted.
outputstr-The directory to save prediction result.
detboolFalseWhether to detect.
det_threshfloat0.8The threshold of detection postprocess. Default by 0.8.
recboolFalseWhether to recognize.
indexstr-The path of index file.
cdd_numint5The number of candidates in the recognition retrieval. Default by 5.
rec_threshfloat0.45The threshold of match in recognition, use to remove candidates with low similarity. Default by 0.45.
max_batch_sizeint1The maxium of batch_size to recognize. Default by 1.
build_indexstr-The path of index to be build.
img_dirstr-The img(s) dir used to build index.
labelstr-The label file path used to build index.
3.1.2 Build index

If use recognition, before start predicting, you have to build the index.

insightfacepaddle --build_index ./demo/friends/index.bin --img_dir ./demo/friends/gallery --label ./demo/friends/gallery/label.txt

An example used to build index is as follows:

3.1.3 Predict
  1. Detection only
  • Image(s)

Use the image below to predict:

The prediction command:

insightfacepaddle --det --input ./demo/friends/query/friends1.jpg --output ./output

The result is under the directory ./output:

  • Video
insightfacepaddle --det --input ./demo/friends/query/friends.mp4 --output ./output
  1. Recognition only
  • Image(s)

Use the image below to predict:

The prediction command:

insightfacepaddle --rec --index ./demo/friends/index.bin --input ./demo/friends/query/Rachel.png

The result is output in the terminal:

INFO:root:File: Rachel., predict label(s): ['Rachel']
  1. Detection and recognition
  • Image(s)

Use the image below to predict:

The prediction command:

insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends2.jpg --output ./output

The result is under the directory ./output:

  • Video
insightfacepaddle --det --rec --index ./demo/friends/index.bin --input ./demo/friends/query/friends.mp4 --output ./output

3.2 Python

You can use InsightFacePaddle in Python. First, import InsightFacePaddle and logging because InsightFacePaddle using that to control log.

import insightface_paddle as face
import logging
logging.basicConfig(level=logging.INFO)
3.2.1 Get help
parser = face.parser()
help_info = parser.print_help()
print(help_info)
3.2.2 Building index
parser = face.parser()
args = parser.parse_args()
args.build_index = "./demo/friends/index.bin"
args.img_dir = "./demo/friends/gallery"
args.label = "./demo/friends/gallery/label.txt"
predictor = face.InsightFace(args)
predictor.build_index()
3.2.3 Prediction
  1. Detection only
  • Image(s)
parser = face.parser()
args = parser.parse_args()

args.det = True
args.output = "./output"
input_path = "./demo/friends/query/friends1.jpg"

predictor = face.InsightFace(args)
res = predictor.predict(input_path)
print(next(res))
  • NumPy
import cv2

parser = face.parser()
args = parser.parse_args()

args.det = True
args.output = "./output"
path = "./demo/friends/query/friends1.jpg"
img = cv2.imread(path)[:, :, ::-1]

predictor = face.InsightFace(args)
res = predictor.predict(img)
print(next(res))

The prediction result saved as "./output/tmp.png".

  • Video
parser = face.parser()
args = parser.parse_args()

args.det = True
args.output = "./output"
input_path = "./demo/friends/query/friends.mp4"

predictor = face.InsightFace(args)
res = predictor.predict(input_path)
for _ in res:
    print(_)
  1. Recognition only
  • Image(s)
parser = face.parser()
args = parser.parse_args()

args.rec = True
args.index = "./demo/friends/index.bin"
input_path = "./demo/friends/query/Rachel.png"

predictor = face.InsightFace(args)
res = predictor.predict(input_path, print_info=True)
next(res)
  • NumPy
import cv2

parser = face.parser()
args = parser.parse_args()

args.rec = True
args.index = "./demo/friends/index.bin"
path = "./demo/friends/query/Rachel.png"
img = cv2.imread(path)[:, :, ::-1]

predictor = face.InsightFace(args)
res = predictor.predict(img, print_info=True)
next(res)
  1. Detection and recognition
  • Image(s)
parser = face.parser()
args = parser.parse_args()

args.det = True
args.rec = True
args.index = "./demo/friends/index.bin"
args.output = "./output"
input_path = "./demo/friends/query/friends2.jpg"

predictor = face.InsightFace(args)
res = predictor.predict(input_path, print_info=True)
next(res)
  • NumPy
import cv2

parser = face.parser()
args = parser.parse_args()

args.det = True
args.rec = True
args.index = "./demo/friends/index.bin"
args.output = "./output"
path = "./demo/friends/query/friends2.jpg"
img = cv2.imread(path)[:, :, ::-1]

predictor = face.InsightFace(args)
res = predictor.predict(img, print_info=True)
next(res)

The prediction result saved as "./output/tmp.png".

  • Video
parser = face.parser()
args = parser.parse_args()

args.det = True
args.rec = True
args.index = "./demo/friends/index.bin"
args.output = "./output"
input_path = "./demo/friends/query/friends.mp4"

predictor = face.InsightFace(args)
res = predictor.predict(input_path, print_info=True)
for _ in res:
    pass

Keywords

FAQs


Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc