Q_Series_Engine / app.py
persadian's picture
Update app.py
4a6c3be verified
import gradio as gr
# -----------------------------
# Q1 – Soil pH evaluation
# -----------------------------
def Q1_ph_check(ph):
if ph < 5.5:
return "Soil is acidic"
elif ph <= 7:
return "Soil pH is optimal"
else:
return "Soil may be alkaline"
# -----------------------------
# Q5 – Lime recommendation
# -----------------------------
def Q5_lime_requirement(ph):
if ph < 5.5:
return "Apply agricultural lime"
return "No lime required"
# -----------------------------
# Q12 – Organic Carbon Health
# -----------------------------
def Q12_organic_carbon(oc):
if oc < 1:
return "Low organic matter"
elif oc < 3:
return "Moderate organic matter"
else:
return "Healthy organic matter"
# -----------------------------
# Q21 – Nitrogen rule
# -----------------------------
def Q21_nitrogen(crop):
crop_n = {
"Cabbage": 200,
"Jam Tomatoes": 180,
"Green Peppers": 160,
"Green Chillies": 150,
"Marigolds": 90
}
return crop_n.get(crop, 120)
# -----------------------------
# Q29 – Phosphorus rule
# -----------------------------
def Q29_phosphorus(soil_p, crop):
crop_targets = {
"Cabbage": 44,
"Jam Tomatoes": 40,
"Green Peppers": 38,
"Green Chillies": 38,
"Marigolds": 35
}
target_p = crop_targets.get(crop, 40)
if soil_p < target_p:
return target_p - soil_p
elif soil_p >= target_p and soil_p < 120:
return 40
else:
return 0
# -----------------------------
# Q30 – Potassium rule
# -----------------------------
def Q30_potassium(soil_k, crop):
crop_targets = {
"Cabbage": 200,
"Jam Tomatoes": 220,
"Green Peppers": 210,
"Green Chillies": 210,
"Marigolds": 150
}
target_k = crop_targets.get(crop, 200)
if soil_k < target_k:
return target_k - soil_k
return 0
# -----------------------------
# Main Agronomy Engine
# -----------------------------
def agronomy_engine(crop, ph, soil_p, soil_k, organic_carbon):
ph_status = Q1_ph_check(ph)
lime = Q5_lime_requirement(ph)
oc_status = Q12_organic_carbon(organic_carbon)
nitrogen = Q21_nitrogen(crop)
phosphorus = Q29_phosphorus(soil_p, crop)
potassium = Q30_potassium(soil_k, crop)
report = f"""
DARJYO Soil Intelligence Report
Crop: {crop}
Soil Health
------------
pH Status: {ph_status}
Organic Carbon: {oc_status}
Fertilizer Recommendations
---------------------------
Nitrogen: {nitrogen} kg/ha
Phosphorus: {phosphorus} kg/ha
Potassium: {potassium} kg/ha
Lime Recommendation
-------------------
{lime}
"""
return report
demo = gr.Interface(
fn=agronomy_engine,
inputs=[
gr.Dropdown(
["Cabbage", "Jam Tomatoes", "Green Peppers", "Green Chillies", "Marigolds"],
label="Crop"
),
gr.Number(label="Soil pH"),
gr.Number(label="Soil Phosphorus (mg/L)"),
gr.Number(label="Soil Potassium (mg/L)"),
gr.Number(label="Organic Carbon (%)")
],
outputs=gr.Textbox(label="DARJYO Advisory Report"),
title="DARJYO Q-Series Engine",
description="Crop Intelligence Soil nutrient advisory calculator for vegetable and horticulture crops."
)
demo.launch()