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}