import numpy as np
import zmes_hook_helpers.common_params as g
import zmes_hook_helpers.log as log
import sys
import cv2
from imutils.object_detection import non_max_suppression

# Class to handle HOG based detection


class Hog:
    def __init__(self):
        self.hog = cv2.HOGDescriptor()
        self.hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
        self.winStride = g.config['stride']
        self.padding = g.config['padding']
        self.scale = float(g.config['scale'])
        self.meanShift = True if int(g.config['mean_shift']) > 0 else False
        g.logger.debug('Initializing HOG')

    def get_classes(self):
        return ['person']

    def detect(self, image):
        r, w = self.hog.detectMultiScale(image,
                                         winStride=self.winStride,
                                         padding=self.padding,
                                         scale=self.scale,
                                         useMeanshiftGrouping=self.meanShift)
        labels = []
        classes = []
        conf = []
        rects = []

        for i in r:
            labels.append('person')
            classes.append('person')
            conf.append(1.0)
            i = i.tolist()
            (x1,y1,x2,y2) = (round(i[0]),round(i[1]),round(i[0]+i[2]), round(i[1]+i[3]))
            rects.append((x1,y1,x2,y2))

        #g.logger.debug(f'HOG:Returning: {rects}, {labels}, {conf}')
        return rects, labels, conf