Spaces:
Sleeping
Sleeping
| 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_model4.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) |