Untitled

 avatar
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