Spaces:
Running
Running
import gradio as gr | |
import cv2 | |
import torch | |
from transformers import VideoMAEForVideoClassification, AutoFeatureExtractor | |
# Göz teması algılama modelini ve özellik çıkarıcıyı yükleyin | |
model_name = "kanlo/videomae-base-ASD_Eye_Contact_v2" | |
model = VideoMAEForVideoClassification.from_pretrained(model_name) | |
feature_extractor = AutoFeatureExtractor.from_pretrained(model_name) | |
def preprocess_frames(frames): | |
# Her kareyi modele uygun şekilde işleyin | |
inputs = feature_extractor(frames, return_tensors="pt") | |
return inputs['pixel_values'] | |
def detect_eye_contact(video_path): | |
# Video dosyasını aç | |
cap = cv2.VideoCapture(video_path) | |
fps = cap.get(cv2.CAP_PROP_FPS) | |
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
# Çıkış videosu için ayarlar | |
output_path = "eye_contact_output.mp4" | |
fourcc = cv2.VideoWriter_fourcc(*'mp4v') | |
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height)) | |
frames = [] | |
while cap.isOpened(): | |
ret, frame = cap.read() | |
if not ret: | |
break | |
frames.append(frame) | |
# Modeli belirli bir aralıkta çalıştırarak göz temasını algılayın | |
if len(frames) >= 16: # 16 karede bir işlem yapıyoruz | |
inputs = preprocess_frames(frames) | |
with torch.no_grad(): | |
outputs = model(pixel_values=inputs) | |
prediction = outputs.logits.argmax(-1).item() | |
# Göz teması varsa çerçeveye ek açıklama ekleyin | |
for frame in frames: | |
if prediction == 1: # 1 göz teması var anlamına gelir (modelde böyle olduğunu varsayıyoruz) | |
cv2.putText(frame, "Eye Contact", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) | |
else: | |
cv2.putText(frame, "No Eye Contact", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) | |
out.write(frame) | |
frames = [] # 16 karelik grubu işledikten sonra sıfırlayın | |
# Kaynakları serbest bırak | |
cap.release() | |
out.release() | |
return output_path | |
# Gradio arayüzü | |
iface = gr.Interface( | |
fn=detect_eye_contact, | |
inputs="file", | |
outputs="file", | |
title="Eye Contact Detection in Video", | |
description="Upload a video to detect eye contact in each frame." | |
) | |
iface.launch() | |