Spaces:
Running
Running
alessandro trinca tornidor
commited on
Commit
•
c311b69
1
Parent(s):
c92d24c
[feat] add support for image embedding re-use
Browse files- poetry.lock +0 -0
- pyproject.toml +2 -2
- samgis_lisa_on_cuda/io/coordinates_pixel_conversion.py +2 -2
- samgis_lisa_on_cuda/io/geo_helpers.py +4 -4
- samgis_lisa_on_cuda/io/tms2geotiff.py +3 -3
- samgis_lisa_on_cuda/io/wrappers_helpers.py +22 -0
- samgis_lisa_on_cuda/prediction_api/global_models.py +2 -0
- samgis_lisa_on_cuda/prediction_api/lisa.py +10 -6
- samgis_lisa_on_cuda/prediction_api/predictors.py +13 -10
- wrappers/fastapi_wrapper.py +9 -5
poetry.lock
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
pyproject.toml
CHANGED
@@ -23,8 +23,8 @@ python = "~3.10"
|
|
23 |
python-dotenv = "^1.0.1"
|
24 |
rasterio = "^1.3.9"
|
25 |
requests = "^2.31.0"
|
26 |
-
|
27 |
-
|
28 |
|
29 |
[tool.poetry.group.aws_lambda]
|
30 |
optional = true
|
|
|
23 |
python-dotenv = "^1.0.1"
|
24 |
rasterio = "^1.3.9"
|
25 |
requests = "^2.31.0"
|
26 |
+
samgis-core = "^1.1.2"
|
27 |
+
lisa-on-cuda = "^1.1.1"
|
28 |
|
29 |
[tool.poetry.group.aws_lambda]
|
30 |
optional = true
|
samgis_lisa_on_cuda/io/coordinates_pixel_conversion.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
"""functions useful to convert to/from latitude-longitude coordinates to pixel image coordinates"""
|
2 |
-
from samgis_core.utilities.type_hints import
|
3 |
|
4 |
from samgis_lisa_on_cuda import app_logger
|
5 |
from samgis_lisa_on_cuda.utilities.constants import TILE_SIZE, EARTH_EQUATORIAL_RADIUS
|
@@ -82,7 +82,7 @@ def get_latlng_to_pixel_coordinates(
|
|
82 |
return point
|
83 |
|
84 |
|
85 |
-
def _from4326_to3857(lat: float, lon: float) ->
|
86 |
from math import radians, log, tan
|
87 |
|
88 |
x_tile: float = radians(lon) * EARTH_EQUATORIAL_RADIUS
|
|
|
1 |
"""functions useful to convert to/from latitude-longitude coordinates to pixel image coordinates"""
|
2 |
+
from samgis_core.utilities.type_hints import TupleFloat, TupleFloatAny
|
3 |
|
4 |
from samgis_lisa_on_cuda import app_logger
|
5 |
from samgis_lisa_on_cuda.utilities.constants import TILE_SIZE, EARTH_EQUATORIAL_RADIUS
|
|
|
82 |
return point
|
83 |
|
84 |
|
85 |
+
def _from4326_to3857(lat: float, lon: float) -> TupleFloat or TupleFloatAny:
|
86 |
from math import radians, log, tan
|
87 |
|
88 |
x_tile: float = radians(lon) * EARTH_EQUATORIAL_RADIUS
|
samgis_lisa_on_cuda/io/geo_helpers.py
CHANGED
@@ -2,11 +2,11 @@
|
|
2 |
from affine import Affine
|
3 |
from numpy import ndarray as np_ndarray
|
4 |
|
5 |
-
from samgis_core.utilities.type_hints import
|
6 |
from samgis_lisa_on_cuda import app_logger
|
7 |
|
8 |
|
9 |
-
def load_affine_transformation_from_matrix(matrix_source_coefficients:
|
10 |
"""
|
11 |
Wrapper for rasterio.Affine.from_gdal() method
|
12 |
|
@@ -32,7 +32,7 @@ def load_affine_transformation_from_matrix(matrix_source_coefficients: list_floa
|
|
32 |
raise e
|
33 |
|
34 |
|
35 |
-
def get_affine_transform_from_gdal(matrix_source_coefficients:
|
36 |
"""wrapper for rasterio Affine from_gdal method
|
37 |
|
38 |
Args:
|
@@ -44,7 +44,7 @@ def get_affine_transform_from_gdal(matrix_source_coefficients: list_float or tup
|
|
44 |
return Affine.from_gdal(*matrix_source_coefficients)
|
45 |
|
46 |
|
47 |
-
def get_vectorized_raster_as_geojson(mask: np_ndarray, transform:
|
48 |
"""
|
49 |
Get shapes and values of connected regions in a dataset or array
|
50 |
|
|
|
2 |
from affine import Affine
|
3 |
from numpy import ndarray as np_ndarray
|
4 |
|
5 |
+
from samgis_core.utilities.type_hints import ListFloat, TupleFloat, DictStrInt
|
6 |
from samgis_lisa_on_cuda import app_logger
|
7 |
|
8 |
|
9 |
+
def load_affine_transformation_from_matrix(matrix_source_coefficients: ListFloat) -> Affine:
|
10 |
"""
|
11 |
Wrapper for rasterio.Affine.from_gdal() method
|
12 |
|
|
|
32 |
raise e
|
33 |
|
34 |
|
35 |
+
def get_affine_transform_from_gdal(matrix_source_coefficients: ListFloat or TupleFloat) -> Affine:
|
36 |
"""wrapper for rasterio Affine from_gdal method
|
37 |
|
38 |
Args:
|
|
|
44 |
return Affine.from_gdal(*matrix_source_coefficients)
|
45 |
|
46 |
|
47 |
+
def get_vectorized_raster_as_geojson(mask: np_ndarray, transform: TupleFloat) -> DictStrInt:
|
48 |
"""
|
49 |
Get shapes and values of connected regions in a dataset or array
|
50 |
|
samgis_lisa_on_cuda/io/tms2geotiff.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import os
|
2 |
|
3 |
from numpy import ndarray
|
4 |
-
from samgis_core.utilities.type_hints import
|
5 |
from xyzservices import TileProvider
|
6 |
|
7 |
from samgis_lisa_on_cuda import app_logger
|
@@ -70,7 +70,7 @@ def download_extent(w: float, s: float, e: float, n: float, zoom: int or str = z
|
|
70 |
raise e_download_extent
|
71 |
|
72 |
|
73 |
-
def crop_raster(w: float, s: float, e: float, n: float, raster: ndarray, raster_bbox:
|
74 |
crs: str = OUTPUT_CRS_STRING, driver: str = DRIVER_RASTERIO_GTIFF) -> tuple_ndarray_transform:
|
75 |
"""
|
76 |
Crop a raster using given bounding box (w, s, e, n) values
|
@@ -134,7 +134,7 @@ def crop_raster(w: float, s: float, e: float, n: float, raster: ndarray, raster_
|
|
134 |
raise e_crop_raster
|
135 |
|
136 |
|
137 |
-
def get_transform_raster(raster: ndarray, raster_bbox:
|
138 |
"""
|
139 |
Convert the input raster image to RGB and extract the Affine
|
140 |
|
|
|
1 |
import os
|
2 |
|
3 |
from numpy import ndarray
|
4 |
+
from samgis_core.utilities.type_hints import TupleFloat
|
5 |
from xyzservices import TileProvider
|
6 |
|
7 |
from samgis_lisa_on_cuda import app_logger
|
|
|
70 |
raise e_download_extent
|
71 |
|
72 |
|
73 |
+
def crop_raster(w: float, s: float, e: float, n: float, raster: ndarray, raster_bbox: TupleFloat,
|
74 |
crs: str = OUTPUT_CRS_STRING, driver: str = DRIVER_RASTERIO_GTIFF) -> tuple_ndarray_transform:
|
75 |
"""
|
76 |
Crop a raster using given bounding box (w, s, e, n) values
|
|
|
134 |
raise e_crop_raster
|
135 |
|
136 |
|
137 |
+
def get_transform_raster(raster: ndarray, raster_bbox: TupleFloat) -> tuple_ndarray_transform:
|
138 |
"""
|
139 |
Convert the input raster image to RGB and extract the Affine
|
140 |
|
samgis_lisa_on_cuda/io/wrappers_helpers.py
CHANGED
@@ -238,3 +238,25 @@ def get_url_tile(source_type: str):
|
|
238 |
|
239 |
def check_source_type_is_terrain(source: str | TileProvider):
|
240 |
return isinstance(source, TileProvider) and source.name in list(XYZTerrainProvidersNames)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
|
239 |
def check_source_type_is_terrain(source: str | TileProvider):
|
240 |
return isinstance(source, TileProvider) and source.name in list(XYZTerrainProvidersNames)
|
241 |
+
|
242 |
+
|
243 |
+
def get_source_name(source: str | TileProvider) -> str | bool:
|
244 |
+
try:
|
245 |
+
match source.lower():
|
246 |
+
case XYZDefaultProvidersNames.DEFAULT_TILES_NAME_SHORT:
|
247 |
+
source_output = providers.query_name(XYZDefaultProvidersNames.DEFAULT_TILES_NAME)
|
248 |
+
case _:
|
249 |
+
source_output = providers.query_name(source)
|
250 |
+
if isinstance(source_output, str):
|
251 |
+
return source_output
|
252 |
+
try:
|
253 |
+
source_dict = dict(source_output)
|
254 |
+
app_logger.info(f"source_dict:{type(source_dict)}, {'name' in source_dict}, source_dict:{source_dict}.")
|
255 |
+
return source_dict["name"]
|
256 |
+
except KeyError as ke:
|
257 |
+
app_logger.error(f"ke:{ke}.")
|
258 |
+
except ValueError as ve:
|
259 |
+
app_logger.info(f"source name::{source}, ve:{ve}.")
|
260 |
+
app_logger.info(f"source name::{source}.")
|
261 |
+
|
262 |
+
return False
|
samgis_lisa_on_cuda/prediction_api/global_models.py
CHANGED
@@ -2,3 +2,5 @@ models_dict = {
|
|
2 |
"fastsam": {"instance": None},
|
3 |
"lisa": {"inference": None}
|
4 |
}
|
|
|
|
|
|
2 |
"fastsam": {"instance": None},
|
3 |
"lisa": {"inference": None}
|
4 |
}
|
5 |
+
embedding_dict = {}
|
6 |
+
|
samgis_lisa_on_cuda/prediction_api/lisa.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
from datetime import datetime
|
2 |
|
3 |
from lisa_on_cuda.utils import app_helpers
|
4 |
-
from samgis_core.utilities.type_hints import
|
5 |
from samgis_lisa_on_cuda import app_logger
|
6 |
from samgis_lisa_on_cuda.io.geo_helpers import get_vectorized_raster_as_geojson
|
7 |
from samgis_lisa_on_cuda.io.raster_helpers import write_raster_png, write_raster_tiff
|
@@ -13,12 +13,13 @@ msg_write_tmp_on_disk = "found option to write images and geojson output..."
|
|
13 |
|
14 |
|
15 |
def lisa_predict(
|
16 |
-
bbox:
|
17 |
prompt: str,
|
18 |
zoom: float,
|
19 |
inference_function_name_key: str = "lisa",
|
20 |
-
source: str = DEFAULT_URL_TILES
|
21 |
-
|
|
|
22 |
"""
|
23 |
Return predictions as a geojson from a geo-referenced image using the given input prompt.
|
24 |
|
@@ -33,6 +34,7 @@ def lisa_predict(
|
|
33 |
zoom: Level of detail
|
34 |
inference_function_name_key: machine learning model name
|
35 |
source: xyz
|
|
|
36 |
|
37 |
Returns:
|
38 |
Affine transform
|
@@ -54,9 +56,9 @@ def lisa_predict(
|
|
54 |
app_logger.info(
|
55 |
f"img type {type(img)} with shape/size:{img.size}, transform type: {type(transform)}, transform:{transform}.")
|
56 |
folder_write_tmp_on_disk = getenv("WRITE_TMP_ON_DISK", "")
|
|
|
57 |
if bool(folder_write_tmp_on_disk):
|
58 |
now = datetime.now().strftime('%Y%m%d_%H%M%S')
|
59 |
-
prefix = f"w{pt1[1]},s{pt1[0]},e{pt0[1]},n{pt0[0]}_"
|
60 |
app_logger.info(msg_write_tmp_on_disk + f"with coords {prefix}, shape:{img.shape}, {len(img.shape)}.")
|
61 |
if img.shape and len(img.shape) == 2:
|
62 |
write_raster_tiff(img, transform, f"{prefix}_{now}_", f"raw_tiff", folder_write_tmp_on_disk)
|
@@ -65,7 +67,9 @@ def lisa_predict(
|
|
65 |
else:
|
66 |
app_logger.info("keep all temp data in memory...")
|
67 |
|
68 |
-
|
|
|
|
|
69 |
# app_logger.info(f"created {n_predictions} masks, preparing conversion to geojson...")
|
70 |
return {
|
71 |
"output_string": output_string,
|
|
|
1 |
from datetime import datetime
|
2 |
|
3 |
from lisa_on_cuda.utils import app_helpers
|
4 |
+
from samgis_core.utilities.type_hints import LlistFloat, DictStrInt
|
5 |
from samgis_lisa_on_cuda import app_logger
|
6 |
from samgis_lisa_on_cuda.io.geo_helpers import get_vectorized_raster_as_geojson
|
7 |
from samgis_lisa_on_cuda.io.raster_helpers import write_raster_png, write_raster_tiff
|
|
|
13 |
|
14 |
|
15 |
def lisa_predict(
|
16 |
+
bbox: LlistFloat,
|
17 |
prompt: str,
|
18 |
zoom: float,
|
19 |
inference_function_name_key: str = "lisa",
|
20 |
+
source: str = DEFAULT_URL_TILES,
|
21 |
+
source_name: str = None
|
22 |
+
) -> DictStrInt:
|
23 |
"""
|
24 |
Return predictions as a geojson from a geo-referenced image using the given input prompt.
|
25 |
|
|
|
34 |
zoom: Level of detail
|
35 |
inference_function_name_key: machine learning model name
|
36 |
source: xyz
|
37 |
+
source_name: name of tile provider
|
38 |
|
39 |
Returns:
|
40 |
Affine transform
|
|
|
56 |
app_logger.info(
|
57 |
f"img type {type(img)} with shape/size:{img.size}, transform type: {type(transform)}, transform:{transform}.")
|
58 |
folder_write_tmp_on_disk = getenv("WRITE_TMP_ON_DISK", "")
|
59 |
+
prefix = f"w{pt1[1]},s{pt1[0]},e{pt0[1]},n{pt0[0]}_"
|
60 |
if bool(folder_write_tmp_on_disk):
|
61 |
now = datetime.now().strftime('%Y%m%d_%H%M%S')
|
|
|
62 |
app_logger.info(msg_write_tmp_on_disk + f"with coords {prefix}, shape:{img.shape}, {len(img.shape)}.")
|
63 |
if img.shape and len(img.shape) == 2:
|
64 |
write_raster_tiff(img, transform, f"{prefix}_{now}_", f"raw_tiff", folder_write_tmp_on_disk)
|
|
|
67 |
else:
|
68 |
app_logger.info("keep all temp data in memory...")
|
69 |
|
70 |
+
app_logger.info(f"source_name:{source_name}, source_name type:{type(source_name)}.")
|
71 |
+
embedding_key = f"{source_name}_z{zoom}_{prefix}"
|
72 |
+
_, mask, output_string = inference_fn(prompt, img, app_logger, embedding_key)
|
73 |
# app_logger.info(f"created {n_predictions} masks, preparing conversion to geojson...")
|
74 |
return {
|
75 |
"output_string": output_string,
|
samgis_lisa_on_cuda/prediction_api/predictors.py
CHANGED
@@ -4,21 +4,21 @@ from samgis_lisa_on_cuda.io.geo_helpers import get_vectorized_raster_as_geojson
|
|
4 |
from samgis_lisa_on_cuda.io.raster_helpers import get_raster_terrain_rgb_like, get_rgb_prediction_image
|
5 |
from samgis_lisa_on_cuda.io.tms2geotiff import download_extent
|
6 |
from samgis_lisa_on_cuda.io.wrappers_helpers import check_source_type_is_terrain
|
7 |
-
from samgis_lisa_on_cuda.prediction_api.global_models import models_dict
|
8 |
from samgis_lisa_on_cuda.utilities.constants import DEFAULT_URL_TILES, SLOPE_CELLSIZE
|
9 |
-
from samgis_core.prediction_api.sam_onnx import SegmentAnythingONNX
|
10 |
-
from samgis_core.prediction_api.sam_onnx import get_raster_inference
|
11 |
from samgis_core.utilities.constants import MODEL_ENCODER_NAME, MODEL_DECODER_NAME, DEFAULT_INPUT_SHAPE
|
12 |
-
from samgis_core.utilities.type_hints import
|
13 |
|
14 |
|
15 |
def samexporter_predict(
|
16 |
-
bbox:
|
17 |
-
prompt:
|
18 |
zoom: float,
|
19 |
model_name_key: str = "fastsam",
|
20 |
-
source: str = DEFAULT_URL_TILES
|
21 |
-
|
|
|
22 |
"""
|
23 |
Return predictions as a geojson from a geo-referenced image using the given input prompt.
|
24 |
|
@@ -33,6 +33,7 @@ def samexporter_predict(
|
|
33 |
zoom: Level of detail
|
34 |
model_name_key: machine learning model name
|
35 |
source: xyz
|
|
|
36 |
|
37 |
Returns:
|
38 |
Affine transform
|
@@ -60,8 +61,10 @@ def samexporter_predict(
|
|
60 |
|
61 |
app_logger.info(
|
62 |
f"img type {type(img)} with shape/size:{img.size}, transform type: {type(transform)}, transform:{transform}.")
|
63 |
-
|
64 |
-
|
|
|
|
|
65 |
app_logger.info(f"created {n_predictions} masks, preparing conversion to geojson...")
|
66 |
return {
|
67 |
"n_predictions": n_predictions,
|
|
|
4 |
from samgis_lisa_on_cuda.io.raster_helpers import get_raster_terrain_rgb_like, get_rgb_prediction_image
|
5 |
from samgis_lisa_on_cuda.io.tms2geotiff import download_extent
|
6 |
from samgis_lisa_on_cuda.io.wrappers_helpers import check_source_type_is_terrain
|
7 |
+
from samgis_lisa_on_cuda.prediction_api.global_models import models_dict, embedding_dict
|
8 |
from samgis_lisa_on_cuda.utilities.constants import DEFAULT_URL_TILES, SLOPE_CELLSIZE
|
9 |
+
from samgis_core.prediction_api.sam_onnx import SegmentAnythingONNX, get_raster_inference_with_embedding_from_dict
|
|
|
10 |
from samgis_core.utilities.constants import MODEL_ENCODER_NAME, MODEL_DECODER_NAME, DEFAULT_INPUT_SHAPE
|
11 |
+
from samgis_core.utilities.type_hints import LlistFloat, DictStrInt, ListDict
|
12 |
|
13 |
|
14 |
def samexporter_predict(
|
15 |
+
bbox: LlistFloat,
|
16 |
+
prompt: ListDict,
|
17 |
zoom: float,
|
18 |
model_name_key: str = "fastsam",
|
19 |
+
source: str = DEFAULT_URL_TILES,
|
20 |
+
source_name: str = None
|
21 |
+
) -> DictStrInt:
|
22 |
"""
|
23 |
Return predictions as a geojson from a geo-referenced image using the given input prompt.
|
24 |
|
|
|
33 |
zoom: Level of detail
|
34 |
model_name_key: machine learning model name
|
35 |
source: xyz
|
36 |
+
source_name: name of tile provider
|
37 |
|
38 |
Returns:
|
39 |
Affine transform
|
|
|
61 |
|
62 |
app_logger.info(
|
63 |
f"img type {type(img)} with shape/size:{img.size}, transform type: {type(transform)}, transform:{transform}.")
|
64 |
+
app_logger.info(f"source_name:{source_name}, source_name type:{type(source_name)}.")
|
65 |
+
embedding_key = f"{source_name}_z{zoom}_w{pt1[1]},s{pt1[0]},e{pt0[1]},n{pt0[0]}"
|
66 |
+
mask, n_predictions = get_raster_inference_with_embedding_from_dict(
|
67 |
+
img, prompt, models_instance, model_name_key, embedding_key, embedding_dict)
|
68 |
app_logger.info(f"created {n_predictions} masks, preparing conversion to geojson...")
|
69 |
return {
|
70 |
"n_predictions": n_predictions,
|
wrappers/fastapi_wrapper.py
CHANGED
@@ -88,7 +88,7 @@ def post_test_string(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
|
88 |
@app.post("/infer_lisa")
|
89 |
def infer_lisa(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
90 |
from samgis_lisa_on_cuda.prediction_api import lisa
|
91 |
-
from samgis_lisa_on_cuda.io.wrappers_helpers import get_parsed_bbox_points_with_string_prompt
|
92 |
|
93 |
app_logger.info("starting lisa inference request...")
|
94 |
|
@@ -100,9 +100,11 @@ def infer_lisa(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
|
100 |
app_logger.info(f"lisa body_request:{body_request}.")
|
101 |
app_logger.info(f"lisa module:{lisa}.")
|
102 |
try:
|
|
|
|
|
103 |
output = lisa.lisa_predict(
|
104 |
bbox=body_request["bbox"], prompt=body_request["prompt"], zoom=body_request["zoom"],
|
105 |
-
source=body_request["source"]
|
106 |
)
|
107 |
duration_run = time.time() - time_start_run
|
108 |
app_logger.info(f"duration_run:{duration_run}.")
|
@@ -132,7 +134,7 @@ def infer_lisa(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
|
132 |
@app.post("/infer_samgis")
|
133 |
def infer_samgis(request_input: ApiRequestBody) -> JSONResponse:
|
134 |
from samgis_lisa_on_cuda.prediction_api import predictors
|
135 |
-
from samgis_lisa_on_cuda.io.wrappers_helpers import get_parsed_bbox_points_with_dictlist_prompt
|
136 |
|
137 |
app_logger.info("starting plain samgis inference request...")
|
138 |
|
@@ -143,9 +145,11 @@ def infer_samgis(request_input: ApiRequestBody) -> JSONResponse:
|
|
143 |
body_request = get_parsed_bbox_points_with_dictlist_prompt(request_input)
|
144 |
app_logger.info(f"body_request:{body_request}.")
|
145 |
try:
|
|
|
|
|
146 |
output = predictors.samexporter_predict(
|
147 |
bbox=body_request["bbox"], prompt=body_request["prompt"], zoom=body_request["zoom"],
|
148 |
-
source=body_request["source"]
|
149 |
)
|
150 |
duration_run = time.time() - time_start_run
|
151 |
app_logger.info(f"duration_run:{duration_run}.")
|
@@ -208,7 +212,7 @@ async def lisa() -> FileResponse:
|
|
208 |
return FileResponse(path=WORKDIR / "static" / "dist" / "lisa.html", media_type="text/html")
|
209 |
|
210 |
|
211 |
-
app.mount("/", StaticFiles(directory=WORKDIR / "static" / "dist", html=True), name="
|
212 |
|
213 |
|
214 |
@app.get("/")
|
|
|
88 |
@app.post("/infer_lisa")
|
89 |
def infer_lisa(request_input: StringPromptApiRequestBody) -> JSONResponse:
|
90 |
from samgis_lisa_on_cuda.prediction_api import lisa
|
91 |
+
from samgis_lisa_on_cuda.io.wrappers_helpers import get_parsed_bbox_points_with_string_prompt, get_source_name
|
92 |
|
93 |
app_logger.info("starting lisa inference request...")
|
94 |
|
|
|
100 |
app_logger.info(f"lisa body_request:{body_request}.")
|
101 |
app_logger.info(f"lisa module:{lisa}.")
|
102 |
try:
|
103 |
+
source_name = get_source_name(request_input.source_type)
|
104 |
+
app_logger.info(f"source_name = {source_name}.")
|
105 |
output = lisa.lisa_predict(
|
106 |
bbox=body_request["bbox"], prompt=body_request["prompt"], zoom=body_request["zoom"],
|
107 |
+
source=body_request["source"], source_name=source_name
|
108 |
)
|
109 |
duration_run = time.time() - time_start_run
|
110 |
app_logger.info(f"duration_run:{duration_run}.")
|
|
|
134 |
@app.post("/infer_samgis")
|
135 |
def infer_samgis(request_input: ApiRequestBody) -> JSONResponse:
|
136 |
from samgis_lisa_on_cuda.prediction_api import predictors
|
137 |
+
from samgis_lisa_on_cuda.io.wrappers_helpers import get_parsed_bbox_points_with_dictlist_prompt, get_source_name
|
138 |
|
139 |
app_logger.info("starting plain samgis inference request...")
|
140 |
|
|
|
145 |
body_request = get_parsed_bbox_points_with_dictlist_prompt(request_input)
|
146 |
app_logger.info(f"body_request:{body_request}.")
|
147 |
try:
|
148 |
+
source_name = get_source_name(request_input.source_type)
|
149 |
+
app_logger.info(f"source_name = {source_name}.")
|
150 |
output = predictors.samexporter_predict(
|
151 |
bbox=body_request["bbox"], prompt=body_request["prompt"], zoom=body_request["zoom"],
|
152 |
+
source=body_request["source"], source_name=source_name
|
153 |
)
|
154 |
duration_run = time.time() - time_start_run
|
155 |
app_logger.info(f"duration_run:{duration_run}.")
|
|
|
212 |
return FileResponse(path=WORKDIR / "static" / "dist" / "lisa.html", media_type="text/html")
|
213 |
|
214 |
|
215 |
+
app.mount("/", StaticFiles(directory=WORKDIR / "static" / "dist", html=True), name="root")
|
216 |
|
217 |
|
218 |
@app.get("/")
|