photo / app.py
Starchik's picture
Update app.py
4bce40f verified
import torch
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
import gradio as gr
# Инициализация модели для CPU
pipe = StableDiffusionInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-inpainting",
torch_dtype=torch.float32, # Использование стандартной точности на CPU
)
def process_image(image, mask_image, prompt):
# Конвертируем изображение и маску в формат PIL и подгоняем под нужный размер
image = Image.fromarray(image).resize((512, 512))
mask_image = Image.fromarray(mask_image).convert("L").resize((512, 512))
mask_image = mask_image.point(lambda x: 255 if x > 128 else 0) # Бинаризация маски
# Генерация нового изображения
result = pipe(prompt=prompt, image=image, mask_image=mask_image).images[0]
return result
# Создание интерфейса с Gradio
with gr.Blocks() as demo:
gr.Markdown("## 🖼️ Удаление объектов с изображений")
with gr.Row():
input_image = gr.Image(
label="Загрузите фото",
type="numpy",
height=300
)
mask_image = gr.Image(
label="Нарисуйте маску (черным)",
interactive=True, # Режим рисования маски
type="numpy",
height=300
)
output_image = gr.Image(label="Результат", height=300)
prompt = gr.Textbox(
label="Описание фона",
value="реалистичный фон",
placeholder="Что должно быть вместо удаленного объекта..."
)
btn = gr.Button("Обработать")
btn.click(
fn=process_image,
inputs=[input_image, mask_image, prompt],
outputs=output_image,
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)