algaebloom / app.py
Sushan
all required files done
e781781
# app.py
from fastapi import FastAPI, Request
from pydantic import BaseModel
import pickle
import numpy as np
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# Enable CORS for all origins, methods, and headers to avoid CORS issues when making requests from React, Axios, etc.
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
)
# Load the trained model
with open('best_model.pkl', 'rb') as f:
model = pickle.load(f)
# Input schema for FastAPI
class AlgaeInput(BaseModel):
Light: float
Nitrate: float
Iron: float
Phosphate: float
Temperature: float
pH: float
CO2: float
# Root endpoint to check if the API is running
@app.get("/")
def greet_json():
return {"Hello": "World!, the prediction is at /predict"}
# Prediction endpoint to accept input data and return the predicted algae quantity
@app.post("/predict")
async def predict_algae(input_data: AlgaeInput):
try:
# Convert input data to the correct format
input_array = np.array([[input_data.Light, input_data.Nitrate, input_data.Iron,
input_data.Phosphate, input_data.Temperature,
input_data.pH, input_data.CO2]])
# Perform prediction
prediction = model.predict(input_array)
# Return the prediction as a JSON response
return {"predicted_population": prediction[0]}
except Exception as e:
# Return an error message if prediction fails
return {"error": str(e)}