Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, File, UploadFile, HTTPException | |
| from fastapi.responses import JSONResponse | |
| from PIL import Image | |
| import numpy as np | |
| import cv2 | |
| import tensorflow as tf # Assuming you're using TensorFlow for loading your model | |
| app = FastAPI() | |
| # Load your model | |
| model = tf.keras.models.load_model("Brain_tumor_pred_large.h5") | |
| def predict_tumor(image: Image.Image): | |
| # Convert the PIL image to OpenCV format | |
| opencv_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) | |
| img = cv2.resize(opencv_image, (128, 128)) | |
| img = img.reshape(1, 128, 128, 3) | |
| # Predict using the model | |
| predictions = model.predict(img)[0] # Get probabilities for each class | |
| predicted_class = np.argmax(predictions) # Index of the predicted class | |
| confidence = predictions[predicted_class] # Confidence of the predicted class | |
| # Determine if a tumor is present | |
| if confidence < 0.20: | |
| if confidence < 0.10: | |
| result = "No Tumor" | |
| confidence = 1.0 | |
| else: | |
| result = "Uncertain" | |
| else: | |
| result = "No Tumor" if predicted_class == 1 else "Tumor Detected" | |
| return {"result": result, "confidence": f"{confidence:.2%}"} | |
| async def predict(upload: UploadFile = File(...)): | |
| try: | |
| # Open and process the uploaded image file | |
| image = Image.open(upload.file) | |
| result = predict_tumor(image) | |
| return JSONResponse(content=result) | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| # To run the FastAPI app, use the following command: | |
| # uvicorn app:app --reload | |