• Stars
    star
    2,199
  • Rank 20,976 (Top 0.5 %)
  • Language
    Jupyter Notebook
  • License
    MIT License
  • Created almost 7 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MTCNN face detection implementation for TensorFlow, as a PIP package.

MTCNN

https://travis-ci.org/ipazc/mtcnn.svg?branch=master

Implementation of the MTCNN face detector for Keras in Python3.4+. It is written from scratch, using as a reference the implementation of MTCNN from David Sandberg (FaceNet's MTCNN) in Facenet. It is based on the paper Zhang, K et al. (2016) [ZHANG2016].

https://github.com/ipazc/mtcnn/raw/master/result.jpg

INSTALLATION

Currently it is only supported Python3.4 onwards. It can be installed through pip:

$ pip install mtcnn

This implementation requires OpenCV>=4.1 and Keras>=2.0.0 (any Tensorflow supported by Keras will be supported by this MTCNN package). If this is the first time you use tensorflow, you will probably need to install it in your system:

$ pip install tensorflow

or with conda

$ conda install tensorflow

Note that tensorflow-gpu version can be used instead if a GPU device is available on the system, which will speedup the results.

USAGE

The following example illustrates the ease of use of this package:

>>> from mtcnn import MTCNN
>>> import cv2
>>>
>>> img = cv2.cvtColor(cv2.imread("ivan.jpg"), cv2.COLOR_BGR2RGB)
>>> detector = MTCNN()
>>> detector.detect_faces(img)
[
    {
        'box': [277, 90, 48, 63],
        'keypoints':
        {
            'nose': (303, 131),
            'mouth_right': (313, 141),
            'right_eye': (314, 114),
            'left_eye': (291, 117),
            'mouth_left': (296, 143)
        },
        'confidence': 0.99851983785629272
    }
]

The detector returns a list of JSON objects. Each JSON object contains three main keys: 'box', 'confidence' and 'keypoints':

  • The bounding box is formatted as [x, y, width, height] under the key 'box'.
  • The confidence is the probability for a bounding box to be matching a face.
  • The keypoints are formatted into a JSON object with the keys 'left_eye', 'right_eye', 'nose', 'mouth_left', 'mouth_right'. Each keypoint is identified by a pixel position (x, y).

Another good example of usage can be found in the file "example.py." located in the root of this repository. Also, you can run the Jupyter Notebook "example.ipynb" for another example of usage.

BENCHMARK

The following tables shows the benchmark of this mtcnn implementation running on an Intel i7-3612QM CPU @ 2.10GHz, with a CPU-based Tensorflow 1.4.1.

  • Pictures containing a single frontal face:
Image size Total pixels Process time FPS
460x259 119,140 0.118 seconds 8.5
561x561 314,721 0.227 seconds 4.5
667x1000 667,000 0.456 seconds 2.2
1920x1200 2,304,000 1.093 seconds 0.9
4799x3599 17,271,601 8.798 seconds 0.1
  • Pictures containing 10 frontal faces:
Image size Total pixels Process time FPS
474x224 106,176 0.185 seconds 5.4
736x348 256,128 0.290 seconds 3.4
2100x994 2,087,400 1.286 seconds 0.7

MODEL

By default the MTCNN bundles a face detection weights model.

The model is adapted from the Facenet's MTCNN implementation, merged in a single file located inside the folder 'data' relative to the module's path. It can be overriden by injecting it into the MTCNN() constructor during instantiation.

The model must be numpy-based containing the 3 main keys "pnet", "rnet" and "onet", having each of them the weights of each of the layers of the network.

For more reference about the network definition, take a close look at the paper from Zhang et al. (2016) [ZHANG2016].

LICENSE

MIT License.

REFERENCE

[ZHANG2016](1, 2) Zhang, K., Zhang, Z., Li, Z., and Qiao, Y. (2016). Joint face detection and alignment using multitask cascaded convolutional networks. IEEE Signal Processing Letters, 23(10):1499–1503.

More Repositories

1

lstm_autoencoder

LSTM Autoencoder that works with variable timesteps
Python
15
star
2

pyzip

Python ZIP module for simple zip/unzip of custom elements on the fly. It is interfaced as a Dict for ease of use.
Python
12
star
3

vrpwrp

VRPWRP (Vision-algorithms Requests Processing Wrappers), a pip package for running deep-learning Computer Vision algorithms from the cloud.
Python
7
star
4

deepevolution

Deepevolution is a PIP package for evolving tensorflow keras models with a genetic algorithm towards fitting a fitness function.
Python
6
star
5

pyfolder

Python package for managing filesystem folders as dicts.
Python
5
star
6

proxyup

ProxyUp is a PIP package to retrieve public proxies on the fly.
Python
5
star
7

nanoblocks

Just another Nano cryptocurrency python package
Python
3
star
8

flasked

PIP package for building REST APIs, based on flask_restful and flask.
Jupyter Notebook
3
star
9

pymdict

mongodict is a python's dictionary supported by a mongo db.
Python
3
star
10

dhub

CLI for mldatahub, for Python 3
Python
2
star
11

pygfolder

Simple Python Google Drive folder manager as a dictionary. (Ps: manage your google drive content as a python dictionary!)
Python
2
star
12

mldatahub

Machine Learning data HUB for storing datasets.
Python
1
star
13

codehint

PIP package for generating hints of functions' signature during runtime, on the python interpreter itself.
Python
1
star
14

CvMlModule

Isolated module to perform CV & ML against images, with a standarized input and output.
Python
1
star
15

dbinfilter

Database filterer. Performs filtering of data in order to automatically label it.
Python
1
star
16

bcastInspector

This broadcast messages inspector is intended to be a network watchdog and to make alarms when broadcast storms are alive.
C
1
star