зеркало из https://github.com/microsoft/landcover.git
5bc86d563a | ||
---|---|---|
css | ||
js | ||
land-cover-api | ||
.gitignore | ||
DataLoader.py | ||
GeoTools.py | ||
README.md | ||
ServerModelsCached.py | ||
ServerModelsICLR.py | ||
backend_server.py | ||
create_spatial_index.py | ||
endpoints.js | ||
frontend_server.py | ||
index.html | ||
utils.py |
README.md
Land Cover Mapping Tool
This repository hold both the "frontend" web-application and "backend" web API server that make up our "Land Cover Mapping" demo. An instance of this demo is live, here.
Overview
- "Frontend"
index.html
,endpoints.js
- Whenever an user clicks somewhere on the map, the app will query each server defined in
endpoints.js
and show the results overlayed on the map.
- "Backend"
- Consists of
backend_server.py
,ServerModels*.py
,DataLoader.py
backend_server.py
starts a bottle server to serve the API- Can be provided a port via command line argument, must be provided a "model" to serve via command line argument.
- The "model" that is provided via the command line argument corresponds to one of the
ServerModels*.py
files. Currently this interface is just an ugly hack.
DataLoader.py
contains all the code for finding the data assosciated with a given spatial query.
- Consists of
API
The "backend" server provides the following API:
POST /predPatch
Input example:
{
"extent": { // definition of bounding box to run model on
"xmax": bottomright.x,
"xmin": topleft.x,
"ymax": topleft.y,
"ymin": bottomright.y,
"spatialReference": {
"latestWkid": 3857 // CRS of the coordinates
}
},
"weights": [0.25, 0.25, 0.25, 0.25], // reweighting of the softmax outputs, there should be one number (per class)
}
Output example:
{
"extent": ..., // copied from input
"weights": ..., // copied from input
"model_name": "Full-US-prerun", // name of the model being served
"input_naip": "..." // base64 encoding of input NAIP imagery used to generate the model output, as PNG
"output_hard": "..." // base64 encoding of hard class estimates, also as PNG
"output_soft": "..." // base64 encoding of soft class estimates, see `utils.class_prediction_to_img()` for how image is generated
}
POST /getInput
Input example:
{
"extent": { // definition of bounding box to run model on
"xmax": bottomright.x,
"xmin": topleft.x,
"ymax": topleft.y,
"ymin": bottomright.y,
"spatialReference": {
"latestWkid": 3857 // CRS of the coordinates
}
},
}
Output example:
{
"extent": ..., // copied from input
"input_naip": "..." // base64 encoding of input NAIP imagery used to generate the model output, as PNG
}
Setup
Copy the files from //mslandcoverstorageeast.file.core.windows.net/chesapeake/demo_data/
into data/
. This should include: list_all_naip.txt
, tile_index.dat
, tile_index.idx
, tiles.p
.
Issues/To-do list
/predPatch
will probably not work with other CRSs (besides EPSG:3857)/predPatch
will probably not fail in an useful way- We want the
backend_server.py
to be decoupled from the implementation of the code needed to run the model. The way this currently works (inmain()
ofbackend_server.py
) is really hacky. - If you switch the "Sharpness" slider immediately after clicking on the map (before results are returned) then an error happens.