import cv2
import time

if __name__ == "__main__":
    hog = cv2.HOGDescriptor()
    hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
    cap = cv2.VideoCapture("../resources/image4.jpg")
    outPath = '../output/HOG_image4.jpg'

    while True:
        r, frame = cap.read()
        if r:
            start_time = time.time()
            frame = cv2.resize(frame, (800, 600))  # Downscale to improve frame rate
            gray_frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)  # HOG needs a grayscale image

            rects, weights = hog.detectMultiScale(gray_frame)

            # Measure elapsed time for detections
            end_time = time.time()
            print("Elapsed time:", end_time - start_time)

            for i, (x, y, w, h) in enumerate(rects):
                if weights[i] < 0.7:
                    continue
                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

            cv2.imshow("HOG", frame)

            cv2.imwrite(outPath, frame)
        k = cv2.waitKey(1)
        if k & 0xFF == ord("q"):  # Exit condition
            break