File size: 4,019 Bytes
46646b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import os
import pickle
import numpy as np
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.models import load_model

BASE_DIR = os.path.abspath(os.path.dirname(__file__))

def get_model(path):
    model = load_model(path, compile=False)
    return model

def img_predict(path, crop):
    data = load_img(path, target_size=(224, 224, 3))
    data = np.asarray(data).reshape((-1, 224, 224, 3))
    data = data * 1.0 / 255
    model = get_model(os.path.join(BASE_DIR, 'models', 'DL_models', f'{crop}_model.h5'))
    if len(crop_diseases_classes[crop]) > 2:
        predicted = np.argmax(model.predict(data)[0])
    else:
        p = model.predict(data)[0]
        predicted = int(np.round(p)[0])
    return predicted

def get_diseases_classes(crop, prediction):
    crop_classes = crop_diseases_classes[crop]
    return crop_classes[prediction][1].replace("_", " ")

def get_crop_recommendation(item):
    scaler_path = os.path.join(BASE_DIR, 'models', 'ML_models', 'crop_scaler.pkl')
    model_path = os.path.join(BASE_DIR, 'models', 'ML_models', 'crop_model.pkl')

    with open(scaler_path, 'rb') as f:
        crop_scaler = pickle.load(f)
    with open(model_path, 'rb') as f:
        crop_model = pickle.load(f)

    scaled_item = crop_scaler.transform(np.array(item).reshape(-1, len(item)))
    prediction = crop_model.predict(scaled_item)[0]
    return crops[prediction]

def get_fertilizer_recommendation(num_features, cat_features):
    scaler_path = os.path.join(BASE_DIR, 'models', 'ML_models', 'fertilizer_scaler.pkl')
    model_path = os.path.join(BASE_DIR, 'models', 'ML_models', 'fertilizer_model.pkl')
    
    with open(scaler_path, 'rb') as f:
        fertilizer_scaler = pickle.load(f)
    with open(model_path, 'rb') as f:
        fertilizer_model = pickle.load(f)

    scaled_features = fertilizer_scaler.transform(np.array(num_features).reshape(-1, len(num_features)))
    cat_features = np.array(cat_features).reshape(-1, len(cat_features))
    item = np.concatenate([scaled_features, cat_features], axis=1)
    prediction = fertilizer_model.predict(item)[0]
    return fertilizer_classes[prediction]

crop_diseases_classes = {'strawberry': [(0, 'Leaf_scorch'), (1, 'healthy')],

			   'patato': [(0, 'Early_blight'),
				 (1, 'Late_blight'),
				 (2, 'healthy')],

			   'corn': [(0, 'Cercospora_leaf_spot Gray_leaf_spot'),
				 (1, 'Common_rust_'),
				 (2, 'Northern_Leaf_Blight'),
				 (3, 'healthy')],

			   'apple': [(0, 'Apple_scab'),
				 (1, 'Black_rot'),
				 (2, 'Cedar_apple_rust'),
				 (3, 'healthy')],

			   'cherry': [(0, 'Powdery_mildew'),
				 (1, 'healthy')],

			   'grape': [(0, 'Black_rot'),
				 (1, 'Esca_(Black_Measles)'),
				 (2, 'Leaf_blight_(Isariopsis_Leaf_Spot)'),
				 (3, 'healthy')],

			   'peach': [(0, 'Bacterial_spot'), (1, 'healthy')],

			   'pepper': [(0, 'Bacterial_spot'),
				 (1, 'healthy')],
				
			   'tomato': [(0, 'Bacterial_spot'),
				 (1, 'Early_blight'),
				 (2, 'Late_blight'),
				 (3, 'Leaf_Mold'),
				 (4, 'Septoria_leaf_spot'),
				 (5, 'Spider_mites Two-spotted_spider_mite'),
				 (6, 'Target_Spot'),
				 (7, 'Tomato_Yellow_Leaf_Curl_Virus'),
				 (8, 'Tomato_mosaic_virus'),
				 (9, 'healthy')]}

crop_list = list(crop_diseases_classes.keys())


crops = {'apple': 1, 'banana': 2, 'blackgram': 3, 'chickpea': 4, 'coconut': 5, 'coffee': 6, 'cotton': 7, 'grapes': 8, 'jute': 9, 'kidneybeans': 10, 'lentil': 11, 'maize': 12, 'mango': 13, 'mothbeans': 14, 'mungbean': 15, 'muskmelon': 16, 'orange': 17, 'papaya': 18, 'pigeonpeas': 19, 'pomegranate': 20, 'rice': 21, 'watermelon': 22}

crops = list(crops.keys())

soil_types = ['Black', 'Clayey', 'Loamy', 'Red', 'Sandy']
Crop_types = ['Barley', 'Cotton', 'Ground Nuts', 'Maize', 'Millets', 'Oil seeds', 'Paddy', 'Pulses', 'Sugarcane', 'Tobacco', 'Wheat']

fertilizer_classes = ['10-26-26', '14-35-14', '17-17-17', '20-20', '28-28', 'DAP', 'Urea']