Untitled
unknown
plain_text
a year ago
3.0 kB
3
Indexable
import os import cv2 from deepface import DeepFace from joblib import Parallel, delayed from deepface.modules import preprocessing # Define input and output directories input_dir = "/kaggle/input/crema-d-video" output_dir = "/kaggle/working/face_aligned" # Create output directory if it doesn't exist if not os.path.exists(output_dir): os.makedirs(output_dir) # Function to extract faces from video and save as images def extract_faces_from_video(video_path, output_folder): vidcap = cv2.VideoCapture(video_path) success, image = vidcap.read() count = 0 fileName = os.path.splitext(os.path.basename(video_path))[0] if not os.path.exists(os.path.join("/kaggle/tmp", fileName)): os.makedirs(os.path.join("/kaggle/tmp", fileName)) while success: path = os.path.join("/kaggle/tmp", os.path.join(fileName, f"frame_det_{count:05}.jpg")) cv2.imwrite(path, image) try: # Extract faces from video faceImg = DeepFace.analyze(image, detector_backend="dlib") #faceImg = preprocessing.resize_image(img=faceImg, target_size=(160, 160))[0] #plt.imshow(faceImg) saveFile = os.path.join(output_folder, f"frame_det_{count:05}.jpg") faceImg = faceImg * 255 cv2.imwrite(saveFile, faceImg[:, :, ::-1]) except Exception as e: print(f"Error processing {video_path}: {str(e)}") return success, image = vidcap.read() count += 1 print(f"Faces extracted from {video_path} and saved to {output_folder}") # Iterate over each video in the input directory def process_video(video_file): if video_file.endswith(".flv"): # Assuming all videos are in .flv format video_path = os.path.join(input_dir, video_file) video_name = os.path.splitext(video_file)[0] video_output_folder = os.path.join(output_dir, video_name) os.makedirs(video_output_folder, exist_ok=True) extract_faces_from_video(video_path, video_output_folder) for video_file in os.listdir(input_dir): process_video(video_file) #Parallel(n_jobs=-1)(delayed(process_video)(video_file) for video_file in os.listdir(input_dir)) #print(os.listdir(input_dir)) #vlist = ["1032_IWL_HAP_XX.flv", "1032_IEO_HAP_LO.flv", "1032_MTI_NEU_XX.flv", "1032_MTI_DIS_XX.flv", "1032_IWL_NEU_XX.flv", "1032_TSI_NEU_XX.flv", "1047_IEO_SAD_LO.flv", "1047_IEO_FEA_LO.flv", "1032_DFA_SAD_XX.flv", "1032_IOM_SAD_XX.flv", "1032_IOM_HAP_XX.flv", "1032_ITS_NEU_XX.flv", "1032_ITH_NEU_XX.flv", "1032_IEO_SAD_LO.flv", "1032_MTI_SAD_XX.flv", "1032_WSI_NEU_XX.flv", "1032_IEO_HAP_HI.flv", "1032_ITH_SAD_XX.flv", "1032_IWL_ANG_XX.flv", "1032_DFA_NEU_XX.flv", "1032_ITH_HAP_XX.flv", "1032_IWL_SAD_XX.flv", "1076_MTI_SAD_XX.flv", "1032_WSI_HAP_XX.flv", "1032_IEO_HAP_MD.flv", "1032_IEO_DIS_HI.flv", "1032_IOM_ANG_XX.flv", "1032_TIE_HAP_XX.flv"] #Parallel(n_jobs=-1)(delayed(process_video)(video_file) for video_file in vlist)
Editor is loading...
Leave a Comment