kailouis's picture
Update app.py
68b2baa verified
import gradio as gr
import torch
import cv2
import numpy as np
from face_alignment import FaceAlignment, LandmarksType
from torchvision import transforms
# Load model pretrained
try:
model = torch.load("./abudhabi.pt", map_location=torch.device('cpu'))
model.eval()
print("Model loaded successfully!")
except Exception as e:
print(f"Error loading model: {e}")
raise e
# Inisialisasi face alignment model
fa = FaceAlignment(LandmarksType._2D, flip_input=False)
# Fungsi untuk mendeteksi dan melakukan alignment wajah
def detect_and_align_faces(frame):
preds = fa.get_landmarks(frame)
aligned_face = None
if preds is not None:
landmarks = preds[0]
# Implementasi Alignment Wajah
left_eye = landmarks[36:42]
right_eye = landmarks[42:48]
# Hitung sudut antara kedua mata
left_eye_center = left_eye.mean(axis=0).astype("int")
right_eye_center = right_eye.mean(axis=0).astype("int")
dY = right_eye_center[1] - left_eye_center[1]
dX = right_eye_center[0] - left_eye_center[0]
angle = np.degrees(np.arctan2(dY, dX)) - 180
# Hitung jarak antara kedua mata
eyes_center = ((left_eye_center[0] + right_eye_center[0]) // 2,
(left_eye_center[1] + right_eye_center[1]) // 2)
# Lakukan rotasi gambar
M = cv2.getRotationMatrix2D(eyes_center, angle, 1)
aligned_face = cv2.warpAffine(frame, M, (frame.shape[1], frame.shape[0]))
return aligned_face
# Fungsi untuk manipulasi ekspresi (sesuaikan dengan model)
def manipulate_expression(face, expression, intensity):
# Implementasi manipulasi ekspresi menggunakan model
# ... (misalnya, berikan input ekspresi dan intensitas ke model)
# Contoh:
# expression_mapping = {"senang": 0, "sedih": 1, "marah": 2, "takut": 3, "jijik": 4, "terkejut": 5}
# expression_index = expression_mapping[expression]
# manipulated_face = model(face, expression_index, intensity)
# ...
# Ganti dengan kode manipulasi ekspresi Anda yang sebenarnya
manipulated_face = face # Ganti dengan output model Anda
return manipulated_face
def process_frame(frame, expression, intensity):
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
aligned_face = detect_and_align_faces(frame)
if aligned_face is not None:
manipulated_face = manipulate_expression(aligned_face, expression, intensity)
# ... (Implementasi penggabungan wajah ke frame asli)
# ... (Ganti frame dengan manipulated_face)
frame = manipulated_face # Ganti dengan hasil penggabungan
return cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# Antarmuka Gradio
iface = gr.Interface(
fn=process_frame,
inputs=[
gr.Image(source="webcam", streaming=True, type="numpy"),
gr.Dropdown(["senang", "sedih", "marah", "takut", "jijik", "terkejut"], label="Ekspresi"),
gr.Slider(0, 1, label="Intensitas"),
],
outputs=gr.Image(type="numpy"),
title="Deepfake Emotion Control MVP (Real-time)",
)
iface.launch()