soil-space / app.py
fadhilelrizanda
add
1645982
from fastapi import FastAPI, HTTPException
import tensorflow as tf
import joblib
import numpy as np
import requests
app = FastAPI()
# Load model and scaler
model_bagemann = tf.keras.models.load_model('./bagemann_model.h5')
scaler_bagemann = joblib.load('./scaler_bagemann.joblib')
model_shertmann = tf.keras.models.load_model('./shermann_model.h5')
scaler_shertmann = joblib.load('./scaler_shertmann.joblib')
# Set the URL of your external API endpoint
API_BASE_URL = "https://soil-api-rho.vercel.app/projects" # Replace with the actual URL
@app.post("/predict/add")
async def predict_and_add(data: dict):
id_project = data.get("id")
depth = data.get("depth")
HL = data.get("HL")
HB = data.get("HB")
FR = data.get("FR")
point = data.get("point")
# Check if input values are provided
if id_project is None or depth is None or HL is None or HB is None or FR is None or point is None:
raise HTTPException(status_code=400, detail="Please provide correct values")
# Scale and predict
input_bagemann = np.array([[HB,HL]])
bagemann_scaled = scaler_bagemann.transform(input_bagemann)
prediction_bagemann = model_bagemann.predict(bagemann_scaled)
predicted_class_bagemann = int(np.argmax(prediction_bagemann, axis=1)[0])
# Scale and predict
input_shertmann = np.array([[HB,FR]])
shertmann_scaled = scaler_shertmann.transform(input_shertmann)
prediction_shertmann = model_shertmann.predict(shertmann_scaled)
predicted_class_shertmann = int(np.argmax(prediction_shertmann, axis=1)[0])
# Prepare data to send to /add/data/:id endpoint
add_data_payload = {
"kedalaman": depth,
"HL": HL,
"HB": HB,
"FR": FR,
"bagemann": predicted_class_bagemann, # Use predicted class here if applicable
"shertmann": predicted_class_shertmann, # Or map appropriately
"titik": point
}
try:
# Send POST request to add data to the project
response = requests.post(f"{API_BASE_URL}/add/data/{id_project}", json=add_data_payload)
response.raise_for_status()
result = response.json()
except requests.exceptions.RequestException as e:
raise HTTPException(status_code=500, detail=f"Error adding data to project: {e}")
return { "add_data_response": result}