Path: blob/master/FaceDetectionComparison/face_detection_opencv_haar.py
3118 views
import argparse1import os2import time34import cv2567def detectFaceOpenCVHaar(faceCascade, frame, inHeight=300, inWidth=0):8frameOpenCVHaar = frame.copy()9frameHeight = frameOpenCVHaar.shape[0]10frameWidth = frameOpenCVHaar.shape[1]11if not inWidth:12inWidth = int((frameWidth / frameHeight) * inHeight)1314scaleHeight = frameHeight / inHeight15scaleWidth = frameWidth / inWidth1617frameOpenCVHaarSmall = cv2.resize(frameOpenCVHaar, (inWidth, inHeight))18frameGray = cv2.cvtColor(frameOpenCVHaarSmall, cv2.COLOR_BGR2GRAY)1920faces = faceCascade.detectMultiScale(frameGray)21bboxes = []22for (x, y, w, h) in faces:23x1 = x24y1 = y25x2 = x + w26y2 = y + h27cvRect = [28int(x1 * scaleWidth),29int(y1 * scaleHeight),30int(x2 * scaleWidth),31int(y2 * scaleHeight),32]33bboxes.append(cvRect)34cv2.rectangle(35frameOpenCVHaar,36(cvRect[0], cvRect[1]),37(cvRect[2], cvRect[3]),38(0, 255, 0),39int(round(frameHeight / 150)),404,41)42return frameOpenCVHaar, bboxes434445if __name__ == "__main__":46parser = argparse.ArgumentParser(description="Face detection")47parser.add_argument("--video", type=str, default="", help="Path to video file")48args = parser.parse_args()4950source = args.video5152faceCascade = cv2.CascadeClassifier("models/haarcascade_frontalface_default.xml")5354outputFolder = "output-haar-videos"55if not os.path.exists(outputFolder):56os.makedirs(outputFolder)5758if source:59cap = cv2.VideoCapture(source)60outputFile = os.path.basename(source)[:-4] + ".avi"61else:62cap = cv2.VideoCapture(0, cv2.CAP_V4L)63outputFile = "grabbed_from_camera.avi"6465hasFrame, frame = cap.read()6667vid_writer = cv2.VideoWriter(68os.path.join(outputFolder, outputFile),69cv2.VideoWriter_fourcc("M", "J", "P", "G"),7025,71(frame.shape[1], frame.shape[0]),72)7374frame_count = 075tt_opencvHaar = 07677while True:78hasFrame, frame = cap.read()79if not hasFrame:80break8182frame_count += 183t = time.time()8485outOpencvHaar, bboxes = detectFaceOpenCVHaar(faceCascade, frame)86tt_opencvHaar += time.time() - t87fpsOpencvHaar = frame_count / tt_opencvHaar8889label = "OpenCV Haar; FPS : {:.2f}".format(fpsOpencvHaar)90cv2.putText(91outOpencvHaar,92label,93(10, 50),94cv2.FONT_HERSHEY_SIMPLEX,951.3,96(0, 0, 255),973,98cv2.LINE_AA,99)100101cv2.imshow("Face Detection Comparison", outOpencvHaar)102103vid_writer.write(outOpencvHaar)104if frame_count == 1:105tt_opencvHaar = 0106107key = cv2.waitKey(5)108if key == 27:109break110111cv2.destroyAllWindows()112vid_writer.release()113114115