File size: 3,675 Bytes
94729d4
5569a41
94729d4
 
 
949feff
 
94729d4
c8c2cad
949feff
94729d4
 
 
5569a41
949feff
 
5569a41
94729d4
5569a41
 
 
949feff
 
 
 
 
 
5569a41
949feff
 
 
94729d4
949feff
 
 
 
 
5569a41
949feff
 
 
 
 
 
 
 
 
 
 
 
84a883f
5569a41
949feff
5569a41
 
949feff
5569a41
 
 
949feff
5569a41
 
 
 
 
 
 
 
 
 
949feff
 
 
 
 
 
5569a41
 
949feff
5569a41
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import json
import unittest
from unittest.mock import patch

import numpy as np
import shapely
from affine import Affine

from samgis.prediction_api import predictors
from samgis.prediction_api.predictors import samexporter_predict
from tests import TEST_EVENTS_FOLDER


class TestPredictors(unittest.TestCase):
    @patch.object(predictors, "download_extent")
    def test_get_raster_inference(self, download_extent_mocked):
        name_fn = "samexporter_predict"

        with open(TEST_EVENTS_FOLDER / f"{name_fn}.json") as tst_json:
            inputs_outputs = json.load(tst_json)
            for k, input_output in inputs_outputs.items():
                input_payload = input_output["input"]
                prompt = input_payload["prompt"]
                model_name = input_payload["model_name"]
                bbox = input_payload["bbox"]
                zoom = input_payload["zoom"]
                print(f"k:{k}.")
                img = np.load(TEST_EVENTS_FOLDER / f"{name_fn}" / k / "img.npy")
                affine_transform = Affine.from_gdal(*input_payload["matrix"])
                download_extent_mocked.return_value = img, affine_transform
                expected_output = input_output["output"]

                output_dict = samexporter_predict(
                    bbox,
                    prompt,
                    zoom,
                    model_name
                )
                len_inference_out = output_dict["n_predictions"]
                geojson = output_dict["geojson"]
                n_shapes_geojson = output_dict["n_shapes_geojson"]

                assert isinstance(geojson, str)
                assert isinstance(n_shapes_geojson, int)
                assert len_inference_out == expected_output["n_predictions"]

                output_geojson = shapely.from_geojson(geojson)
                print("output_geojson::{}.".format(output_geojson))
                assert isinstance(output_geojson, shapely.GeometryCollection)
                assert len(output_geojson.geoms) > 0

    @patch.object(predictors, "get_raster_inference_with_embedding_from_dict")
    @patch.object(predictors, "SegmentAnythingONNX2")
    @patch.object(predictors, "download_extent")
    @patch.object(predictors, "get_vectorized_raster_as_geojson")
    def test_samexporter_predict_mocked(
            self,
            get_vectorized_raster_as_geojson_mocked,
            download_extent_mocked,
            segment_anything_onnx2_mocked,
            get_raster_inference_with_embedding_from_dict_mocked
    ):
        """
        model_instance = SegmentAnythingONNX()
        img, matrix = download_extent(DEFAULT_TMS, pt0[0], pt0[1], pt1[0], pt1[1], zoom)
        transform = get_affine_transform_from_gdal(matrix)
        mask, n_predictions = get_raster_inference(img, prompt, models_instance, model_name)
        get_vectorized_raster_as_geojson(mask, matrix)
        """
        aff = 1, 2, 3, 4, 5, 6
        segment_anything_onnx2_mocked.return_value = "SegmentAnythingONNX2_instance"
        input_downloaded = np.arange(0, 300, 1).reshape((10, 10, 3))
        download_extent_mocked.return_value = input_downloaded, aff
        mask_output = np.zeros((10, 10))
        mask_output[4:4, 6:6] = 255.0
        get_raster_inference_with_embedding_from_dict_mocked.return_value = mask_output, 1
        get_vectorized_raster_as_geojson_mocked.return_value = {"geojson": "{}", "n_shapes_geojson": 2}
        output = samexporter_predict(
            bbox=[[1, 2], [3, 4]], prompt=[{}], zoom=10, model_name="mobile_sam", source_name="localtest"
        )
        assert output == {"n_predictions": 1, "geojson": "{}", "n_shapes_geojson": 2}