Batch Face Preprocessing for Modern Research
Project description
Batch Face for Modern Research
🚧Documentation under construction, check tests folder for more details. 🚧
This repo provides the out-of-box face detection and face alignment with batch input support and enables real-time application on CPU.
Features
- Batch input support for faster data processing.
- Smart API.
- Ultrafast with inference runtime acceleration.
- Automatically download pre-trained weights.
- Minimal dependencies.
Requirements
- Linux, Windows or macOS
- Python 3.5+ (it may work with other versions too)
- opencv-python
- PyTorch (>=1.0)
- ONNX (optional)
While not required, for optimal performance it is highly recommended to run the code using a CUDA enabled GPU.
Install
The easiest way to install it is using pip:
pip install git+https://github.com/elliottzheng/batch-face.git@master
No extra setup needs, most of the pretrained weights will be downloaded automatically.
Usage
You can clone the repo and run tests like this
python -m tests.camera
Face Detection
Detect face and five landmarks on single image
import cv2
from batch_face import RetinaFace
detector = RetinaFace(gpu_id=0)
img = cv2.imread("examples/obama.jpg")
faces = detector(img, cv=True) # set cv to False for rgb input, the default value of cv is False
box, landmarks, score = faces[0]
Running on CPU/GPU
In order to specify the device (GPU or CPU) on which the code will run one can explicitly pass the device id.
from batch_face import RetinaFace
# 0 means using GPU with id 0 for inference
# default -1: means using cpu for inference
detector = RetinaFace(gpu_id=0)
GPU(GTX 1080TI,batch size=1) | GPU(GTX 1080TI,batch size=750) | CPU(Intel(R) Core(TM) i7-7800X CPU @ 3.50GHz) | |
---|---|---|---|
FPS | 44.02405810720893 | 96.64058005582535 | 15.452635835550483 |
SPF | 0.022714852809906007 | 0.010347620010375976 | 0.0647138786315918 |
Batch input for faster detection
Detector with CUDA process batch input faster than the same amount of single input.
import cv2
from batch_face import RetinaFace
detector = RetinaFace()
img= cv2.imread('examples/obama.jpg')[...,::-1]
all_faces = detector([img,img]) # return faces list of all images
box, landmarks, score = all_faces[0][0]
Note: All the input images must of the same size, for input images with different size, please use detector.pseudo_batch_detect
.
Face Alignment
face alignment on single image
from batch_face import drawLandmark_multiple, LandmarkPredictor, RetinaFace
predictor = LandmarkPredictor(0)
detector = RetinaFace(0)
imgname = "examples/obama.jpg"
img = cv2.imread(imgname)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
faces = detector(img)
if len(faces) == 0:
print("NO face is detected!")
exit(-1)
# the first input for the predictor is a list of face boxes. [[x1,y1,x2,y2]]
results = predictor(faces, img, from_fd=True) # from_fd=True to convert results from our detection results to simple boxes
for face, landmarks in zip(faces, results):
img = drawLandmark_multiple(img, face[0], landmarks)
References
- Face Detection Network and pretrained model are from biubug6/Pytorch_Retinaface
- Face Alignment Network and pretrained model are from cunjian/pytorch_face_landmark
- Face Reconstruction Network and pretrained model are from cleardusk/3DDFA
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for batch_face-1.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90d3778db95f6b019ab594a4906f4f1073394107fb5bfb3a4056becd1aa12f56 |
|
MD5 | ef9ea46f5e34fdf8f2ed4053d0c797dc |
|
BLAKE2b-256 | 7b5827d3a2a50c5fa1ebb85926dd3a0e1341ae87721610db3a977e2a209d264b |