Spaces:
Sleeping
Sleeping
| import json | |
| import numpy as np | |
| import joblib | |
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| # Load model from the local storage (ensure the model file is in the same directory) | |
| model_path = "model.pkl" | |
| gb_model_loaded = joblib.load(model_path) | |
| # Create FastAPI app | |
| app = FastAPI() | |
| # Define class labels | |
| class_names = [ | |
| 'Emergency & Accident Unit ศูนย์อุบัติเหตุ-ฉุกเฉิน', 'Heart Clinic คลินิกโรคหัวใจ', | |
| 'Neuro Med Center ศูนย์ระบบประสาทเเละสมอง', 'OPD:EYE คลินิกตา', 'Dental คลินิกทันตกรรม', | |
| 'OPD:MED คลินิกอายุกรรมทั่วไป', 'OPD:ENT คลินิกหู คอ จมูก', 'OPD:OBG คลินิกสูติ-นรีเวชกรรม', | |
| 'OPD:Surgery + Uro. คลินิกศัลยกรรมและทางเดินปัสสาวะ', 'Orthopedic Surgery คลินิกศัลยกรรมกระดูก', | |
| 'GI Clinic ศูนย์ระบบทางเดินอาหารเเละตับ', 'Breast Clinic คลินิกเต้านม', 'Skin & Dermatology ศูนย์ผิวหนัง & ความงามด้านผิวพรรณ' | |
| ] | |
| # Define the input format for FastAPI using Pydantic BaseModel | |
| class InputData(BaseModel): | |
| features: list[float] # List of 32 feature inputs | |
| def predict(data: InputData): | |
| try: | |
| # Validate input length | |
| if len(data.features) != 32: | |
| raise HTTPException(status_code=400, detail=f"Expected 32 features, but got {len(data.features)}") | |
| # Convert list to numpy array and reshape | |
| input_array = np.array(data.features).reshape(1, -1) | |
| # Get predictions | |
| prediction = gb_model_loaded.predict_proba(input_array) | |
| # Convert probabilities to percentage and format | |
| probabilities = (prediction[0] * 100).round(2) | |
| result_pro = {class_name: f"{prob:.2f}%" for class_name, prob in zip(class_names, probabilities)} | |
| # Return result as JSON | |
| return {'result': result_pro} | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| # To run the FastAPI app locally for testing | |
| # Uncomment the following lines | |
| # if __name__ == "__main__": | |
| # import uvicorn | |
| # uvicorn.run(app, host="0.0.0.0", port=8501) | |