CropAI / backend /knowledge_base.py
bapi143's picture
Deploy CropAI Backend
5fd7795
Raw History Blame Contribute Delete
14.8 kB
# -*- coding: utf-8 -*-
"""
CropAI Agronomic Knowledge Base - Master Integration Hub
Contains curated pathology details, symptoms, exact CIBRC chemical prescriptions (calibrated per 16L/20L knapsack tank),
organic bio-controls, seasonal triggers, and historical outbreak contexts for 127+ crop diseases, pests,
insects, and physiological disorders across Chhattisgarh (Surguja, Bilaspur, Raipur, Durg, Bastar, etc.)
and Pan-India field, pulse, oilseed, cash, vegetable, and fruit crops.
"""
from typing import Dict, Any, Optional
# Import domain modules
from .data_cereals import CEREALS_KNOWLEDGE_BASE
from .data_pulses import PULSES_KNOWLEDGE_BASE
from .data_oilseeds import OILSEEDS_KNOWLEDGE_BASE
from .data_cashcrops import CASH_CROPS_KNOWLEDGE_BASE
from .data_vegetables import VEGETABLES_KNOWLEDGE_BASE
from .data_fruits import FRUITS_KNOWLEDGE_BASE
from .data_benchmark import BENCHMARK_KNOWLEDGE_BASE
from .hf_dataset_sync import get_all_hf_aliases
# Assemble unified agronomic knowledge base
DISEASE_KNOWLEDGE_BASE: Dict[str, Dict[str, Any]] = {}
DISEASE_KNOWLEDGE_BASE.update(CEREALS_KNOWLEDGE_BASE)
DISEASE_KNOWLEDGE_BASE.update(PULSES_KNOWLEDGE_BASE)
DISEASE_KNOWLEDGE_BASE.update(OILSEEDS_KNOWLEDGE_BASE)
DISEASE_KNOWLEDGE_BASE.update(CASH_CROPS_KNOWLEDGE_BASE)
DISEASE_KNOWLEDGE_BASE.update(VEGETABLES_KNOWLEDGE_BASE)
DISEASE_KNOWLEDGE_BASE.update(FRUITS_KNOWLEDGE_BASE)
DISEASE_KNOWLEDGE_BASE.update(BENCHMARK_KNOWLEDGE_BASE)
# =========================================================================
# Hugging Face / Swin / MobileNet / ResNet / YOLO Label Aliases
# =========================================================================
HF_CLASS_MAP: Dict[str, str] = {
# Rice / Paddy Models
'Bacterialblight': 'Rice___Bacterial_Leaf_Blight',
'Bacterial Leaf Blight': 'Rice___Bacterial_Leaf_Blight',
'Blast': 'Rice___Blast',
'Leaf Blast': 'Rice___Blast',
'Neck Blast': 'Rice___Blast',
'Brownspot': 'Rice___Brown_Spot',
'Brown Spot': 'Rice___Brown_Spot',
'Healthy': 'Rice___healthy',
'Healthy Rice Leaf': 'Rice___healthy',
'Rice healthy': 'Rice___healthy',
'Tungro': 'Rice___Tungro',
'Leaf Scald': 'Rice___Sheath_Blight',
'Leaf scald': 'Rice___Sheath_Blight',
'Sheath Blight': 'Rice___Sheath_Blight',
'False Smut': 'Rice___False_Smut',
'Khaira Disease': 'Rice___Khaira_Disease',
'Yellow Stem Borer': 'Rice___Yellow_Stem_Borer',
'Gall Midge': 'Rice___Gall_Midge',
'Brown Plant Hopper': 'Rice___Brown_Plant_Hopper',
'BPH': 'Rice___Brown_Plant_Hopper',
'Leaf Folder': 'Rice___Leaf_Folder',
'Rice Hispa': 'Rice___Hispa',
'Gundhi Bug': 'Rice___Gundhi_Bug',
'Bakanae': 'Rice___Bakanae',
# Wheat
'Wheat Leaf Rust': 'Wheat___Brown_Rust',
'Wheat Brown Rust': 'Wheat___Brown_Rust',
'Wheat Yellow Rust': 'Wheat___Yellow_Rust',
'Wheat Stripe Rust': 'Wheat___Yellow_Rust',
'Wheat Black Rust': 'Wheat___Black_Rust',
'Wheat Stem Rust': 'Wheat___Black_Rust',
'Wheat Loose Smut': 'Wheat___Loose_Smut',
'Wheat Karnal Bunt': 'Wheat___Karnal_Bunt',
'Wheat Powdery Mildew': 'Wheat___Powdery_Mildew',
'Wheat Termite': 'Wheat___Termites',
'Wheat healthy': 'Wheat___healthy',
# Maize / Corn
'Corn (Maize) with Cercospora and Gray Leaf Spot': 'Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot',
'Corn (Maize) with Common Rust': 'Corn_(maize)___Common_rust_',
'Corn (Maize) with Northern Leaf Blight': 'Corn_(maize)___Northern_Leaf_Blight',
'Healthy Corn (Maize) Plant': 'Corn_(maize)___healthy',
'Corn Fall Armyworm': 'Maize___Fall_Armyworm',
'Fall Armyworm': 'Maize___Fall_Armyworm',
'Corn Stem Borer': 'Maize___Stem_Borer',
# Pulses (Chickpea, Pigeonpea, Urad, Moong, Tiwda)
'Chickpea Pod Borer': 'Chickpea___Pod_Borer',
'Gram Pod Borer': 'Chickpea___Pod_Borer',
'Chickpea Fusarium Wilt': 'Chickpea___Fusarium_Wilt',
'Chickpea Ascochyta Blight': 'Chickpea___Ascochyta_Blight',
'Chickpea Dry Root Rot': 'Chickpea___Dry_Root_Rot',
'Chickpea Collar Rot': 'Chickpea___Collar_Rot',
'Chickpea healthy': 'Chickpea___healthy',
'Pigeonpea Wilt': 'Pigeonpea___Fusarium_Wilt',
'Arhar Wilt': 'Pigeonpea___Fusarium_Wilt',
'Pigeonpea Sterility Mosaic': 'Pigeonpea___Sterility_Mosaic_Disease',
'Pigeonpea Pod Borer': 'Pigeonpea___Pod_Borer',
'Pigeonpea Pod Fly': 'Pigeonpea___Pod_Fly',
'Pigeonpea Phytophthora Blight': 'Pigeonpea___Phytophthora_Blight',
'Pigeonpea healthy': 'Pigeonpea___healthy',
'Urad Yellow Mosaic': 'Urad_Moong___Yellow_Mosaic_Virus',
'Moong Yellow Mosaic': 'Urad_Moong___Yellow_Mosaic_Virus',
'Urad Cercospora Leaf Spot': 'Urad_Moong___Cercospora_Leaf_Spot',
'Urad Powdery Mildew': 'Urad_Moong___Powdery_Mildew',
'Urad healthy': 'Urad_Moong___healthy',
'Tiwda Downy Mildew': 'Lathyrus___Downy_Mildew',
'Tiwda Rust': 'Lathyrus___Rust',
'Tiwda healthy': 'Lathyrus___healthy',
# Oilseeds (Soybean, Mustard, Groundnut, Niger)
'Soybean Girdle Beetle': 'Soybean___Girdle_Beetle',
'Soybean Yellow Mosaic': 'Soybean___Yellow_Mosaic_Virus',
'Soybean Rust': 'Soybean___Rust',
'Soybean Anthracnose': 'Soybean___Anthracnose',
'Soybean Stem Fly': 'Soybean___Stem_Fly',
'Soybean Defoliator': 'Soybean___Spodoptera_Litura',
'Healthy Soybean Plant': 'Soybean___healthy',
'Soybean healthy': 'Soybean___healthy',
'Mustard Aphid': 'Mustard___Aphid',
'Mustard White Rust': 'Mustard___White_Rust',
'Mustard Alternaria Blight': 'Mustard___Alternaria_Blight',
'Mustard Powdery Mildew': 'Mustard___Powdery_Mildew',
'Mustard Sclerotinia Stem Rot': 'Mustard___Sclerotinia_Stem_Rot',
'Mustard healthy': 'Mustard___healthy',
'Groundnut Tikka Leaf Spot': 'Groundnut___Tikka_Leaf_Spot',
'Groundnut Collar Rot': 'Groundnut___Collar_Rot',
'Groundnut Rust': 'Groundnut___Rust',
'Groundnut healthy': 'Groundnut___healthy',
# Cash Crops (Cotton, Sugarcane)
'Cotton Pink Bollworm': 'Cotton___Pink_Bollworm',
'Cotton Whitefly': 'Cotton___Whitefly',
'Cotton Bacterial Blight': 'Cotton___Bacterial_Blight',
'Cotton Leaf Curl Virus': 'Cotton___Leaf_Curl_Virus',
'Cotton Boll Rot': 'Cotton___Boll_Rot_Complex',
'Cotton healthy': 'Cotton___healthy',
'Sugarcane Red Rot': 'Sugarcane___Red_Rot',
'Sugarcane Early Shoot Borer': 'Sugarcane___Early_Shoot_Borer',
'Sugarcane Pyrilla': 'Sugarcane___Pyrilla',
'Sugarcane Smut': 'Sugarcane___Smut',
'Sugarcane healthy': 'Sugarcane___healthy',
# Vegetables (Tomato, Potato, Chilli, Brinjal, Okra)
'Tomato with Bacterial Spot': 'Tomato___Bacterial_spot',
'Tomato_Bacterial_spot': 'Tomato___Bacterial_spot',
'Tomato Bacterial Spot': 'Tomato___Bacterial_spot',
'Tomato with Early Blight': 'Tomato___Early_blight',
'Tomato_Early_blight': 'Tomato___Early_blight',
'Tomato Early Blight': 'Tomato___Early_blight',
'Tomato with Late Blight': 'Tomato___Late_blight',
'Tomato_Late_blight': 'Tomato___Late_blight',
'Tomato Late Blight': 'Tomato___Late_blight',
'Tomato with Leaf Mold': 'Tomato___Leaf_Mold',
'Tomato_Leaf_Mold': 'Tomato___Leaf_Mold',
'Tomato with Septoria Leaf Spot': 'Tomato___Septoria_leaf_spot',
'Tomato_Septoria_leaf_spot': 'Tomato___Septoria_leaf_spot',
'Tomato with Spider Mites or Two-spotted Spider Mite': 'Tomato___Spider_mites Two-spotted_spider_mite',
'Tomato_Spider_mites_Two_spotted_spider_mite': 'Tomato___Spider_mites Two-spotted_spider_mite',
'Tomato with Target Spot': 'Tomato___Target_Spot',
'Tomato__Target_Spot': 'Tomato___Target_Spot',
'Tomato Yellow Leaf Curl Virus': 'Tomato___Tomato_Yellow_Leaf_Curl_Virus',
'Tomato__Tomato_YellowLeaf__Curl_Virus': 'Tomato___Tomato_Yellow_Leaf_Curl_Virus',
'Tomato Mosaic Virus': 'Tomato___Tomato_mosaic_virus',
'Tomato__Tomato_mosaic_virus': 'Tomato___Tomato_mosaic_virus',
'Tomato Fruit Borer': 'Tomato___Fruit_Borer',
'Healthy Tomato Plant': 'Tomato___healthy',
'Tomato_healthy': 'Tomato___healthy',
'Tomato healthy': 'Tomato___healthy',
'Potato with Early Blight': 'Potato___Early_blight',
'Potato_Early_blight': 'Potato___Early_blight',
'Potato Early Blight': 'Potato___Early_blight',
'Potato with Late Blight': 'Potato___Late_blight',
'Potato_Late_blight': 'Potato___Late_blight',
'Potato Late Blight': 'Potato___Late_blight',
'Potato Bacterial Wilt': 'Potato___Bacterial_Wilt',
'Healthy Potato Plant': 'Potato___healthy',
'Potato_healthy': 'Potato___healthy',
'Potato healthy': 'Potato___healthy',
'Chilli Leaf Curl Virus': 'Chilli___Leaf_Curl_Virus',
'Chilli Anthracnose Fruit Rot': 'Chilli___Anthracnose_Dieback',
'Chilli Thrips': 'Chilli___Thrips',
'Chilli healthy': 'Chilli___healthy',
'Brinjal Shoot and Fruit Borer': 'Brinjal___Shoot_and_Fruit_Borer',
'Brinjal Phomopsis Blight': 'Brinjal___Phomopsis_Blight_Fruit_Rot',
'Brinjal Little Leaf': 'Brinjal___Little_Leaf_Disease',
'Brinjal healthy': 'Brinjal___healthy',
'Okra Yellow Vein Mosaic Virus': 'Okra___Yellow_Vein_Mosaic_Virus',
'Okra Shoot and Fruit Borer': 'Okra___Shoot_and_Fruit_Borer',
'Okra Powdery Mildew': 'Okra___Powdery_Mildew',
'Okra healthy': 'Okra___healthy',
# Fruits & Alliums (Mango, Papaya, Citrus, Onion, Garlic, Cucurbits)
'Mango Powdery Mildew': 'Mango___Powdery_Mildew',
'Mango Anthracnose': 'Mango___Anthracnose',
'Mango Hopper': 'Mango___Hopper',
'Mango Malformation': 'Mango___Malformation',
'Papaya Ringspot Virus': 'Papaya___Ringspot_Virus',
'Papaya Mealybug': 'Papaya___Mealybug',
'Citrus Canker': 'Citrus___Canker',
'Citrus Greening': 'Citrus___Greening_Huanglongbing',
'Citrus Leaf Miner': 'Citrus___Leaf_Miner',
'Orange with Citrus Greening': 'Orange___Haunglongbing_(Citrus_greening)',
'Onion Purple Blotch': 'Onion_Garlic___Purple_Blotch',
'Onion Thrips': 'Onion_Garlic___Thrips',
'Garlic Stemphylium Blight': 'Onion_Garlic___Stemphylium_Blight',
'Cucurbit Downy Mildew': 'Cucurbits___Downy_Mildew',
'Cucurbit Powdery Mildew': 'Cucurbits___Powdery_Mildew',
'Cucurbit Fruit Fly': 'Cucurbits___Fruit_Fly',
# Benchmark PlantVillage
'Apple Scab': 'Apple___Apple_scab',
'Apple with Black Rot': 'Apple___Black_rot',
'Cedar Apple Rust': 'Apple___Cedar_apple_rust',
'Healthy Apple': 'Apple___healthy',
'Healthy Blueberry Plant': 'Blueberry___healthy',
'Cherry with Powdery Mildew': 'Cherry___Powdery_mildew',
'Healthy Cherry Plant': 'Cherry___healthy',
'Grape with Black Rot': 'Grape___Black_rot',
'Grape with Esca (Black Measles)': 'Grape___Esca_(Black_Measles)',
'Grape with Isariopsis Leaf Spot': 'Grape___Leaf_blight_(Isariopsis_Leaf_Spot)',
'Healthy Grape Plant': 'Grape___healthy',
'Peach with Bacterial Spot': 'Peach___Bacterial_spot',
'Healthy Peach Plant': 'Peach___healthy',
'Bell Pepper with Bacterial Spot': 'Pepper,_bell___Bacterial_spot',
'Pepper__bell___Bacterial_spot': 'Pepper,_bell___Bacterial_spot',
'Healthy Bell Pepper Plant': 'Pepper,_bell___healthy',
'Pepper__bell___healthy': 'Pepper,_bell___healthy',
'Healthy Raspberry Plant': 'Raspberry___healthy',
'Squash with Powdery Mildew': 'Squash___Powdery_mildew',
'Strawberry with Leaf Scorch': 'Strawberry___Leaf_scorch',
'Healthy Strawberry Plant': 'Strawberry___healthy',
}
HF_CLASS_MAP.update(get_all_hf_aliases())
DEFAULT_UNKNOWN_DISEASE: Dict[str, Any] = {
"name": "General Foliar Condition / Mild Anomaly",
"scientific_name": "Pathology Under Observation",
"crop": "General Crop",
"category": "Anomaly",
"severity": "Moderate",
"is_healthy": False,
"season_and_weather": "Variable conditions; monitor field microclimate closely",
"economic_injury_level": "Inspect 20 random plants across field diagonals",
"symptoms": [
"Visual anomaly detected on the leaf surface",
"Possible localized chlorosis, pigmentation irregularity, or mechanical injury",
"Requires further inspection in bright natural daylight"
],
"treatment": {
"immediate_action": [
"Isolate the affected branch or plant to prevent potential contagion",
"Ensure leaf is clean and retake photo in bright natural daylight"
],
"organic_control": [
"Spray neem oil solution (0.5% - 80ml per 16L tank) as a broad-spectrum preventive bio-agent",
"Ensure balanced compost and micro-nutrient foliar spray"
],
"chemical_control": [
"Consult with an agricultural extension officer (KVK / Krishi Mitr) before applying systemic chemical sprays"
]
},
"prevention": [
"Maintain good farm sanitation and remove weed hosts",
"Monitor crop weekly and avoid prolonged leaf wetness"
],
"expert_consultation_recommended": True
}
def get_disease_info(class_id: str) -> Dict[str, Any]:
"""
Look up disease metadata from canonical class ID, HuggingFace label, or normalized query.
Returns comprehensive agronomic details including tank dosages, organic controls, and symptoms.
"""
# 1. Direct dictionary match
if class_id in DISEASE_KNOWLEDGE_BASE:
info = DISEASE_KNOWLEDGE_BASE[class_id].copy()
info["id"] = class_id
return info
# 2. Check Hugging Face explicit alias map
if class_id in HF_CLASS_MAP:
mapped_key = HF_CLASS_MAP[class_id]
if mapped_key in DISEASE_KNOWLEDGE_BASE:
info = DISEASE_KNOWLEDGE_BASE[mapped_key].copy()
info["id"] = mapped_key
return info
# 3. Normalized fuzzy search
clean_id = class_id.replace(" ", "_").replace("-", "_").replace("__", "_").lower()
for key, data in DISEASE_KNOWLEDGE_BASE.items():
clean_key = key.replace(" ", "_").replace("-", "_").replace("__", "_").lower()
if clean_key == clean_id:
info = data.copy()
info["id"] = key
return info
# 4. Partial substring match in knowledge base keys
for key, data in DISEASE_KNOWLEDGE_BASE.items():
if class_id.lower() in key.lower() or key.lower() in class_id.lower():
info = data.copy()
info["id"] = key
return info
# 5. Fallback representation
info = DEFAULT_UNKNOWN_DISEASE.copy()
parts = class_id.split("___")
if len(parts) == 2:
info["crop"] = parts[0].replace("_", " ").title()
info["name"] = f"{info['crop']} {parts[1].replace('_', ' ').title()}"
else:
info["crop"] = "Unknown Crop"
info["name"] = class_id.replace("_", " ").title()
info["id"] = class_id
return info