Spaces:
Sleeping
Sleeping
File size: 2,303 Bytes
542c815 3f8e328 542c815 d6e753e 8a357d1 542c815 bfcc517 018621a 3267028 b98efed 542c815 bfcc517 155e7bd 542c815 bfcc517 155e7bd bfcc517 155e7bd bfcc517 542c815 bfcc517 70974c3 bfcc517 155e7bd bfcc517 155e7bd bfcc517 542c815 bfcc517 155e7bd 542c815 155e7bd 542c815 bfcc517 1c01319 bfcc517 d04247d d909bca bfcc517 1c01319 bfcc517 1c01319 735502c d04247d bfcc517 735502c 1c01319 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import numpy as np
import torch
import torch.nn.functional as F
from torchvision.transforms.functional import normalize
import gradio as gr
from briarmbg import BriaRMBG
import PIL
from PIL import Image
from typing import Tuple
# Carregar o modelo pré-treinado
net = BriaRMBG.from_pretrained("briaai/RMBG-1.4")
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
net.to(device)
# Função para redimensionar a imagem para o tamanho que o modelo espera
def redimensionar_imagem(imagem):
imagem = imagem.convert('RGB')
tamanho_entrada_modelo = (1024, 1024)
imagem = imagem.resize(tamanho_entrada_modelo, Image.BILINEAR)
return imagem
# Função principal para processar a imagem
def processar(imagem):
# preparar entrada
imagem_original = Image.fromarray(imagem)
w, h = imagem_original.size
imagem = redimensionar_imagem(imagem_original)
im_np = np.array(imagem)
im_tensor = torch.tensor(im_np, dtype=torch.float32).permute(2, 0, 1)
im_tensor = torch.unsqueeze(im_tensor, 0)
im_tensor = torch.divide(im_tensor, 255.0)
im_tensor = normalize(im_tensor, [0.5, 0.5, 0.5], [1.0, 1.0, 1.0])
if torch.cuda.is_available():
im_tensor = im_tensor.cuda()
# Inferência com o modelo
resultado = net(im_tensor)
# Pós-processamento
resultado = torch.squeeze(F.interpolate(resultado[0][0], size=(h, w), mode='bilinear'), 0)
ma = torch.max(resultado)
mi = torch.min(resultado)
resultado = (resultado - mi) / (ma - mi)
# Convertendo o resultado para imagem PIL
im_array = (resultado * 255).cpu().data.numpy().astype(np.uint8)
pil_im = Image.fromarray(np.squeeze(im_array))
# Colando a máscara na imagem original
nova_im = Image.new("RGBA", pil_im.size, (0, 0, 0, 0))
nova_im.paste(imagem_original, mask=pil_im)
return nova_im
# Interface com Gradio
gr.Markdown("")
# Exemplos
exemplos = [['./input.jpg']]
# Configurando a interface
output = gr.Image(type="pil", label="Imagem Processada")
# Definindo a interface com inputs e outputs
demo = gr.Interface(
fn=processar,
inputs=gr.Image(type="numpy", label="Carregar Imagem"), # Mantido em português
outputs=output,
examples=exemplos
)
# Executando a interface
demo.launch(share=False) |