Saturday, June 3, 2023

Real-Time Face Recognition Using Python And OpenCV

Aquib Javed Khan is a freelance technical writer. His interests include computer vision and mechatronic systems

- Advertisement -
 

A real time face recognition system is capable of identifying or verifying a person from a video frame. To recognize the face in a frame, first you need to detect whether the face is present in the frame. If it is present, mark it as a region of interest (ROI), extract the ROI and process it for facial recognition.

Real time face recognition software

This project is divided into two parts: creating a database, and training and testing.

Creating a database

Take pictures of the person for face recognition after running create_database.py script. It automatically creates Train folder in Database folder containing the face to be recognised. You can change the name from Train to the person’s name.

- Advertisement -

While creating the database, the face images must have different expressions, which is why a 0.38-second delay is given in the code for creating the data set. In this example, we take about 45 pictures/images and extract the face, convert it into grayscale and save it to the database folder with its name.

Training and testing

Training and face recognition is done next. face_rec.py code does everything. The algorithm used here is Local Binary Patterns Histograms (LBPH).

Screenshot of Haar features | real time face recognition
Fig. 1: Screenshot of Haar features

Face detection is the process of finding or locating one or more human faces in a frame or image. Haar-like feature algorithm by Viola and Jones is used for face detection. In Haar features, all human faces share some common properties. These regularities may be matched using Haar features, as shown in Fig. 1.

Two properties common to human faces are:

  1. The eye region is darker than the upper cheeks.
  2. The nose bridge region is brighter than the eyes.

Composition of two properties forming matchable facial features are:

  1. Location and size including eyes, mouth and bridge of nose.
  2. Value for oriented gradients of pixel intensities.

For example, the difference in brightness between white and black rectangles over a specific area is given by:

Value = Σ (pixels in black area)- Σ (pixels in white area)

The above-mentioned four features matched by Haar algorithm are compared in the image of a face shown on the left of Fig. 1.

Testing procedure

Install OpenCV and Python on Ubuntu 16.04

The project was tested on Ubuntu 16.04 using OpenCV 2.4.10. The following shell script installs all dependencies required for OpenCV and also install OpenCV 2.4.10.

$ sh ./install-opencv.sh

After installing OpenCV, check it in the terminal using import command, as shown in Fig. 2.

Checking OpenCV using import command
Fig. 2: Checking OpenCV using import command
Creating the database
Fig. 3: Creating the database

1. Create the database and run the recogniser script, as given below (also shown in Fig. 3). Make at least two data sets in the database.

$ python create_database.py person_name

2. Run the recogniser script, as given below:

$ python face_rec.py

This will start the training, and the camera will open up, as shown in Fig. 4. Accuracy depends on the number of data sets as well as the quality and lighting conditions.

 Screenshot of real time face recognition
Fig. 4: Screenshot of face detection

OpenCV 2.4.10.

OpenCV provides the following three face recognisers:

  1. Eigenface recogniser
  2. Fisherface recogniser
  3. LBPH face recogniser

In this project, LBPH face recognition is used, which is createLBPHFaceRecognizer( ) function.

LBP works on gray-scale images. For every pixel in a gray-scale image, a neighbourhood is selected around the current pixel and LBP value is calculated for the pixel using the neighbourhood.

After calculating LBP value of the current pixel, the corresponding pixel location is updated in the LBP mask (it is of same height and width as input image.) with LBP value calculated, as shown in Fig. 5.

Screenshot of a LBPH face recogniser
Fig. 5: Screenshot of a LBPH face recogniser

In the image, there are eight neighbouring pixels. If the current pixel value is greater than or equal to the neighbouring pixel value, the corresponding bit in the binary array is set to 1. But if the current pixel value is less than the neighbouring pixel value, the corresponding bit in the binary array is set to 0.

Download source code


Interested in face detection projects? Check out face recognition using Raspberry Pi.

This article was first published on 21 July 2017 and was updated on 29 May 2019.

57 COMMENTS

  1. Hi, I’ve downloaded the source code and am able to create a database from create_database.py file. But, am getting an issue while running face_rec.py file. My webcam is getting started! Can you please help me out here?

    • python create_database.py abc
      Traceback (most recent call last):
      File “create_database.py”, line 2, in
      import cv2, sys, numpy, os, time
      File “C:\Python27\lib\site-packages\cv2\__init__.py”, line 2, in from . import cv2
      ImportError: DLL load failed: The specified module could not be found.

  2. Hi Aquib,
    i have follow your instruction and the code was worked for create database, but when i used “python face_rec.py” I got an error like this

    Training…
    Traceback (most recent call last):
    File “face_rec.py”, line 29, in
    model = cv2.face.createFisherFaceRecognizer()
    AttributeError: ‘module’ object has no attribute ‘createFisherFaceRecognizer’

    how to solve this problem?
    Thanks

  3. Please help.

    python face_rec.py
    Training…
    OpenCV Error: Bad argument (Empty training data was given. You’ll need more than one sample to learn a model.) in train, file /io/opencv_contrib/modules/face/src/fisher_faces.cpp, line 71
    Traceback (most recent call last):
    File “face_rec.py”, line 30, in
    model.train(images, lables)
    cv2.error: /io/opencv_contrib/modules/face/src/fisher_faces.cpp:71: error: (-5) Empty training data was given. You’ll need more than one sample to learn a model. in function train

  4. sir,
    i am new to python.I have recently downloaded the source code .getting some indentation errors, can you please solve error for me.
    below is the code where i am getting errors
    please send me a reply

    if faces:
    face_i = faces[0]
    (x, y, w, h) = [v * size for v in face_i]
    face = gray[y:y + h, x:x + w]
    face_resize = cv2.resize(face, (im_width, im_height))
    pin=sorted([int(n[:n.find(‘.’)]) for n in os.listdir(path)
    if n[0]!=’.’ ]+[0])[-1] + 1
    cv2.imwrite(‘%s/%s.png’ % (path, pin), face_resize)
    cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 3)
    cv2.putText(im, fn_name, (x – 10, y – 10), cv2.FONT_HERSHEY_PLAIN,1,(0, 255, 0))
    time.sleep(0.38)
    count += 1

  5. Please help me sir,
    After adding the images to database and while running the fac_rec.py the program stopped after printing “Training…”. Where can I find the remaining program to recognize the face. In your output, that “””This will start the training, and the camera will open up, as shown”‘” but it does not happen.

    Thanks in Advance.

  6. I m getting error like Traceback (most recent call last):
    File “create_database.py”, line 24, in
    mini = cv2.resize (gray (gray.shape[0] / int(size), gray.shape[1] / int(size)))
    TypeError: ‘numpy.ndarray’ object is not callable

    please help me to solve this error

  7. thank you for the information very useful, but I have a little problem when running the application error as follows

    Traceback (most recent call last):
    File “.\face_rec.py”, line 31, in
    model = cv2.face.createFisherFaceRecognizer()
    AttributeError: module ‘cv2.cv2’ has no attribute ‘face’

    what should I do so the application can run thank you

  8. I got this Error please Help ?

    ———————–Taking pictures———————-
    ——————–Give some expressions———————
    Traceback (most recent call last):
    File “/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”, line 31, in
    start(fakepyfile,mainpyfile)
    File “/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”, line 30, in start
    exec(open(mainpyfile).read(), __main__.__dict__)
    File “”, line 22, in
    cv2.error: OpenCV(4.3.0) /data/data/ru.iiec.pydroid3/app_HOME/opencv/opencv-python-master/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’

    [Program finished]

SHARE YOUR THOUGHTS & COMMENTS

 
 

What's New @ Electronicsforu.com?

Truly Innovative Tech

MOst Popular Videos

Electronics Components

Tech Contests