|
|
|
|
|
import tensorflow as tf |
|
|
import numpy as np |
|
|
from PIL import Image |
|
|
from huggingface_hub import hf_hub_download |
|
|
import json |
|
|
|
|
|
|
|
|
model_path = hf_hub_download(repo_id="abdo1176/brain-model-test", filename="model.keras") |
|
|
class_names_path = hf_hub_download(repo_id="abdo1176/brain-model-test", filename="class_names.json") |
|
|
|
|
|
|
|
|
model = tf.keras.models.load_model(model_path) |
|
|
with open(class_names_path, 'r') as f: |
|
|
class_names = json.load(f) |
|
|
|
|
|
def preprocess_image(image_path): |
|
|
"""Preprocess image for model prediction""" |
|
|
image = Image.open(image_path).convert('RGB') |
|
|
image = image.resize((224, 224)) |
|
|
image = np.array(image) / 255.0 |
|
|
image = np.expand_dims(image, axis=0) |
|
|
return image |
|
|
|
|
|
def predict_brain_tumor(image_path): |
|
|
"""Predict brain tumor from MRI image""" |
|
|
image = preprocess_image(image_path) |
|
|
predictions = model.predict(image) |
|
|
predicted_idx = np.argmax(predictions[0]) |
|
|
confidence = float(predictions[0][predicted_idx]) |
|
|
|
|
|
return { |
|
|
"predicted_class": class_names[predicted_idx], |
|
|
"confidence": confidence, |
|
|
"all_predictions": {class_names[i]: float(predictions[0][i]) for i in range(len(class_names))} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|