BEEPAS-2 / app.py
youl's picture
Update app.py
2faec43
raw
history blame
3.97 kB
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)
# 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 "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)
# 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']
X = pd.DataFrame([feature],columns = bands)
# vegetation index calculation
X = indices(X)
# load the model from disk
filename = "data/finalized_model.sav"
loaded_model = pickle.load(open(filename, 'rb'))
# make prediction
biomass = loaded_model.predict(X)[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)+" Mg/ha", str(carbon)+" MgC/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 areas in ivory coast 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 = [[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, #[ "text", "text","text","text","text"],
examples=example_list,
title=title,
description=description,
article=article,
)
demo.launch(share=True)