File size: 3,933 Bytes
b34a35e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI,UploadFile,File
from pydantic import BaseModel
import pickle
import json
import pandas as pd
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.inception_v3 import preprocess_input
import numpy as np
import os
import gdown
import lightgbm as lgb
from PIL import Image

CHUNK_SIZE = 1024

app = FastAPI(
    title='Farmer Buddy API',
    description='API for Farmer Buddy App',
)

class crop_recommend_input(BaseModel):
    N : int
    P : int
    K : int
    temperature : float
    humidity : float
    ph : float
    rainfall : float

class crop_yield_input(BaseModel):
    State_Name : str
    District_Name : str
    Season : str
    Crop : str
    Area : float
    Production : float
id = "1AWo5bjBSjtVRZlTcdvF1MHAXfvAgFrny"
output = "modelcrops.zip"
gdown.download(id=id, output=output, quiet=False)
from zipfile import ZipFile
with ZipFile("modelcrops.zip", 'r') as zObject:
    zObject.extractall(
        path="")
    
os.remove(str("modelcrops.zip"))
crop_recommend_ml = pickle.load(open('CropRecommendationSystem','rb'))
crop_yield_ml = pickle.load(open('CropYieldPrediction.pkl','rb'))
crop_disease_ml=load_model('CropDiseaseDetection.h5')

@app.post('/croprecommend')
def croprecommend(input_parameters : crop_recommend_input):

    input_data = input_parameters.json()
    input_dictionary = json.loads(input_data)
    N = input_dictionary['N']
    P = input_dictionary['P']
    K = input_dictionary['K']
    temperature = input_dictionary['temperature']
    humidity = input_dictionary['humidity']
    ph = input_dictionary['ph']
    rainfall = input_dictionary['rainfall']
    input_list = [N, P, K, temperature, humidity, ph, rainfall]
    prediction = crop_recommend_ml.predict([input_list])
    print(prediction[0])
    return {"crop":str(prediction[0])}

@app.post('/cropyield')
def cropyield(input_parameters : crop_yield_input):

    input_data = input_parameters.json()
    input_dictionary = json.loads(input_data)
    State_Name = input_dictionary['State_Name']
    District_Name = input_dictionary['District_Name']
    Season = input_dictionary['Season']
    Crop = input_dictionary['Crop']
    Area = input_dictionary['Area']
    Production = input_dictionary['Production']
    input_list = [State_Name, District_Name, Season, Crop, Area, Production]
    # df = pd.DataFrame([['Chhattisgarh',	'BEMETARA',	'Rabi'	,'Potato',	3.0	,20.0]], columns=['State_Name',	'District_Name',	'Season',	'Crop',	'Area'	,'Production'])
    df = pd.DataFrame([input_list], columns=['State_Name',	'District_Name',	'Season',	'Crop',	'Area'	,'Production'])
    prediction = crop_yield_ml.predict(df)
    return {"yield":float(prediction[0])}

@app.post('/cropdisease')
async def cropdisease(file: UploadFile = File(...)):
    try:
        contents = file.file.read()
        with open(file.filename, 'wb') as f:
            f.write(contents)
    except Exception:
        return {"message": "There was an error uploading the file"}
    finally:
        file.file.close()
    classes = ['Potato___Early_blight', 'Tomato_healthy', 'Tomato__Target_Spot', 'Tomato__Tomato_mosaic_virus', 'Tomato_Septoria_leaf_spot', 'Tomato_Bacterial_spot', 'Tomato_Spider_mites_Two_spotted_spider_mite', 'Tomato_Early_blight', 'Tomato_Late_blight', 'Pepper__bell___healthy', 'Tomato__Tomato_YellowLeaf__Curl_Virus', 'Potato___healthy', 'Tomato_Leaf_Mold', 'Potato___Late_blight', 'Pepper__bell___Bacterial_spot']
    img=image.load_img(str(file.filename),target_size=(224,224))
    x=image.img_to_array(img)
    x=x/255
    x=np.expand_dims(x,axis=0)
    img_data=preprocess_input(x)
    prediction = crop_disease_ml.predict(img_data)
    predictions = list(prediction[0])
    max_num = max(predictions)
    index = predictions.index(max_num)
    print(classes[index])
    os.remove(str(file.filename))
    return {"disease":classes[index]}