Skip to main content

Face detection wrapper using hybrid margin-based region of interest (MROI) approach."

Project description

Automatic Installation

You can install the hybrid MROI face detection wrapper using pip:

pip install mroi-fd

Manual Installation

This project is developed and tested on python version 3.7.4. Please check your python version using python --version. If your system has a different python version, you may want to consider using pyenv (See Using pyenv)

First, clone and cd into the repository:

git clone https://gitlab.com/ailabuser/bacha_hybrid_mroi_face_detection
cd bacha_hybrid_mroi_face_detection

On Windows:

Create a python virtual environment:

mkvirtualenv venv

Activate the virtual environment (deactivate to deactivate the virtual environment):

workon venv

Install all the required dependencies while still having the virtual environment active:

pip install -r requirements.txt

On Linux:

Create a python virtual environment:

virtualenv -p /usr/bin/python3 venv

Activate the virtual environment (deactivate to deactivate the virtual environment):

source venv/bin/activate

Install all the required dependencies while still having the virtual environment active:

pip install -r requirements.txt

Using pyenv (Linux, Windows, MacOS)

If your python version is not 3.7.4, you may want to use pyenv. After you have installed pyenv, install the specific python version. On Linux, this can be done by running the following command:

env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.4

Then, create a virtual environment:

pyenv virtualenv 3.7.4 bacha_mroi_face_detection

You can activate the virtual environment using pyenv like so:

pyenv activate bacha_mroi_face_detection

Description

The face detection technique used hybrid margin-based region of interest (MROI) approach. It is hybrid in the sense that the implementation runs one main routine to detect a face, but switch to an escape routine when the main routine fails. Using MROI increase the face detection speed by having the selected face detection algorithm to only consider a sub-region (where a face was previously detected) instead of the full frame.

There are three pre-defined selection of main routines available for you to use:

  1. Haar cascade classifier
  2. Joint cascade
  3. Multi-task Convolutional Neural Network (MTCNN)

When the main routine failed to detect a face, the implementation switch to the escape routine which runs template matching algorithm.

Furthermore, there are five possible different hybrid combinations of the face detection approach, in addition to a non-hybrid approach using only the main routine.

  1. Normal routine only (N)
  2. Normal routine with fixed-margin (FM)
  3. Normal routine with dynamic-margin (DM)
  4. Normal routine with escape routine (NTM)
  5. Normal routine with fixed-margin and escape routine (FMTM)
  6. Normal routine with dynamic-margin and escape routine (DMTM)

Three video sources are also supported:

  1. Webcam
  2. Kinect
  3. Video files

For example to use Haar cascade classifier as the main routine using FM approach while using image frames from your webcam, you can run the following on Linux (while having the virtual environment active):

./main.py webcam haar fm

You can run the program without any argument to print a help message (or by supplying it with -h) for more information about the usage of the program.

Example

Using the hybrid MROI for your face detection implementation

In order to use your face detection algorithm with the hybrid MROI face detector, you need to create a subclass which inherit from FaceDetector, and override its detect method. The implementation requires thedetect method to return either a face ROI or None; otherwise, the hybrid MROI face detector may fail.

Here's an example, in which we use a python implementation of MTCNN:

import cv2
from mtcnn.mtcnn import MTCNN
from mroi_fd import FaceDetector

class MROI_MTCNN(FaceDetector):

    def __init__(self):

    	# The main routine face detector object used to detect faces.
        fd_obj = MTCNN()

	# Initialize using base class constructor. We pass the face detector
	# object (fd_obj) and use the MROI with fixed-margin approach with
	# a template matching escape routine.
        super().__init__(fd_obj, mode=FaceDetector.FMTM)

    @staticmethod
    def detect(fd_obj, image):

        rgb_src = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        result = fd_obj.detect_faces(rgb_src)

        if len(result) > 0:
            return result[0]['box']
        else:
            return None

Internally, this was basically how the pre-defined hyrbid MROI face detectors (i.e., MROI_HaarCascade and MROI_MTCNN) was defined. Simply import them with

from mroi_fd import MROI_HaarCascade, MROI_MTCNN

Running the face detector

To use the face detector, simply instantiate the hybrid MROI face detector and run it by invoking its run method. Below is a simple script that runs the face detector and feed it images in a loop.

fd = MROI_MTCNN()
fd.run() # This runs the face detector in the background.

cap = cv2.VideoCapture("/path/to/video/file")

while True:
	ret, frame = cap.read()

	# No more images; exit.
	if not ret:
		break

	# Feed the image into the face detector.
	fd.input_image(frame)

	# Get the ROI containing the face. This will be `None` if no face is
	# detected.
	ROI = fd.get_face_region()

	if ROI is not None:
		x, y, w, h = ROI
		cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

	cv2.imshow("MROI_MTCNN Face Detector", frame)

	if cv2.waitKey(1) == ord('q'):
		break

fd.clean()
cap.release()
cv2.destroyAllWindows()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mroi-fd-1a1.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

mroi_fd-1a1-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file mroi-fd-1a1.tar.gz.

File metadata

  • Download URL: mroi-fd-1a1.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.4

File hashes

Hashes for mroi-fd-1a1.tar.gz
Algorithm Hash digest
SHA256 29e3a7050f2f6a1e31f9589ad881924cc5edb84c0b5c33a4644179e20a500ebd
MD5 a835b92a5cfcaeab913af405b8f0e418
BLAKE2b-256 400c59e500e312182b2e759d1a25c3e08d7180a2b4f38f858b0d30f8e5fa76ed

See more details on using hashes here.

File details

Details for the file mroi_fd-1a1-py3-none-any.whl.

File metadata

  • Download URL: mroi_fd-1a1-py3-none-any.whl
  • Upload date:
  • Size: 12.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.4

File hashes

Hashes for mroi_fd-1a1-py3-none-any.whl
Algorithm Hash digest
SHA256 9e667f538c99cdb7719f5ec34a55d495e816514ce45841158faf9760b282de3f
MD5 371c9572e6cf3cd07d85071d500cbbad
BLAKE2b-256 73dfbd4c2f6298b08391c0c2457a9c6f576c664f814d19e232a2d518d0fb0b34

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page