import cv2 import os import torch from facenet_pytorch import MTCNN import argparse # Função para processar o vídeo def process_video(source, output_folder): # Verificar se a pasta de saída existe, se não, criar if not os.path.exists(output_folder): os.makedirs(output_folder) # Carregar vídeo cap = cv2.VideoCapture(source) if not cap.isOpened(): print(f"Erro ao abrir o vídeo {source}") return # Carregar o modelo MTCNN para detecção de rostos device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') mtcnn = MTCNN(keep_all=True, device=device) frame_count = 0 face_count = 0 while True: ret, frame = cap.read() if not ret: break frame_count += 1 # Detecção de rostos boxes, _ = mtcnn.detect(frame) if boxes is not None: for box in boxes: # Cortar o rosto detectado x1, y1, x2, y2 = [int(coord) for coord in box] face = frame[y1:y2, x1:x2] # Salvar o rosto na pasta de saída face_filename = os.path.join(output_folder, f"face_{frame_count}_{face_count}.jpg") cv2.imwrite(face_filename, face) face_count += 1 # Mostrar o progresso (opcional) print(f"Frame {frame_count} processado.") cap.release() print(f"Processamento concluído. {face_count} rostos salvos em {output_folder}.") # Função principal para parsear argumentos e chamar o processamento if __name__ == "__main__": parser = argparse.ArgumentParser(description="Detecta e salva rostos de um vídeo.") parser.add_argument("--source", type=str, required=True, help="Caminho para o arquivo de vídeo.") parser.add_argument("--output", type=str, required=True, help="Pasta de saída para salvar os rostos detectados.") args = parser.parse_args() process_video(args.source, args.output)