PyTorch implementations of various face detection algorithms (last updated on 2019-08-03).
import cv2, random
from detectors import DSFD
from utils import draw_bboxes, crop_thumbnail, draw_bbox
# load detector with device(cpu or cuda)
DET = DSFD(device='cpu')
# load image in RGB
img = cv2.imread('bts.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# get bboxes with some confidence in scales for image pyramid
bboxes = DET.detect_faces(img, conf_th=0.9, scales=[0.5, 1])
# and draw bboxes on your image
img_bboxed = draw_bboxes(img, bboxes, fill=0.2, thickness=3)
# or crop thumbnail of someone
i = random.randrange(0, len(bboxes))
img_thumb, bbox_thumb = crop_thumbnail(img, bboxes[i], padding=1, size=100)
# you can use 'bbox_thumb' as bbox in thumbnail-coordinate system.
img_thumb_bboxed = draw_bbox(img_thumb, bbox_thumb)
- MTCNN
./detectors/mtcnn/weights/pnet.npy
./detectors/mtcnn/weights/rnet.npy
./detectors/mtcnn/weights/onet.npy
- FaceBoxes
./detectors/faceboxes/weights/FaceBoxes.pth
./detectors/tinyface/weights/checkpoint_50.pth
./detectors/pyramidbox/weights/pyramidbox_120000_99.02.pth
./detectors/s3fd/weights/sfd_face.pth
./detectors/dsfd/weights/dsfd_vgg_0.880.pth
python demo_detect.py
Note that it shows bounding boxes only for default scale image without image pyramid. Number of bounding boxes ─ not detected faces ─ and minimum box sizes are as follows:
MTCNN | FaceBoxes | Tiny face | PyramidBox | S3FD | DSFD | |
---|---|---|---|---|---|---|
# of boxes | 210 | 28 | 686 | 512 | 475 | 528 |
minimum box size | 71 | 1136 | 138 | 109 | 108 | 113 |
minimum box size | 1046 | 27901 | 36912 | 24059 | 26711 | 15814 |
python demo_crop.py
- Minimum and maximum lengths of detected boxes are as follows:
MTCNN | Tiny face | S3FD | DSFD | |
---|---|---|---|---|
min length (pixel) | 000.0 | 000.0 | 000.0 | 000.0 |
max length (pixel) | 000.0 | 000.0 | 000.0 | 000.0 |
- MTCNN
- FaceBoxes
- Tiny Face
- PyramidBox
- S3FD
- DSFD