Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How to predict HOG features each frame with trained SVM classifier (and possibly get the accuracy of the prediction)

I created and trained an SVM emotion classifier using a set of 700 image samples and after applying some testing, it scored very well. My problem is that when I use the svm.predict function that I used to score the classifier on the current frame (after I extracted the HOG features), I get the error "samples.cols == var_count && samples.type() == 5 in function predict". I made sure my extracted features are float32 numpy arrays. If someone could help me find out why this is happening and how to solve it, I would really appreciate it! Thank you in advance.

# Create video capture object
    video_capture = cv2.VideoCapture(0);
    # Start creating loop, using webcam image every frame
    while True:
        # read method returns two elements, the last being the last frame captured by the camera - the _ allows us to ignore the first element
        _, frame = video_capture.read();
        # convert the camera frame into a grayscale version
        grayscale_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # Create dependancies for live detection
        aoi = grayscale_frame;
        aoi = pre_process_img(aoi);
        # Extract feature
        current_frame_features = hog.compute(aoi, (64, 64));
        # Convert features to numpay array
        current_frame_features = np.array(current_frame_features, dtype = np.float32);
        # Use classifier to make a prediction
        predicted_label = my_svm.predict(current_frame_features);
        # Print the prediction on our frame
        display_text = "Emotion: " + str(predicted_label);
        font = cv2.FONT_HERSHEY_SIMPLEX;
        cv2.putText(frame, display_text, (10, 50), font, 1, (255,255,255), 2, cv2.LINE_AA);
        # Use open CV to display the final camera frame
        cv2.imshow('Video', frame);
        # implement way to discontinue the application
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    video_capture.release();
    # destroy window
    cv2.destroyAllWindows();