These are the steps in which the face-recognition library works:-
- To find faces in an image, convert the image to black and white as we don’t need a coloured image to find faces.
- Face landmark estimation: Train the machine to find the eyes and mouth to be roughly in the same position in the image. So that however the face is turned, the machine can detect that this is still the same person.
- Face encoding: The image is now sent to the pre-trained neural network so that this neural network generates 128 measurements to define a face.
- Face classification: The SVM classifier is then used to differentiate between these measurements and different faces.
Fun fact: Face detection and face recognition are not one and the same. Face detection is just finding the faces. Face recognition on the other hand deals with finding a face as well as being able to tell which face belongs to who.
Face-recognition library can not be installed directly without its dependencies. This is due to the fact that the face-recognition library was originally built using dlib and requires a C++ compiler (Visual Studio with C++ development). dlib is a C++ toolkit containing machine learning algorithms meant for real world applications. dlib was developed in C++ and requires cmake to run. Hence it is really important to follow all the guidelines as mentioned in the “Face Recognition in action” section so that you don’t get stuck with errors.
Face Recognition in action
We are going to implement face recognition on the infamous trio Harry Potter, Hermoine Granger and Ron Weasley from the renowned Harry Potter series as they celebrate Harry Potter’s 20th Anniversary: Return to Hogwarts. Let’s look at face recognition live in action:-
- Visit https://visualstudio.microsoft.com/→Downloads→Visual Studio 2022 Comminity→Free download. Download the VisualStudioSetup.exe file.
- Run VisualStudioSetup.exe. During installation, tick ☑ Desktop development with C++ and tick ☑ C++ CMake tools for windows. (Note: kindly check if your Windows OS is compatible with Visual Studio 2022 else Sign up with a Microsoft account and download the version of Visual Studio which is compatible with your Windows OS.)
- Visit https://www.python.org/ →Downloads→Download the latest version for Windows.
- Visit https://www.jetbrains.com/pycharm/. Download and install the Community free version of Pycharm.
- Launch Pycharm. Go to File→New project→”FaceRecognitionProject”.
- Go to Terminal →select Local terminal and run these commands one at a time in the same order to install all the latest versions of the dependencies:-
pip install open-cv pip install numpy pip install cmake pip install dlib pip install face-recognition
- Download the People directory from here→People and add it to FaceRecognitionProject. (Note: You can add or delete one or more images to the ‘People’ directory as per your preference.)
Harry
Hermione
Ron
- Add FaceRecognitionInAction.py from the programming section to FaceRecognitionProject and execute.
- Play the video Harry Potter – Return to Hogwarts Trailer Highlights (settings: quality=1080p and playback speed=0.25x) in front of the webcam of your Laptop/PC. (Note: kindly follow all the steps mentioned above to get assured results as per this post.)
PROGRAMMING
Program: FaceRecognitionInAction.py
#FaceRecognitionInAction.py #Made by Wiztaqnia #Modified date 25/03/2023 import cv2 import numpy as np import face_recognition import os path= 'People' #'People' directory contains the images of people to be recognised in the webcam feed pics=[] NameOfPerson=[] myList=os.listdir(path) for i in myList: curImg=cv2.imread(f'{path}/{i}') #cv2.imread(f'{current image present in the path}/{name of the image}) pics.append(curImg) #import current image to pics[] NameOfPerson.append(os.path.splitext(i)[0]) #import text before .jpeg to NamesOfPeople def findEncodings(pics): #find encoding for each image in pics[] encodeList = [] for img in pics: img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #convert the image from RGB to BGR format (default Color space for OpenCV is BGR) encode=face_recognition.face_encodings(img)[0] encodeList.append(encode) return encodeList encodeKnown=findEncodings(pics) cap=cv2.VideoCapture(0) while True: success, img = cap.read() imgSmall=cv2.resize(img,(0,0),None,0.25,0.25) #reduce the size of the image from webcam feed to speed up the process imgSmall=cv2.cvtColor(imgSmall,cv2.COLOR_BGR2RGB) faceCurFrame=face_recognition.face_locations(imgSmall) encodesCurFrame=face_recognition.face_encodings(imgSmall,faceCurFrame) for encodeFace,facLoc in zip(encodesCurFrame,faceCurFrame): #find the face in webcam feed of closest match to the pics in 'People' directory match=face_recognition.compare_faces(encodeKnown,encodeFace) faceDis=face_recognition.face_distance(encodeKnown,encodeFace) matchIndex=np.argmin(faceDis) if match[matchIndex]: name=NameOfPerson[matchIndex].upper() y1,x2,y2,x1= facLoc y1,x2,y2,x1 = y1*4,x2*4,y2*4,x1*4 #convert the image from webcam feed to its original size cv2.rectangle(img,(x1,y1),(x2,y2),(255,255,0),2) #draw a cyan rectangle around the face cv2.rectangle(img, (x1, y2-35), (x2, y2), (255, 255, 0)) #draw a cyan rectangle around the name of the person cv2.putText(img,name,(x1+6,y2-6),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,0),2) #display the name of the person cv2.imshow('Output',img) cv2.waitKey(1)
OUTPUT
This post was inspired by https://youtu.be/sz25xxF_AVE
References:
- https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78
- https://stackoverflow.com/questions/48156814/unable-to-install-face-recognition-library-for-python
For exclusive insights, tips and answers, please visit Wiztaqnia Forum.
- IoT based Indoor Air Quality ENS160 Monitor - November 20, 2024
- Fritzing Check Part for Gravity ENS160 Air Quality Sensor - November 12, 2024
- Custom Fritzing part design for FunctionGeneratorKitwith XR2206 - October 10, 2024