#!/usr/bin/env python

opencv_folder="/home/pi/opencv/"
cascade_file=opencv_folder+"data/haarcascades/haarcascade_frontalface_alt.xml"
#cascade_file=opencv_folder+"data/haarcascades/haarcascade_frontalcatface.xml"
#cascade_file=opencv_folder+"data/haarcascades/haarcascade_profileface.xml"

print("import")

import cv2 as cv
#import commands

#CAM_W,CAM_H = 160,120
#CAM_W,CAM_H = 320,240
CAM_W,CAM_H = 640,480

#DET_W,DET_H = 160,120
DET_W,DET_H = 320,240

ZOOM = CAM_W/DET_W

def create_capture(source = 0):
    cap = cv.VideoCapture(source)
    cap.set(cv.CAP_PROP_FRAME_WIDTH, CAM_W)
    cap.set(cv.CAP_PROP_FRAME_HEIGHT, CAM_H)
    #cap.set(cv.CAP_PROP_FPS, 15)
    cap.set(cv.CAP_PROP_BUFFERSIZE, 1)
    return cap


def detect(img, cascade):
    rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30),
                                     flags=cv.CASCADE_SCALE_IMAGE)
    if len(rects) == 0:
        return []
    rects[:,2:] += rects[:,:2]
    return rects

def draw_rects(img, rects, color,zoom=1):
    for x1, y1, x2, y2 in rects:
        cv.rectangle(img, (int(x1*zoom), int(y1*zoom)), (int(x2*zoom), int(y2*zoom)), color, 4)

def main():
    cascade = cv.CascadeClassifier(cascade_file)
    cam = create_capture(0)

    print("start")
    print("ESC key to exit program")

    while True:
        ret, img = cam.read()
        #img=cv.rotate(img,cv.ROTATE_90_COUNTERCLOCKWISE)
        #img=cv.flip(img,-1)

        gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
        gray = cv.equalizeHist(gray)
        gray = cv.resize(gray,(DET_W,DET_H))

        rects = detect(gray , cascade)
        vis = img.copy()
        draw_rects(vis, rects, (0, 0, 255),ZOOM)

        #temp=commands.getoutput("vcgencmd measure_temp").split("=")
        #print temp[1]
        #cv.putText(vis,temp[1],(10,CAM_H-10),cv.FONT_HERSHEY_SIMPLEX,0.5,(0,0,200),1,cv.LINE_AA)
        cv.imshow('facedetect', vis)
        #cv.imshow('gray', gray)

        if cv.waitKey(1) == 27:
            break

    print('Done')


if __name__ == '__main__':
    print(__doc__)
    main()
    cv.destroyAllWindows()
