import gradio as gr from api import * from processing import * import pandas as pd from indices import indices import xgboost as xgb #from lightgbm import LGBMRegressor from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA import pickle as pk import json import boto3 from shapely.geometry import MultiPolygon,shape from shapely.geometry import Point from shapely.geometry.polygon import Polygon from glob import glob import wget def predict(location_name,lat, lon): cord = [lon,lat] lon = round(lon,4) lat = round(lat,4) x1 = [lon,lat] x2 = [lat,lon] with open("data/CIV_0.json","r") as file: data = json.load(file) # extract ivory coast polygone features = [data['features'][0]['geometry']['coordinates'][0]+data['features'][0]['geometry']['coordinates'][1]+data['features'][0]['geometry']['coordinates'][2]] data['features'][0]['geometry']['coordinates'] = features ci_polygone = data['features'][0]['geometry']['coordinates'][0][0] point1 = Point(x1) point2 = Point(x2) polygon = Polygon(ci_polygone) result = polygon.contains(point1) if not result: return "Choisissez une zone de la CI","","","","" else: df = pd.read_csv("data/frame.csv") name = find_good_tile(df,point2) if name ==404: reponse = "Sentinel-2 ne dispose pas de données ce sur ce lieu à ce jour" return reponse,"","","","" else: path = "https://data354-public-assets.s3.eu-west-3.amazonaws.com/cisentineldata/" url = path+name #wget.download(url) unzip() name,cld_prob,days_ago = select_best_cloud_coverage_tile() bandes_path_10,bandes_path_20,bandes_path_60,tile_path,path_cld_20,path_cld_60 =paths(name) # create image dataset images_10 = extract_sub_image(bandes_path_10,tile_path,cord) # bandes with 20m resolution #path_cld_20 images_20 = extract_sub_image(bandes_path_20,tile_path,cord,20,1) # bandes with 60m resolution #path_cld_60 images_60 = extract_sub_image(bandes_path_60,tile_path,cord,60) # feature = images_10.tolist()+images_20.tolist()+images_60.tolist() bands = ['B02', 'B03', 'B04', 'B05', 'B06', 'B07', 'B08', 'B8A', 'B11', 'B12','B01','B09'] print("feature : ",feature) print("BANDES : ",bands) X = pd.DataFrame([feature],columns = bands) print("==================== X SHAPE", X.shape) ## Coordinate cord_df = pd.DataFrame({"Latitude":[lat], "Longitude":[lon]}) print("==================== cord_df SHAPE", cord_df.shape) ## PCA dimension reduction # later reload the pickle file sdc_reload = pk.load(open("data/sdc.pkl",'rb')) pca_reload = pk.load(open("data/pca.pkl",'rb')) # standardization X_pca = sdc_reload.transform(X) # make pca principalComponents = pca_reload .transform(X_pca) principalDf = pd.DataFrame(data =principalComponents[:,:4], columns = ["PC1","PC2","PC3","PC4"]) print("==================== principalDf SHAPE", principalDf.shape) # vegetation index calculation X = indices(X) # Drop all 12 bands of S2 tab = list(range(12)) X_index = X.drop(X.iloc[:,tab],axis=1) print("=============SHAPE1",X_index.shape) # Create predictive features X_final =pd.concat([cord_df,principalDf,X_index],axis=1) print("=============SHAPE2",X_final.shape) # load the model from disk filename = "data/finalized_model3.sav" loaded_model = pk.load(open(filename, 'rb')) # make prediction biomass = loaded_model.predict(X_final)[0] if biomass<0: biomass =0.0 carbon = 0.55*biomass # NDVI ndvi_index = ndvi(cord,name) # deleted download files #delete_tiles() return str(cld_prob)+ " % cloud coverage", str(days_ago)+" days ago",str(biomass)+" t/ha", str(carbon)+" tC/ha","NDVI: "+ str(ndvi_index) # Create title, description and article strings title = "🌴BEEPAS : Biomass estimation to Evaluate the Environmental Performance of Agroforestry Systems🌴" description = "This application estimates the biomass of certain areas using AI and satellite images (S2)." article = "Created by data354." # Create examples list from "examples/" directory #example_list = [["examples/" + example] for example in os.listdir("examples")] example_list = [["Foret du banco :",5.379913, -4.050445],["Pharmacie Y4 :",5.363292, -3.9481601],["Treichville Bernabé :",5.293168, -3.999796],["Adjamé :",5.346938, -4.027849],["ile boulay :",5.280498,-4.089883]] outputs = [ gr.Textbox(label="Cloud coverage"), gr.Textbox(label="Number of days since sensing"), gr.Textbox(label="Above ground biomass density(AGBD) t/ha"), gr.Textbox(label="Carbon stock density tC/ha "), gr.Textbox(label="Mean NDVI"),] demo = gr.Interface( fn=predict, inputs=["text","number", "number"], outputs=outputs, #[ "text", "text","text","text","text"], examples=example_list, title=title, description=description, article=article, ) demo.launch(share=True)