Spaces:
Runtime error
Runtime error
| 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') | |
| 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])} | |
| 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])} | |
| 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]} | |