File size: 2,501 Bytes
9113b2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import streamlit as st
from huggingface_hub import hf_hub_download
from terratorch.cli_tools import LightningInferenceModel

# Download the model checkpoint and configuration file
ckpt_path = hf_hub_download(repo_id="ibm-granite/granite-geospatial-biomass", filename="biomass_model.ckpt")
config_path = hf_hub_download(repo_id="ibm-granite/granite-geospatial-biomass", filename="config.yaml")

# Load the model
model = LightningInferenceModel.from_config(config_path, ckpt_path)

# Create a Streamlit app
st.title("Agricultural Yield Prediction App")

# Input field for directory containing input files
input_directory = st.text_input("Enter input directory:")

# Enter Farm Data sidebar
st.sidebar.subheader("Enter Farm Data:")
farm_data = {
    "Soil Type": st.sidebar.selectbox("Soil Type", ["Clay", "Silt", "Sand"]),
    "Weather Conditions": st.sidebar.selectbox("Weather Conditions", ["Sunny", "Rainy", "Cloudy"]),
    "Crop Type": st.sidebar.selectbox("Crop Type", ["Wheat", "Corn", "Soybean"]),
    "Crop Variety": st.sidebar.text_input("Crop Variety"),
    "Soil pH": st.sidebar.number_input("Soil pH", min_value=0.0, max_value=14.0),
    "Fertilizer Application": st.sidebar.text_input("Fertilizer Application"),
    "Irrigation": st.sidebar.selectbox("Irrigation", ["Yes", "No"]),
    "Pest/Disease Management": st.sidebar.text_input("Pest/Disease Management"),
    "Weather Data": {
        "Temperature": st.sidebar.number_input("Temperature (°C)", min_value=-20.0, max_value=40.0),
        "Precipitation": st.sidebar.number_input("Precipitation (mm)", min_value=0.0, max_value=1000.0),
        "Sunshine Hours": st.sidebar.number_input("Sunshine Hours", min_value=0.0, max_value=24.0)
    },
    "Topography": {
        "Slope": st.sidebar.number_input("Slope (%)", min_value=0.0, max_value=100.0),
        "Aspect": st.sidebar.selectbox("Aspect", ["North", "South", "East", "West"])
    },
    "Previous Crop": st.sidebar.selectbox("Previous Crop", ["Wheat", "Corn", "Soybean", "None"])
}

# Button to trigger prediction
if st.button("Predict Yield"):
    if input_directory:
        # Run inference on the input directory
        inference_results, input_file_names = model.inference_on_dir(input_directory)
        
        # Display predicted yields
        st.subheader("Predicted Yields:")
        for file_name, result in zip(input_file_names, inference_results):
            st.write(f"{file_name}: {result}")
    else:
        st.error("Please enter a valid input directory.")