ngt-ai-platform / modules /image_classification.py
GaetanoParente's picture
migliorata visualizzazione BPO Dispatcher
96bc481
Raw
History Blame Contribute Delete
2.31 kB
import cv2
import os
import numpy as np
from keras.models import load_model
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MODEL_PATH = os.path.join(BASE_DIR, 'data', 'model', 'medical-image-classification.h5')
IMAGE_SIZE = (224, 224)
CLASS_MAP = {
'Tubercolosi': '⚠️ Rischio Tubercolosi',
'No_Tubercolosi': '✅ Negativo per Tubercolosi',
'Pneumonia': '⚠️ Rischio Polmonite',
'No_Pneumonia': '✅ Negativo per Polmonite',
'No_immagine' : '⚠️ Nessuna immagine caricata'
}
RAW_CLASSES = ['Tubercolosi', 'No_Tubercolosi', 'Pneumonia', 'No_Pneumonia']
# Caricamento Singleton (lo carichiamo una volta sola)
model = None
def load_resources():
global model
if model is None and os.path.exists(MODEL_PATH):
try:
print(f"Caricamento modello X-Ray da {MODEL_PATH}...")
model = load_model(MODEL_PATH, compile=False)
print("✅ Modello X-Ray caricato.")
except Exception as e:
print(f"❌ Errore caricamento modello X-Ray: {e}")
def image_classification(image_array):
"""
Analizza un'immagine radiografica (numpy array) e restituisce le probabilità.
"""
global model
if model is None:
load_resources()
if model is None:
return {"Errore": "Modello non disponibile (Verifica il percorso file)"}
if image_array is None:
response = {}
user_label = CLASS_MAP.get('No_immagine', 'No_immagine')
response[user_label] = 0.0
return response
try:
# 1. Preprocessing Immagine
# Resize a 224x224 come richiesto dal modello
img_resized = cv2.resize(image_array, IMAGE_SIZE)
# Normalizzazione / Espansione dimensioni per il batch
img_batch = np.expand_dims(img_resized, axis=0).astype('float32')
# 2. Predizione
predictions = model.predict(img_batch, verbose=0)[0]
# 3. Formattazione Output
response = {}
for i, prob in enumerate(predictions):
raw_label = RAW_CLASSES[i]
user_label = CLASS_MAP.get(raw_label, raw_label)
response[user_label] = float(prob)
return response
except Exception as e:
print(f"Errore durante l'analisi immagine: {e}")
return {"Errore di Analisi": 0.0}