|
from typing import Dict, Any |
|
import numpy as np |
|
import joblib |
|
|
|
class EndpointHandler(): |
|
def __init__(self, path: str = ""): |
|
""" |
|
Initialize the model and encoder when the endpoint starts. |
|
""" |
|
self.model = joblib.load(f"{path}/soil.pkl") |
|
self.label_encoder = joblib.load(f"{path}/label_encoder.pkl") |
|
|
|
def __call__(self, data: Dict[str, Any]) -> Dict[str, Any]: |
|
""" |
|
Perform prediction using the trained model. |
|
Expects input data in the format: |
|
{ |
|
"inputs": [N, P, K, temperature, humidity, ph, rainfall] |
|
} |
|
Returns: |
|
{ |
|
"crop": predicted_crop_name |
|
} |
|
""" |
|
inputs = data.get("inputs") |
|
if inputs is None: |
|
return {"error": "No input data provided."} |
|
|
|
inputs = np.array(inputs).reshape(1, -1) |
|
prediction = self.model.predict(inputs) |
|
crop = self.label_encoder.inverse_transform(prediction) |
|
|
|
return {"crop": crop[0]} |
|
|