Spaces:
Runtime error
Runtime error
| 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() |