Ju-Am commited on
Commit
2f77f03
·
1 Parent(s): 0ac34d0

Tentando resolver problema de output

Browse files
Files changed (1) hide show
  1. main.py +26 -9
main.py CHANGED
@@ -7,6 +7,14 @@ from fastapi import FastAPI, File, UploadFile, Depends, HTTPException, status
7
  from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
8
  from feature_extractor_single import process_single_image
9
  from datetime import datetime
 
 
 
 
 
 
 
 
10
 
11
  #1. CONFIGURAÇÃO DA APLICAÇÃO E AUTENTICAÇÃO
12
  app = FastAPI(title="SojaClassifierAPI")
@@ -47,11 +55,15 @@ except FileNotFoundError:
47
  print("Carregando banco de dados de informações (doencas.json)...")
48
  try:
49
  with open('doencas.json', 'r', encoding='utf-8') as f:
50
- DB_INFO = json.load(f) #Carrega o JSON para a memória
51
- print("Banco de dados de informações carregado.")
 
 
 
 
52
  except FileNotFoundError:
53
  print("ERRO: 'doencas.json' não encontrado.")
54
- DB_INFO = {} #Inicia vazio para a API não quebrar
55
 
56
 
57
  #3. ENDPOINTS DA API
@@ -94,14 +106,19 @@ async def classify_image(file: UploadFile = File(...), token: str = Depends(veri
94
  #Faz a predição
95
  pred_numerica = SVM.predict(nova_feature_umap)
96
 
97
- #Converte a predição numérica (ex: 2) de volta para o nome da classe (ex: "Ferrugem")
98
- classe_predita = ENCODER.inverse_transform(pred_numerica)[0]
 
 
 
 
 
 
 
99
 
100
- #BUSCA AS INFORMAÇÕES ADICIONAIS (json)
101
- #Usa .get() para buscar a chave. Se não encontrar, retorna um
102
- #dicionário vazio ou uma mensagem de erro, com segurança
103
  info_adicional = DB_INFO.get(classe_predita, {
104
- "nome": classe_predita, #Fallback: se não achar no JSON, usa a chave feia
105
  "descricao": "Informações não disponíveis.",
106
  "sintomas": [],
107
  "tratamento": ""
 
7
  from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
8
  from feature_extractor_single import process_single_image
9
  from datetime import datetime
10
+ import unicodedata
11
+
12
+ def normalize_string(s: str) -> str:
13
+ """
14
+ Remove inconsistências de Unicode (NFC vs NFD) e espaços extras.
15
+ Transforma 'Vírus' (2 chars) em 'Vírus' (1 char) e remove espaços nas pontas.
16
+ """
17
+ return unicodedata.normalize('NFC', s).strip()
18
 
19
  #1. CONFIGURAÇÃO DA APLICAÇÃO E AUTENTICAÇÃO
20
  app = FastAPI(title="SojaClassifierAPI")
 
55
  print("Carregando banco de dados de informações (doencas.json)...")
56
  try:
57
  with open('doencas.json', 'r', encoding='utf-8') as f:
58
+ raw_db = json.load(f)
59
+ #Cria um novo dicionário com as chaves limpas
60
+ DB_INFO = {normalize_string(k): v for k, v in raw_db.items()}
61
+ print(f"Banco de dados carregado. {len(DB_INFO)} doenças indexadas.")
62
+ #DEBUG: Mostra como as chaves ficaram na memória do servidor
63
+ print(f"Chaves normalizadas: {list(DB_INFO.keys())}")
64
  except FileNotFoundError:
65
  print("ERRO: 'doencas.json' não encontrado.")
66
+ DB_INFO = {}
67
 
68
 
69
  #3. ENDPOINTS DA API
 
106
  #Faz a predição
107
  pred_numerica = SVM.predict(nova_feature_umap)
108
 
109
+ #Converte a predição numérica de volta para o nome da classe
110
+ classe_predita_raw = ENCODER.inverse_transform(pred_numerica)[0]
111
+
112
+ #NORMALIZA A STRING DO MODELO TAMBÉM
113
+ classe_predita = normalize_string(str(classe_predita_raw))
114
+
115
+ #DEBUG: o que exatamente o modelo cuspiu vs o que tem no banco
116
+ #repr() para ver se tem caracteres escondidos como \n ou \r
117
+ print(f"DEBUG CHAVES: Modelo='{repr(classe_predita)}'")
118
 
119
+ #BUSCA AS INFORMAÇÕES
 
 
120
  info_adicional = DB_INFO.get(classe_predita, {
121
+ "nome": classe_predita,
122
  "descricao": "Informações não disponíveis.",
123
  "sintomas": [],
124
  "tratamento": ""