clear1 / app.py
iq7se2's picture
Update app.py
239ccf5 verified
import gradio as gr
import numpy as np
from PIL import Image, ImageFilter
import torch
import cv2
device = "cuda" if torch.cuda.is_available() else "cpu"
# تحميل lama_large_512px — نفس الموديل اللي في BallonsTranslator
from iopaint.model.lama import LaMa
from iopaint.schema import InpaintRequest, HDStrategy
model = LaMa(device=device)
def inpaint(editor_data, feather):
if editor_data is None:
return None
bg = editor_data.get("background")
layers = editor_data.get("layers", [])
if bg is None:
return None
image = bg.convert("RGB")
image_np = np.array(image)
if not layers or layers[0] is None:
return image
# استخراج الماسك
layer = layers[0].convert("RGBA")
mask_np = np.array(layer)[:, :, 3]
# feather اختياري
if feather > 0:
mask_pil = Image.fromarray(mask_np)
mask_pil = mask_pil.filter(ImageFilter.GaussianBlur(radius=feather))
mask_np = np.array(mask_pil)
mask_np = (mask_np > 127).astype(np.uint8) * 255
config = InpaintRequest(hd_strategy=HDStrategy.ORIGINAL)
result = model(image_np, mask_np, config)
return Image.fromarray(result)
with gr.Blocks(title="SFX Cleaner - LaMa Large") as demo:
gr.Markdown("""
# 🧹 SFX Cleaner — lama_large_512px
**الطريقة:** ارفع الصورة ← ارسم بالفرشاة على النص/SFX ← اضغط **تبييض**
""")
with gr.Row():
with gr.Column(scale=2):
editor = gr.ImageEditor(
label="📌 ارسم على النص",
brush=gr.Brush(
colors=["#ffffff"],
color_mode="fixed",
default_size=20
),
eraser=gr.Eraser(default_size=20),
type="pil",
height=650,
)
with gr.Column(scale=1):
output = gr.Image(
label="✅ النتيجة",
type="pil",
height=650,
)
with gr.Row():
feather = gr.Slider(0, 8, value=2, step=1, label="نعومة الحواف (Feather)")
btn = gr.Button("🧹 تبييض", variant="primary", size="lg")
btn.click(fn=inpaint, inputs=[editor, feather], outputs=output)
demo.launch()