faceswap_ai / app.py
lelannnn's picture
Update app.py
05b183f verified
import gradio as gr
import insightface
from insightface.app import FaceAnalysis
import cv2
import numpy as np
from PIL import Image
import os
import urllib.request
MODEL_PATH = "/tmp/inswapper_128.onnx"
def download_model():
if not os.path.exists(MODEL_PATH):
print("Downloading model...")
url = "https://huggingface.co/deepinsight/inswapper/resolve/main/inswapper_128.onnx"
urllib.request.urlretrieve(url, MODEL_PATH)
print("Done!")
download_model()
face_app = FaceAnalysis(name='buffalo_l')
face_app.prepare(ctx_id=0, det_size=(640, 640))
swapper = insightface.model_zoo.get_model(MODEL_PATH)
def swap_face(source_img, target_img):
if source_img is None or target_img is None:
return None, "الرجاء رفع صورتين!"
src_bgr = cv2.cvtColor(np.array(source_img), cv2.COLOR_RGB2BGR)
tgt_bgr = cv2.cvtColor(np.array(target_img), cv2.COLOR_RGB2BGR)
src_faces = face_app.get(src_bgr)
tgt_faces = face_app.get(tgt_bgr)
if len(src_faces) == 0:
return None, "ما لقيت وجه بالصورة الاولى!"
if len(tgt_faces) == 0:
return None, "ما لقيت وجه بالصورة الثانية!"
result = tgt_bgr.copy()
for tgt_face in tgt_faces:
result = swapper.get(result, tgt_face, src_faces[0], paste_back=True)
result_rgb = cv2.cvtColor(result, cv2.COLOR_BGR2RGB)
return Image.fromarray(result_rgb), "تم تبديل الوجه بنجاح!"
with gr.Blocks(title="FaceSwap AI") as demo:
gr.Markdown("# FaceSwap AI")
gr.Markdown("ارفع صورتين وبدل الوجوه")
with gr.Row():
source_img = gr.Image(type="pil", label="الوجه المصدر")
target_img = gr.Image(type="pil", label="الصورة الهدف")
output_img = gr.Image(type="pil", label="النتيجة")
swap_btn = gr.Button("ابدا تبديل الوجه", variant="primary")
status = gr.Textbox(label="الحالة", interactive=False)
swap_btn.click(fn=swap_face, inputs=[source_img, target_img], outputs=[output_img, status])
demo.launch()