| import gradio as gr |
| from api import * |
| from processing import * |
| import pandas as pd |
| from indices import indices |
| |
| from lightgbm import LGBMRegressor |
| import pickle |
| import json |
| from datetime import datetime |
| from shapely.geometry import MultiPolygon,shape |
| from shapely.geometry import Point |
| from shapely.geometry.polygon import Polygon |
| from glob import glob |
| import wget |
|
|
| |
| def timer(message,start_time=None): |
| if not start_time: |
| start_time = datetime.now() |
| return start_time |
| elif start_time: |
| thour, temp_sec = divmod((datetime.now() - start_time).total_seconds(), 3600) |
| tmin, tsec = divmod(temp_sec, 60) |
| print('\n'+message+' Time taken: %i hours %i minutes and %s seconds.' % (thour, tmin, round(tsec, 2))) |
|
|
| |
| 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) |
| |
| 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 "Choose an area of ivory coast","","","","" |
| |
| else: |
| start_time_research = timer('research tile',None) |
| df = pd.read_csv("data/frame.csv") |
| name = find_good_tile(df,point2) |
| timer('research tile',start_time_research) |
| if name ==404: |
| reponse = "Sentinel-2 does not have data on this location to date" |
| return reponse,"","","","" |
| else: |
| start_time_download = timer('download tile',None) |
| path = "https://data354-public-assets.s3.eu-west-3.amazonaws.com/cisentineldata/" |
| url = path+name |
| wget.download(url) |
| timer('download tile',start_time_download) |
| |
| start_time_unzip = timer('unzip data',None) |
| unzip() |
| timer('unzip data',start_time_unzip) |
| |
| start_time_processing = timer('processing data',None) |
| |
| start_time_select_best_tile = timer('select best tile',None) |
| 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) |
| timer('select best tile',start_time_select_best_tile) |
|
|
| start_time_10m = timer('create 10m image',None) |
| |
| images_10 = extract_sub_image(bandes_path_10,tile_path,cord) |
| timer('create 10m image',start_time_10m) |
|
|
| start_time_20m = timer('create 20m image',None) |
| |
| |
| images_20 = extract_sub_image(bandes_path_20,tile_path,cord,20,1) |
| start_time_20m = timer('create 20m image',start_time_20m) |
| |
| start_time_60m = timer('create 60m image',None) |
| |
| |
| images_60 = extract_sub_image(bandes_path_60,tile_path,cord,60) |
| start_time_60m = timer('create 60m image',start_time_60m) |
| |
| start_time_make_prediction = timer('make prediction',None) |
| feature = images_10.tolist()+images_20.tolist()+images_60.tolist() |
| bands = ['B02', 'B03', 'B04', 'B05', 'B06', 'B07', 'B08', 'B8A', 'B11', 'B12','B01','B09'] |
| X = pd.DataFrame([feature],columns = bands) |
| |
| X = indices(X) |
| |
| filename = "data/new_version_model.sav" |
| loaded_model = pickle.load(open(filename, 'rb')) |
| |
| biomass = loaded_model.predict(X)[0] |
| carbon = 0.55*biomass |
| timer('make prediction',start_time_make_prediction) |
|
|
| |
| start_time_make_ndvi = timer('NDVI calculation',None) |
| ndvi_index = ndvi(cord,name) |
| timer('NDVI calculation',start_time_make_ndvi) |
| |
| timer('processing data',start_time_processing) |
| |
| |
| delete_tiles() |
|
|
| return str(cld_prob)+ " % cloud coverage", str(days_ago)+" days ago",str(biomass)+" Kg/ha", str(carbon)+" KgC/ha","NDVI: "+ str(ndvi_index) |
|
|
| |
| title = "🌴BEEPAS : Biomass estimation to Evaluate the Environmental Performance of Agroforestry Systems🌴" |
| description = "This application estimates the biomass of areas in ivory coast using AI and satellite images (S2)." |
| article = "Created by data354." |
|
|
| |
| |
| example_list = [["Foret du banco :",5.379913, -4.050445],["Pharmacie Y4 :",5.363292, -3.9481601],["Hotel ivoire : ",5.316458, -4.017172],["Adjamé :",5.346938, -4.027849]] |
|
|
| outputs = [ |
| gr.Textbox(label="Cloud coverage"), |
| gr.Textbox(label="Number of days since sensing"), |
| gr.Textbox(label="Above ground biomass density(AGBD) Kg/ha"), |
| gr.Textbox(label="Carbon stock density KgC/ha "), |
| gr.Textbox(label="Mean NDVI"),] |
|
|
|
|
| demo = gr.Interface( |
| fn=predict, |
| inputs=["text","number", "number"], |
| outputs=outputs, |
| examples=example_list, |
| title=title, |
| description=description, |
| article=article, |
| ) |
|
|
| demo.launch(share=True) |