Path: blob/master/FaceDetectionComparison/face_detection_dlib_mmod.py
3118 views
import argparse1import os2import time34import cv25import dlib678def detectFaceDlibMMOD(detector, frame, inHeight=300, inWidth=0):910frameDlibMMOD = frame.copy()11frameHeight = frameDlibMMOD.shape[0]12frameWidth = frameDlibMMOD.shape[1]13if not inWidth:14inWidth = int((frameWidth / frameHeight) * inHeight)1516scaleHeight = frameHeight / inHeight17scaleWidth = frameWidth / inWidth1819frameDlibMMODSmall = cv2.resize(frameDlibMMOD, (inWidth, inHeight))2021frameDlibMMODSmall = cv2.cvtColor(frameDlibMMODSmall, cv2.COLOR_BGR2RGB)22faceRects = detector(frameDlibMMODSmall, 0)2324print(frameWidth, frameHeight, inWidth, inHeight)25bboxes = []26for faceRect in faceRects:27cvRect = [28int(faceRect.rect.left() * scaleWidth),29int(faceRect.rect.top() * scaleHeight),30int(faceRect.rect.right() * scaleWidth),31int(faceRect.rect.bottom() * scaleHeight),32]33bboxes.append(cvRect)34cv2.rectangle(35frameDlibMMOD,36(cvRect[0], cvRect[1]),37(cvRect[2], cvRect[3]),38(0, 255, 0),39int(round(frameHeight / 150)),404,41)42return frameDlibMMOD, bboxes434445if __name__ == "__main__":4647parser = argparse.ArgumentParser(description="Face detection")48parser.add_argument("--video", type=str, default="", help="Path to video file")49args = parser.parse_args()5051source = args.video5253mmodFaceDetector = dlib.cnn_face_detection_model_v1(54"models/mmod_human_face_detector.dat",55)5657outputFolder = "output-mmod-videos"58if not os.path.exists(outputFolder):59os.makedirs(outputFolder)6061if source:62cap = cv2.VideoCapture(source)63outputFile = os.path.basename(source)[:-4] + ".avi"64else:65cap = cv2.VideoCapture(0, cv2.CAP_V4L)66outputFile = "grabbed_from_camera.avi"6768hasFrame, frame = cap.read()6970vid_writer = cv2.VideoWriter(71os.path.join(outputFolder, outputFile),72cv2.VideoWriter_fourcc("M", "J", "P", "G"),7315,74(frame.shape[1], frame.shape[0]),75)7677frame_count = 078tt_dlibMmod = 07980while True:81hasFrame, frame = cap.read()82if not hasFrame:83break8485frame_count += 186t = time.time()8788outDlibMMOD, bboxes = detectFaceDlibMMOD(mmodFaceDetector, frame)89tt_dlibMmod += time.time() - t90fpsDlibMmod = frame_count / tt_dlibMmod9192label = "DLIB MMOD; FPS : {:.2f}".format(fpsDlibMmod)93cv2.putText(94outDlibMMOD,95label,96(10, 50),97cv2.FONT_HERSHEY_SIMPLEX,981.3,99(0, 0, 255),1003,101cv2.LINE_AA,102)103104cv2.imshow("Face Detection Comparison", outDlibMMOD)105106vid_writer.write(outDlibMMOD)107108if frame_count == 1:109tt_dlibMmod = 0110111k = cv2.waitKey(5)112if k == 27:113break114115cv2.destroyAllWindows()116vid_writer.release()117118119