Spaces:
Sleeping
Sleeping
| import google.generativeai as genai | |
| import easyocr | |
| from dotenv import load_dotenv | |
| import os | |
| import cv2 # ADICIONE ESTA LINHA | |
| # --- CONFIGURAÇÕES (Carregam apenas uma vez) --- | |
| load_dotenv() | |
| chave_api = os.getenv("GOOGLE_API_KEY") # <--- RECOLOQUE SUA CHAVE AQUI | |
| genai.configure(api_key=chave_api) | |
| model = genai.GenerativeModel('gemini-2.5-flash') | |
| print("Inicializando OCR e IA... (Isso acontece só uma vez)") | |
| # Mantenha gpu=False se não tiver CUDA configurado | |
| reader = easyocr.Reader(['pt', 'en'], gpu=False) | |
| def analisar_imagem_agora(caminho_imagem): | |
| print(f"\n--- 🧠 INICIANDO ANÁLISE: {caminho_imagem} ---") | |
| # 1. OCR (LEITURA) - FORMA MAIS SEGURA | |
| try: | |
| print("Executando OCR...") | |
| # CORREÇÃO: Carregar e converter para escala de cinza | |
| img = cv2.imread(caminho_imagem) | |
| img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| resultados_brutos = reader.readtext(img_gray) | |
| # Vamos extrair só o texto manualmente para não dar erro de desempacotamento | |
| lista_textos = [] | |
| for item in resultados_brutos: | |
| # O formato do item é: ( [caixa], "texto lido", confiança ) | |
| if len(item) >= 2: | |
| texto = item[1] | |
| lista_textos.append(texto) | |
| texto_detectado = " ".join(lista_textos) | |
| print(f"📖 Texto Bruto: {texto_detectado}") | |
| if len(texto_detectado) < 2: | |
| print("⚠️ Pouco texto. A identificação pode falhar.") | |
| return | |
| except Exception as e: | |
| print(f"Erro no OCR: {e}") | |
| return | |
| # 2. IA (INTERPRETAÇÃO) | |
| prompt = f""" | |
| Analise este texto de rótulo de produto: "{texto_detectado}" | |
| Identifique: Categoria | Marca | Detalhes. | |
| Responda apenas nesse formato e não escreva textos longos. Se não souber, diga "Não identificado". | |
| """ | |
| try: | |
| response = model.generate_content(prompt) | |
| print(f"🤖 RESPOSTA IA: {response.text}") # Isso aparece no servidor (OK) | |
| # --- O SEGREDO ESTÁ AQUI: TEM QUE TER O RETURN --- | |
| return { | |
| "texto_lido": texto_detectado, | |
| "analise_ia": response.text | |
| } | |
| # ------------------------------------------------- | |
| except Exception as e: | |
| print(f"Erro na IA: {e}") | |
| return {"texto_lido": "Erro", "analise_ia": "Erro na IA"} |