[Solved] Help needed for face detection -deep learning



  • I have a code for detecting faces but now i need to count no:of faces .link text

    # OpenCV Python program to detect cars in video frame
    # import libraries of python OpenCV 
    import cv2
    #import numpy as np
    # capture frames from a video
    cap = cv2.VideoCapture('video.avi')
     
    # Trained XML classifiers describes some features of some object we want to detect
    car_cascade = cv2.CascadeClassifier('cars.xml')
     
    # loop runs if capturing has been initialized.
    while True:
        # reads frames from a video
        ret, frames = cap.read()
         
        # convert to gray scale of each frames
        gray = cv2.cvtColor(frames, cv2.COLOR_BGR2GRAY)
         
        #color fill white
        frames.fill(255)
        # or img[:] = 255
        # Detects cars of different sizes in the input image
        cars = car_cascade.detectMultiScale(gray, 1.1, 1)
         
        # To draw a rectangle in each cars
        for (x,y,w,h) in cars:
            cv2.rectangle(frames,(x,y),(x+w,y+h),(0,0,0),-1)
     
       # Display frames in a window 
        
        cv2.imshow('video2', frames)
         
        # Wait for Esc key to stop
        if cv2.waitKey(33) == 27:
            break
     
    # De-allocate any associated memory usage
    cv2.destroyAllWindows()
    


  • Hi @Nandu, You can increment a variable each time when detect faces, is that help?



  • @salmanfaris yeah that's what i want.But i am not able to understand where i should place my variable in the above mentioned code.



  • Follow These steps

    1. 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
    
    1. Install necessary packages on venv
    pip install opencv-python
    
    pip install imutils
    
    1. Create Folder structure as shown below in your workspace
    TestPrograms  
    |
    ├─ cascades
    │  └─ haarcascade_frontalface_default.xml
    ├─ detect_faces.py
    ├─ images
    │  └─ obama.jpg
    ├─ utilities
    │  └─ facedetector.py
    
    
    1. 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
    
    1. 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()
    
    1. Links to necessary files:
      Haar cascade frontal face
      Obama Family Image


  • @arunksoman thankyou 🥳



  • @Nandu But I have to mention that it is not a deep learning method. It is based on Integral images(Viola-Jones algorithm), which is basically something about ML. From opencv 3.4.3 there is a DNN module. This module help us to load caffemodels, torch models as well as tensorflow models. You can find out caffemodels on the Internet in order to detect faces. Using those we can make face detection quite efficiently. If you have any doubt feel free to ask here.



  • @arunksoman how this code helps me to count faces if deeplearning isn't used.



  • @Nandu Please read the comment given above carefully and search how the viola-jones algorithm works. Sorry for misunderstanding what you say. That is why edited comment.



  • @Nandu Did you complete? excited to see.



  • @salmanfaris in the below terminal count shows.some steps i have followed in a different manner.Thank you for helping me!🙂

    IMG-20200314-WA0032.jpg


Log in to reply
 

Recent Posts

  • F

    @salmanfaris best if you could point me to an example that works as described: getting different values depending on hoe close the finger is without really touching. nothing i tried did work yet

    read more
  • F

    @salmanfaris I haven't found a good sensor module for this at all. I used a thing which was calles touch sensor and it returns only 1/0. Tried to use touchRead() but it is not sensitive apparently, only 40 and 1 more or less.

    #define touch_pin_numer 33

    const int VALUE_THRESHOLD = 30;
    int TOUCH_SENSOR_VALUE;
    void setup()
    {
    Serial.begin(115200);
    delay(1000);

    }
    void loop(){
    TOUCH_SENSOR_VALUE = touchRead(touch_pin_numer);
    Serial.println(TOUCH_SENSOR_VALUE);
    if(TOUCH_SENSOR_VALUE < VALUE_THRESHOLD)
    {
    Serial.println ("Touch ON");
    }
    else{
    Serial.println ("Touch OFF");
    }
    }

    should show something between 40 (current max) and 1 (current min) the closer the finger gets but it shows 40/41/39 and 1 - nothing inbetween. got this code from the web

    read more
  • @FlorianB Can you share the code, output window/error and details of the sensor module?

    read more
  • F

    Hi! I am trying to add an capacitive sensor to the ESP32, that will work through glass with 3mm thickness and an distance of 8 to 2 cm. I have bought sensors which only work on touch, i have looked into the touchRead() function but cant get a steady value increase/decrease with distance and only a real touch gets me enough difference to count it as a "touch". I have checked Arduino examples with foil where a resistor can set the sensitivity but nothing worked on my ESP32. i have spent hours looking for an example, can somebody point me to one please?

    read more
  • Capture.PNG

    Welcome to the Second edition of MakerGram Live, a newsletter where we pull together information about Interesting projects, Industry news, upcoming events, job opportunities and other interesting bits that you may find useful. 😉

    If you are a member of makergram, you already received a mail, please check your inbox or you can read from here: MakerGram Live | May 2020 Maker Update

    read more