|
import gradio as gr |
|
from api import * |
|
from processing import * |
|
import pandas as pd |
|
from indices import indices |
|
import xgboost as xgb |
|
import pickle |
|
import json |
|
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(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: |
|
df = pd.read_csv("data/frame.csv") |
|
name = find_good_tile(df,point2) |
|
if name ==404: |
|
reponse = "Sentinel-2 does not have data on this location to date" |
|
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) |
|
|
|
images_10 = extract_sub_image(bandes_path_10,tile_path,cord) |
|
|
|
|
|
|
|
images_20 = extract_sub_image(bandes_path_20,tile_path,cord,20,1) |
|
|
|
|
|
|
|
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'] |
|
X = pd.DataFrame([feature],columns = bands) |
|
|
|
X = indices(X) |
|
|
|
filename = "data/finalized_model.sav" |
|
loaded_model = pickle.load(open(filename, 'rb')) |
|
|
|
biomass = loaded_model.predict(X)[0] |
|
carbon = 0.55*biomass |
|
|
|
|
|
ndvi_index = ndvi(cord,name) |
|
|
|
|
|
delete_tiles() |
|
|
|
return str(cld_prob)+ " % cloud coverage", str(days_ago)+" days ago",str(biomass)+" Mg/ha", str(carbon)+" MgC/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 = [[5.379913, -4.050445],[6.54644,-7.86156],[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) Mg/ha"), |
|
gr.Textbox(label="Carbon stock density MgC/ha "), |
|
gr.Textbox(label="Mean NDVI"),] |
|
|
|
|
|
demo = gr.Interface( |
|
fn=predict, |
|
inputs=["number", "number"], |
|
outputs=outputs, |
|
examples=example_list, |
|
title=title, |
|
description=description, |
|
article=article, |
|
) |
|
|
|
demo.launch(share=True) |