# -*-coding:utf-8-*- ''' DpCas-Light |||| ||||| |||| || ||||||| || || || || || || |||| || || || || || || || || || || || || || || || || ||====|| |||||| || || ||||| || || ||======|| || || || || || || || || || || |||| || |||| || || ||||||| /--------------------- Face Bioassay ---------------------/ ''' # date:2021-04-18 # Author: Eric.Lee # function: Face Bioassay "基于人脸动作的活体检测" import cv2 # 加载模型组件库 from components.face_detect.yolo_v3_face import yolo_v3_face_model from components.face_multi_task.face_multi_task_component import FaceMuitiTask_Model from components.face_euler_angle.face_euler_angle_component import FaceAngle_Model from components.face_bioassay.face_bioassy_component import FaceBioassyModel # 加载工具库 from lib.face_bioassay_lib.cores.face_fuction import get_faces_batch_attribute from lib.face_bioassay_lib.utils.utils import parse_data_cfg def main_face_bioassay(video_path, cfg_file): config = parse_data_cfg(cfg_file) print("\n/************** Face Bioassay *****************/") print("/********************************************************/\n") # pose_model = light_pose_model() face_detect_model = yolo_v3_face_model(conf_thres=float(config["detect_conf_thres"]), nms_thres=float(config["detect_nms_thres"]), model_arch=config["detect_model_arch"], model_path=config["detect_model_path"], yolo_anchor_scale=float(config["yolo_anchor_scale"]), img_size=float(config["detect_input_size"]), ) face_multitask_model = FaceMuitiTask_Model(model_path=config["face_multitask_model_path"], model_arch=config["face_multitask_model_arch"]) face_euler_model = FaceAngle_Model(model_path=config["face_euler_model_path"]) face_bioassy_model = FaceBioassyModel(model_path='') cap = cv2.VideoCapture(video_path) frame_idx = 0 while cap.isOpened(): ret, img = cap.read() if ret: frame_idx += 1 video_time = cap.get(cv2.CAP_PROP_POS_MSEC) faces_bboxes = face_detect_model.predict(img, vis=False) # 检测手,获取手的边界框 faces_message = get_faces_batch_attribute( face_multitask_model, face_euler_model, face_bioassy_model, faces_bboxes, img, use_cuda=True, vis=True) if faces_message is not None: print("faces_message : {} \n".format(faces_message)) cv2.namedWindow("DriverFatigueMonitor", 0) cv2.imshow("DriverFatigueMonitor", img) if cv2.waitKey(1) == 27: break else: break cv2.destroyAllWindows()