DHEIVER commited on
Commit
10eabe4
·
verified ·
1 Parent(s): 123d916

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -13
app.py CHANGED
@@ -3,6 +3,8 @@ from transformers import Blip2Processor, Blip2ForConditionalGeneration, pipeline
3
  from PIL import Image
4
  import requests
5
  import os
 
 
6
 
7
  # Função para verificar se o modelo existe localmente
8
  def check_model_locally(model_name):
@@ -30,10 +32,11 @@ else:
30
  print(f"Modelo {nutrition_model_name} não encontrado localmente. Baixando...")
31
  nutrition_model = pipeline("text2text-generation", model=nutrition_model_name)
32
 
33
- def interpret_image(image):
34
- # Converter a imagem para o formato PIL se necessário
35
- if isinstance(image, str):
36
- image = Image.open(requests.get(image, stream=True).raw)
 
37
 
38
  # Processar a imagem e gerar a descrição usando BLIP-2
39
  inputs = processor(image, return_tensors="pt")
@@ -49,11 +52,10 @@ def interpret_image(image):
49
 
50
  return description
51
 
52
- def nutritional_analysis(image):
53
- # Passo 1: Gerar descrição da imagem usando BLIP-2
54
- description = interpret_image(image)
55
-
56
- # Passo 2: Criar um prompt refinado para análise nutricional
57
  prompt = (
58
  f"Com base na descrição do prato de comida abaixo, forneça uma análise nutricional detalhada.\n\n"
59
  f"Descrição do prato: {description}\n\n"
@@ -67,14 +69,13 @@ def nutritional_analysis(image):
67
  f"Análise nutricional:"
68
  )
69
 
70
- # Passo 3: Usar o modelo de linguagem para gerar a análise nutricional
71
  analysis = nutrition_model(prompt, max_length=300)[0]['generated_text']
72
 
73
  # Pós-processamento para formatar a análise nutricional
74
  analysis = analysis.replace("Análise nutricional:", "").strip()
75
 
76
- # Retornar a descrição e a análise nutricional
77
- return description, analysis
78
 
79
  # Interface Gradio com Design Avançado
80
  with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="cyan")) as demo:
@@ -114,7 +115,17 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="cyan")) a
114
  # Função para processar a imagem
115
  def process_image(image):
116
  try:
117
- description, analysis = nutritional_analysis(image)
 
 
 
 
 
 
 
 
 
 
118
  feedback.update("✅ Análise concluída com sucesso!")
119
  return description, analysis
120
  except Exception as e:
 
3
  from PIL import Image
4
  import requests
5
  import os
6
+ import io
7
+ from functools import lru_cache
8
 
9
  # Função para verificar se o modelo existe localmente
10
  def check_model_locally(model_name):
 
32
  print(f"Modelo {nutrition_model_name} não encontrado localmente. Baixando...")
33
  nutrition_model = pipeline("text2text-generation", model=nutrition_model_name)
34
 
35
+ # Função para interpretar a imagem com cache
36
+ @lru_cache(maxsize=128)
37
+ def interpret_image_cached(image_bytes):
38
+ # Converter bytes de volta para imagem PIL
39
+ image = Image.open(io.BytesIO(image_bytes))
40
 
41
  # Processar a imagem e gerar a descrição usando BLIP-2
42
  inputs = processor(image, return_tensors="pt")
 
52
 
53
  return description
54
 
55
+ # Função para análise nutricional com cache
56
+ @lru_cache(maxsize=128)
57
+ def nutritional_analysis_cached(description):
58
+ # Criar um prompt refinado para análise nutricional
 
59
  prompt = (
60
  f"Com base na descrição do prato de comida abaixo, forneça uma análise nutricional detalhada.\n\n"
61
  f"Descrição do prato: {description}\n\n"
 
69
  f"Análise nutricional:"
70
  )
71
 
72
+ # Usar o modelo de linguagem para gerar a análise nutricional
73
  analysis = nutrition_model(prompt, max_length=300)[0]['generated_text']
74
 
75
  # Pós-processamento para formatar a análise nutricional
76
  analysis = analysis.replace("Análise nutricional:", "").strip()
77
 
78
+ return analysis
 
79
 
80
  # Interface Gradio com Design Avançado
81
  with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="cyan")) as demo:
 
115
  # Função para processar a imagem
116
  def process_image(image):
117
  try:
118
+ # Converter a imagem para bytes para uso no cache
119
+ buffered = io.BytesIO()
120
+ image.save(buffered, format="JPEG")
121
+ image_bytes = buffered.getvalue()
122
+
123
+ # Obter descrição da imagem do cache
124
+ description = interpret_image_cached(image_bytes)
125
+
126
+ # Obter análise nutricional do cache
127
+ analysis = nutritional_analysis_cached(description)
128
+
129
  feedback.update("✅ Análise concluída com sucesso!")
130
  return description, analysis
131
  except Exception as e: