Follow These steps
- Create a virtual enviroment and activate virtial environment
python -m venv venv
Activate venv for windows using following command:
.\venv\Scripts\activate
For Ubuntu:
source venv/bin/activate
- Install necessary packages on venv
pip install opencv-python
pip install imutils
- Create Folder structure as shown below in your workspace
TestPrograms
|
├─ cascades
│ └─ haarcascade_frontalface_default.xml
├─ detect_faces.py
├─ images
│ └─ obama.jpg
├─ utilities
│ └─ facedetector.py
- Program for utililities/facedetector.py given below:
import cv2
class FaceDetector:
def __init__(self, face_cascade_path):
# Load the face detector
self.face_cascade = cv2.CascadeClassifier(face_cascade_path)
def detect(self, image, scale_factor=1.2, min_neighbors=3):
# Detect faces in the image
boxes = self.face_cascade.detectMultiScale(image, scale_factor, min_neighbors, flags=cv2.CASCADE_SCALE_IMAGE, minSize=(30,30))
# Return the bounding boxes
return boxes
- program on detect_faces.py
from utilities.facedetector import FaceDetector
import imutils
import cv2
# Define paths
image_path = 'images/obama.jpg'
cascade_path = 'cascades/haarcascade_frontalface_default.xml'
# Load the image and convert it to greyscale
image = cv2.imread(image_path)
image = imutils.resize(image, 600, 600)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Find faces in the image
detector = FaceDetector(cascade_path)
face_boxes = detector.detect(gray, 1.2, 5)
print("{} face(s) found".format(len(face_boxes)))
# Loop over the faces and draw a rectangle around each
for (x, y, w, h) in face_boxes:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Show the detected faces
cv2.imshow("Faces", image)
if(cv2.waitKey(0)):
cv2.destroyAllWindows()
- Links to necessary files:
Haar cascade frontal face
Obama Family Image