HybaAI commited on
Commit
bfcc517
·
verified ·
1 Parent(s): 155e7bd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -50
app.py CHANGED
@@ -3,81 +3,58 @@ import torch
3
  import torch.nn.functional as F
4
  from torchvision.transforms.functional import normalize
5
  import gradio as gr
6
- from gradio_imageslider import ImageSlider
7
  from briarmbg import BriaRMBG
8
  import PIL
9
  from PIL import Image
10
  from typing import Tuple
11
 
12
-
13
  net = BriaRMBG.from_pretrained("briaai/RMBG-1.4")
14
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
15
  net.to(device)
16
 
17
-
18
  def redimensionar_imagem(imagem):
19
  imagem = imagem.convert('RGB')
20
  tamanho_entrada_modelo = (1024, 1024)
21
  imagem = imagem.resize(tamanho_entrada_modelo, Image.BILINEAR)
22
  return imagem
23
 
24
-
25
  def processar(imagem):
26
-
27
  # preparar entrada
28
  imagem_original = Image.fromarray(imagem)
29
- w,h = tamanho_imagem_original = imagem_original.size
30
  imagem = redimensionar_imagem(imagem_original)
31
  im_np = np.array(imagem)
32
- im_tensor = torch.tensor(im_np, dtype=torch.float32).permute(2,0,1)
33
- im_tensor = torch.unsqueeze(im_tensor,0)
34
- im_tensor = torch.divide(im_tensor,255.0)
35
- im_tensor = normalize(im_tensor,[0.5,0.5,0.5],[1.0,1.0,1.0])
 
36
  if torch.cuda.is_available():
37
- im_tensor=im_tensor.cuda()
38
 
39
- # inferência
40
  resultado = net(im_tensor)
41
- # pós-processamento
42
- resultado = torch.squeeze(F.interpolate(resultado[0][0], size=(h,w), mode='bilinear') ,0)
 
43
  ma = torch.max(resultado)
44
  mi = torch.min(resultado)
45
- resultado = (resultado-mi)/(ma-mi)
46
- # imagem para pil
47
- im_array = (resultado*255).cpu().data.numpy().astype(np.uint8)
 
48
  pil_im = Image.fromarray(np.squeeze(im_array))
49
- # colar a máscara na imagem original
50
- nova_im = Image.new("RGBA", pil_im.size, (0,0,0,0))
 
51
  nova_im.paste(imagem_original, mask=pil_im)
52
 
53
  return nova_im
54
 
55
-
56
- # block = gr.Blocks().queue()
57
-
58
- # with block:
59
- # gr.Markdown("## BRIA RMBG 1.4")
60
- # gr.HTML('''
61
- # <p style="margin-bottom: 10px; font-size: 94%">
62
- # Esta é uma demonstração do BRIA RMBG 1.4 que utiliza
63
- # <a href="https://huggingface.co/briaai/RMBG-1.4" target="_blank">o modelo de matting de imagem BRIA RMBG-1.4</a> como base.
64
- # </p>
65
- # ''')
66
- # with gr.Row():
67
- # with gr.Column():
68
- # input_image = gr.Image(sources=None, type="pil") # None para upload, ctrl+v e webcam
69
- # # input_image = gr.Image(sources=None, type="numpy") # None para upload, ctrl+v e webcam
70
- # run_button = gr.Button(value="Executar")
71
-
72
- # with gr.Column():
73
- # result_gallery = gr.Gallery(label='Resultado', show_label=False, elem_id="gallery", columns=[1], height='auto')
74
- # ips = [input_image]
75
- # run_button.click(fn=processar, inputs=ips, outputs=[result_gallery])
76
-
77
- # block.launch(debug = True)
78
-
79
- # block = gr.Blocks().queue()
80
-
81
  gr.Markdown("## BRIA RMBG 1.4")
82
  gr.HTML('''
83
  <p style="margin-bottom: 10px; font-size: 94%">
@@ -85,10 +62,27 @@ gr.HTML('''
85
  <a href="https://huggingface.co/briaai/RMBG-1.4" target="_blank">o modelo de matting de imagem BRIA RMBG-1.4</a> como base.
86
  </p>
87
  ''')
 
 
88
  exemplos = [['./input.jpg'],]
89
- # output = ImageSlider(position=0.5,label='Imagem sem fundo', type="pil", show_download_button=True)
90
- # demo = gr.Interface(fn=processar,inputs="image", outputs=output, examples=exemplos, title=title, description=description)
91
- demo = gr.Interface(fn=processar,inputs="image", outputs="image", examples=exemplos)
92
 
93
- if __name__ == "__main__":
94
- demo.launch(share=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  import torch.nn.functional as F
4
  from torchvision.transforms.functional import normalize
5
  import gradio as gr
 
6
  from briarmbg import BriaRMBG
7
  import PIL
8
  from PIL import Image
9
  from typing import Tuple
10
 
11
+ # Carregar o modelo pré-treinado
12
  net = BriaRMBG.from_pretrained("briaai/RMBG-1.4")
13
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
14
  net.to(device)
15
 
16
+ # Função para redimensionar a imagem para o tamanho que o modelo espera
17
  def redimensionar_imagem(imagem):
18
  imagem = imagem.convert('RGB')
19
  tamanho_entrada_modelo = (1024, 1024)
20
  imagem = imagem.resize(tamanho_entrada_modelo, Image.BILINEAR)
21
  return imagem
22
 
23
+ # Função principal para processar a imagem
24
  def processar(imagem):
 
25
  # preparar entrada
26
  imagem_original = Image.fromarray(imagem)
27
+ w, h = imagem_original.size
28
  imagem = redimensionar_imagem(imagem_original)
29
  im_np = np.array(imagem)
30
+ im_tensor = torch.tensor(im_np, dtype=torch.float32).permute(2, 0, 1)
31
+ im_tensor = torch.unsqueeze(im_tensor, 0)
32
+ im_tensor = torch.divide(im_tensor, 255.0)
33
+ im_tensor = normalize(im_tensor, [0.5, 0.5, 0.5], [1.0, 1.0, 1.0])
34
+
35
  if torch.cuda.is_available():
36
+ im_tensor = im_tensor.cuda()
37
 
38
+ # Inferência com o modelo
39
  resultado = net(im_tensor)
40
+
41
+ # Pós-processamento
42
+ resultado = torch.squeeze(F.interpolate(resultado[0][0], size=(h, w), mode='bilinear'), 0)
43
  ma = torch.max(resultado)
44
  mi = torch.min(resultado)
45
+ resultado = (resultado - mi) / (ma - mi)
46
+
47
+ # Convertendo o resultado para imagem PIL
48
+ im_array = (resultado * 255).cpu().data.numpy().astype(np.uint8)
49
  pil_im = Image.fromarray(np.squeeze(im_array))
50
+
51
+ # Colando a máscara na imagem original
52
+ nova_im = Image.new("RGBA", pil_im.size, (0, 0, 0, 0))
53
  nova_im.paste(imagem_original, mask=pil_im)
54
 
55
  return nova_im
56
 
57
+ # Interface com Gradio
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  gr.Markdown("## BRIA RMBG 1.4")
59
  gr.HTML('''
60
  <p style="margin-bottom: 10px; font-size: 94%">
 
62
  <a href="https://huggingface.co/briaai/RMBG-1.4" target="_blank">o modelo de matting de imagem BRIA RMBG-1.4</a> como base.
63
  </p>
64
  ''')
65
+
66
+ # Exemplos
67
  exemplos = [['./input.jpg'],]
 
 
 
68
 
69
+ # Função para criar um botão de download
70
+ def preparar_download(imagem_processada):
71
+ return gr.File.update(value=imagem_processada, label="Baixar Imagem Processada", visible=True)
72
+
73
+ # Configurando a interface
74
+ output = gr.Image(type="pil", label="Imagem Processada")
75
+ download_output = gr.File(label="Baixar Imagem Processada", visible=False) # Inicialmente invisível
76
+
77
+ # Definindo a interface com inputs e outputs
78
+ demo = gr.Interface(
79
+ fn=processar,
80
+ inputs=gr.Image(type="numpy", label="Carregar Imagem"), # Traduzido "Image" para "Carregar Imagem"
81
+ outputs=[output, download_output],
82
+ examples=exemplos,
83
+ title="BRIA RMBG 1.4",
84
+ description="Remover o fundo da imagem usando o modelo BRIA RMBG 1.4.",
85
+ )
86
+
87
+ # Atualizando o botão de download após a imagem ser processada
88
+ demo.launch(share=False)