ahmedfo's picture
Update app.py
7b2c73f verified
import gradio as gr
import torch
from diffusers import AutoencoderKL
import numpy as np
from PIL import Image
import io
import base64
# تحميل نموذج VAE من Stable Diffusion
vae = AutoencoderKL.from_pretrained("stabilityai/sd-vae-ft-mse", torch_dtype=torch.float16)
vae = vae.to("cuda" if torch.cuda.is_available() else "cpu")
def image_to_latent(image):
# تحويل الصورة إلى التنسيق المناسب
image = image.resize((512, 512))
image = np.array(image).astype(np.float32) / 255.0
image = image[None].transpose(0, 3, 1, 2)
image = torch.from_numpy(image).to(vae.device)
# استخراج التمثيل الكامن
with torch.no_grad():
latent = vae.encode(image).latent_dist.sample() * 0.18215
return latent
def latent_to_image(latent):
# إعادة بناء الصورة من التمثيل الكامن
with torch.no_grad():
image = vae.decode(latent / 0.18215).sample
image = (image / 2 + 0.5).clamp(0, 1)
image = image.cpu().permute(0, 2, 3, 1).numpy()
image = (image[0] * 255).astype(np.uint8)
image = Image.fromarray(image)
return image
def apply_latent_poisoning(latent, strength=0.3):
# إنشاء نسخة من التمثيل الكامن
poisoned_latent = latent.clone()
# توليد نمط تشويش مدروس
noise = torch.randn_like(poisoned_latent) * strength
# الحفاظ على البنية الرئيسية (مرشح تنعيم)
noise = torch.nn.functional.avg_pool2d(noise, kernel_size=3, stride=1, padding=1)
# إضافة الضوضاء إلى التمثيل الكامن
poisoned_latent = poisoned_latent + noise
return poisoned_latent
def process_image(input_image, strength=0.3):
if input_image is None:
return None
# استخراج التمثيل الكامن
latent = image_to_latent(input_image)
# تطبيق التشويش على الفضاء الكامن
poisoned_latent = apply_latent_poisoning(latent, float(strength))
# إعادة بناء الصورة
protected_image = latent_to_image(poisoned_latent)
return protected_image
# تعريف واجهة Gradio الرئيسية
iface = gr.Interface(
fn=process_image,
inputs=[
gr.Image(type="pil", label="الصورة الأصلية"),
gr.Slider(minimum=0.1, maximum=0.5, value=0.3, step=0.1, label="قوة الحماية")
],
outputs=gr.Image(type="pil", label="الصورة المحمية"),
title="حماية الصور باستخدام الفضاء الكامن المعكوس",
description="قم برفع صورة وتحديد قوة الحماية لتطبيق تقنية الفضاء الكامن المعكوس"
)
# تشغيل التطبيق
iface.launch( share=True)