sravan837's picture
Update app.py
a9f41da verified
from fastapi import FastAPI
import joblib
import pandas as pd
from pydantic import BaseModel
from huggingface_hub import hf_hub_download
import onnxruntime as ort
import numpy as np
# Initialize FastAPI app
app = FastAPI()
# Download the preprocessor and model from Hugging Face
preprocessor_path = hf_hub_download(
repo_id="sravan837/slope-stability-api",
filename="slope_stability_preprocessor.pkl",
)
onnx_model_path = hf_hub_download(
repo_id="sravan837/slope-stability-api",
filename="slope_stability_model.onnx",
)
# Load preprocessor
preprocessor = joblib.load(preprocessor_path)
# Load ONNX model for inference
onnx_session = ort.InferenceSession(onnx_model_path)
# Define input data structure
class SlopeStabilityInput(BaseModel):
unit_weight: float
cohesion: float
friction_angle: float
slope_angle: float
slope_height: float
water_pressure_ratio: float
reinforcement_type: str
# API Endpoint for prediction
@app.post("/predict")
def predict_slope_stability(data: SlopeStabilityInput):
# Convert input to DataFrame
input_data = pd.DataFrame([data.dict()])
# Transform input using preprocessor
transformed_input = preprocessor.transform(input_data)
# Convert to ONNX format
input_array = np.array(transformed_input, dtype=np.float32)
# Check ONNX model input name
input_name = onnx_session.get_inputs()[0].name
# Make prediction
prediction = onnx_session.run(None, {input_name: input_array})[0][0]
return {"Factor of Safety": float(prediction)}