コード例 #1
0
ファイル: predict_rf.py プロジェクト: undp/satlomas-back
def superimpose(inm, inr):
    run_subprocess(
        '{otb_bin_path}/otbcli_Superimpose -inr {inr} -inm {inm} -out {out}'.
        format(otb_bin_path=settings.OTB_BIN_PATH,
               inr=os.path.join(RESULTS_SRC, "{}.tif".format(inr)),
               inm=os.path.join(RESULTS_SRC, "{}.tif".format(inm)),
               out=os.path.join(RESULTS_FEAT, "{}.tif".format(inm))))
コード例 #2
0
def clip(product):
    print("# Clip", product['title'])
    name = '{}.SAFE'.format(product['title'])

    dst_folder = os.path.join(S1_RAW_PATH, 'proc', name, 'clip')
    os.makedirs(dst_folder, exist_ok=True)

    vv_src = os.path.join(S1_RAW_PATH, 'proc', name, 'despeck', 'vv.tiff')
    vv_dst = os.path.join(dst_folder, 'vv.tiff')
    if not os.path.exists(vv_dst):
        run_subprocess(
            '{gdal_bin_path}/gdalwarp -of GTiff -cutline {aoi} -crop_to_cutline {src} {dst}'
            .format(gdal_bin_path=settings.GDAL_BIN_PATH,
                    aoi=AOI_PATH,
                    src=vv_src,
                    dst=vv_dst))

    vh_src = os.path.join(S1_RAW_PATH, 'proc', name, 'despeck', 'vh.tiff')
    vh_dst = os.path.join(dst_folder, 'vh.tiff')
    if not os.path.exists(vh_dst):
        run_subprocess(
            '{gdal_bin_path}/gdalwarp -of GTiff -cutline {aoi} -crop_to_cutline {src} {dst}'
            .format(gdal_bin_path=settings.GDAL_BIN_PATH,
                    aoi=AOI_PATH,
                    src=vh_src,
                    dst=vh_dst))
コード例 #3
0
def orthorectify(product):
    print("# Orthorectify", product['title'])
    name = '{}.SAFE'.format(product['title'])

    dst_folder = os.path.join(S1_RAW_PATH, 'proc', name, 'ortho')
    os.makedirs(dst_folder, exist_ok=True)

    src = os.path.join(S1_RAW_PATH, 'proc', name, 'calib', 'vv.tiff')
    dst = os.path.join(dst_folder, 'vv.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_OrthoRectification -io.in {src} -io.out {dst} -elev.geoid {geoid_path} -elev.dem {dem_path} -opt.gridspacing 50'
            .format(otb_bin_path=settings.OTB_BIN_PATH,
                    src=src,
                    dst=dst,
                    geoid_path=GEOID_PATH,
                    dem_path=DEM_PATH))

    src = os.path.join(S1_RAW_PATH, 'proc', name, 'calib', 'vh.tiff')
    dst = os.path.join(dst_folder, 'vh.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_OrthoRectification -io.in {src} -io.out {dst} -elev.geoid {geoid_path} -elev.dem {dem_path} -opt.gridspacing 50'
            .format(otb_bin_path=settings.OTB_BIN_PATH,
                    src=src,
                    dst=dst,
                    geoid_path=GEOID_PATH,
                    dem_path=DEM_PATH))
コード例 #4
0
ファイル: predict_rf.py プロジェクト: undp/satlomas-back
def classify_image():
    run_subprocess(
        '{otb_bin_path}/otbcli_ImageClassifier -in {input} -model {model} -out {out}'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                input=os.path.join(RESULTS_DIR, 'features.tif'),
                model=MODEL_PATH,
                out=os.path.join(RESULTS_DIR, 'cover.tif')))
コード例 #5
0
def superimpose(products):
    print("# Superimpose")

    ref_product = products[0]
    ref_name = '{}.SAFE'.format(ref_product['title'])

    inr = os.path.join(S1_RAW_PATH, 'proc', ref_name, 'concatenate',
                       'concatenate.tiff')
    dst = os.path.join(S1_RAW_PATH, 'proc', ref_name, 'concatenate',
                       'aligned.tiff')
    if not os.path.exists(dst):
        shutil.copyfile(inr, dst)

    for p in products[1:]:
        name = '{}.SAFE'.format(p['title'])
        inm = os.path.join(S1_RAW_PATH, 'proc', name, 'concatenate',
                           'concatenate.tiff')
        dst = os.path.join(S1_RAW_PATH, 'proc', name, 'concatenate',
                           'aligned.tiff')
        if not os.path.exists(dst):
            run_subprocess(
                '{otb_bin_path}/otbcli_Superimpose -inr {inr} -inm {inm} -out {out}'
                .format(otb_bin_path=settings.OTB_BIN_PATH,
                        inr=inr,
                        inm=inm,
                        out=dst))
コード例 #6
0
def generate_vvvh(period):
    print("# Generate VV/VH band", period)
    src = os.path.join(S1_RES_PATH, str(period.pk), 'median.tiff')
    dst = os.path.join(S1_RES_PATH, str(period.pk), 'vv-vh.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_BandMath -il {src} -out {dst} -exp "im1b1 / im1b2"'
            .format(otb_bin_path=settings.OTB_BIN_PATH, src=src, dst=dst))
コード例 #7
0
ファイル: predict_rf.py プロジェクト: undp/satlomas-back
def extract_haralick(name, band):
    run_subprocess(
        '{otb_bin_path}/otbcli_HaralickTextureExtraction -in {input} -channel {band} -texture simple -parameters.min 0 -parameters.max 0.3 -out {out}'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                input=os.path.join(RESULTS_FEAT, "{}.tif".format(name)),
                band=band,
                out=os.path.join(RESULTS_FEAT,
                                 'haralick_{}_{}.tif'.format(name, band))))
コード例 #8
0
ファイル: predict_rf.py プロジェクト: undp/satlomas-back
def extract_local_stats(name, band):
    run_subprocess(
        '{otb_bin_path}/otbcli_LocalStatisticExtraction -in {input} -channel {band} -radius 3 -out {out}'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                input=os.path.join(RESULTS_FEAT, "{}.tif".format(name)),
                band=band,
                out=os.path.join(RESULTS_FEAT,
                                 'local_stats_{}_{}.tif'.format(name, band))))
コード例 #9
0
ファイル: predict_rf.py プロジェクト: undp/satlomas-back
def concatenate_images():
    current_dir = os.getcwd()
    os.chdir(RESULTS_FEAT)
    run_subprocess(
        '{otb_bin_path}/otbcli_ConcatenateImages -il $(ls {il}) -out {out}'.
        format(otb_bin_path=settings.OTB_BIN_PATH,
               il=RESULTS_FEAT,
               out=os.path.join(RESULTS_DIR, 'features.tif')))
    os.chdir(current_dir)
コード例 #10
0
def concatenate_results(period):
    print("# Concatenate results", period)
    median = os.path.join(S1_RES_PATH, str(period.pk), 'median.tiff')
    vv_vh = os.path.join(S1_RES_PATH, str(period.pk), 'vv-vh.tiff')
    dst = os.path.join(S1_RES_PATH, str(period.pk), 'concatenate.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_ConcatenateImages -il {median} {vv_vh} -out {dst}'
            .format(otb_bin_path=settings.OTB_BIN_PATH,
                    median=median,
                    vv_vh=vv_vh,
                    dst=dst))
コード例 #11
0
def clip_results(period_s):
    mosaic_path = os.path.join(settings.IMAGES_PATH, 'mosaic', period_s)
    tif_10m = f's2_{period_s}_10m.tif'
    tif_20m = f's2_{period_s}_20m.tif'

    srcs = [tif_10m, tif_20m]

    for src in srcs:
        run_subprocess(
            '{gdal_bin_path}/gdalwarp -of GTiff -cutline {aoi} -crop_to_cutline {src} {dst}'
            .format(gdal_bin_path=settings.GDAL_BIN_PATH,
                    aoi=AOI_UTM_PATH,
                    src=os.path.join(mosaic_path, src),
                    dst=os.path.join(RESULTS_PATH, src)))
コード例 #12
0
def clip_result(period):
    print("# Clip result", period)
    src = os.path.join(S1_RES_PATH, str(period.pk), 'concatenate.tiff')
    os.makedirs(RESULTS_PATH, exist_ok=True)
    dst_name = 's1_{dfrom}_{dto}.tif'.format(
        dfrom=period.date_from.strftime('%Y%m'),
        dto=period.date_to.strftime('%Y%m'))
    dst = os.path.join(RESULTS_PATH, dst_name)
    if not os.path.exists(dst):
        run_subprocess(
            '{gdal_bin_path}/gdalwarp -of GTiff -cutline {aoi} -crop_to_cutline {src} {dst}'
            .format(gdal_bin_path=settings.GDAL_BIN_PATH,
                    aoi=AOI_PATH,
                    src=src,
                    dst=dst))
コード例 #13
0
def concatenate(product):
    print("# Concatenate", product['title'])
    name = '{}.SAFE'.format(product['title'])

    dst_folder = os.path.join(S1_RAW_PATH, 'proc', name, 'concatenate')
    os.makedirs(dst_folder, exist_ok=True)

    vv_src = os.path.join(S1_RAW_PATH, 'proc', name, 'clip', 'vv.tiff')
    vh_src = os.path.join(S1_RAW_PATH, 'proc', name, 'clip', 'vh.tiff')
    dst = os.path.join(dst_folder, 'concatenate.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_ConcatenateImages -il {vv_src} {vh_src} -out {dst}'
            .format(otb_bin_path=settings.OTB_BIN_PATH,
                    vv_src=vv_src,
                    vh_src=vh_src,
                    dst=dst))
コード例 #14
0
def despeckle(product):
    print("# Despeckle", product['title'])
    name = '{}.SAFE'.format(product['title'])

    dst_folder = os.path.join(S1_RAW_PATH, 'proc', name, 'despeck')
    os.makedirs(dst_folder, exist_ok=True)

    src = os.path.join(S1_RAW_PATH, 'proc', name, 'ortho', 'vv.tiff')
    dst = os.path.join(dst_folder, 'vv.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_Despeckle -in {src} -out {dst}'.format(
                otb_bin_path=settings.OTB_BIN_PATH, src=src, dst=dst))

    src = os.path.join(S1_RAW_PATH, 'proc', name, 'ortho', 'vh.tiff')
    dst = os.path.join(dst_folder, 'vh.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_Despeckle -in {src} -out {dst}'.format(
                otb_bin_path=settings.OTB_BIN_PATH, src=src, dst=dst))
コード例 #15
0
def calibrate(product):
    print("# Calibrate", product['title'])
    name = '{}.SAFE'.format(product['title'])

    dst_folder = os.path.join(S1_RAW_PATH, 'proc', name, 'calib')
    os.makedirs(dst_folder, exist_ok=True)

    src = os.path.join(S1_RAW_PATH, name, 'measurement', '*-vv-*.tiff')
    dst = os.path.join(dst_folder, 'vv.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_SARCalibration -in $(ls {src}) -out {dst}'.
            format(otb_bin_path=settings.OTB_BIN_PATH, src=src, dst=dst))

    src = os.path.join(S1_RAW_PATH, name, 'measurement', '*-vh-*.tiff')
    dst = os.path.join(dst_folder, 'vh.tiff')
    if not os.path.exists(dst):
        run_subprocess(
            '{otb_bin_path}/otbcli_SARCalibration -in $(ls {src}) -out {dst}'.
            format(otb_bin_path=settings.OTB_BIN_PATH, src=src, dst=dst))
コード例 #16
0
def concatenate_results(mosaic_name, period_s):
    mosaic_path = os.path.join(settings.IMAGES_PATH, 'mosaic', period_s)
    tif_10m = f's2_{period_s}_10m.tif'
    tif_20m = f's2_{period_s}_20m.tif'

    R10m_B02 = os.path.join(mosaic_path, '{}_R10m_B02.tif'.format(mosaic_name))
    R10m_B03 = os.path.join(mosaic_path, '{}_R10m_B03.tif'.format(mosaic_name))
    R10m_B04 = os.path.join(mosaic_path, '{}_R10m_B04.tif'.format(mosaic_name))
    R10m_B08 = os.path.join(mosaic_path, '{}_R10m_B08.tif'.format(mosaic_name))
    R10m_NDVI = os.path.join(mosaic_path,
                             '{}_R10m_NDVI.tif'.format(mosaic_name))
    R10m_NDVI = os.path.join(mosaic_path,
                             '{}_R10m_NDWI.tif'.format(mosaic_name))
    R10m_EVI = os.path.join(mosaic_path, '{}_R10m_EVI.tif'.format(mosaic_name))
    R10m_SAVI = os.path.join(mosaic_path,
                             '{}_R10m_SAVI.tif'.format(mosaic_name))
    src = ' '.join([
        R10m_B02, R10m_B03, R10m_B04, R10m_B08, R10m_NDVI, R10m_NDVI, R10m_EVI,
        R10m_SAVI
    ])
    run_subprocess(
        '{otb_bin_path}/otbcli_ConcatenateImages -il {src} -out {dst}'.format(
            otb_bin_path=settings.OTB_BIN_PATH,
            src=src,
            dst=os.path.join(mosaic_path, tif_10m)))

    R20m_B05 = os.path.join(mosaic_path, '{}_R20m_B05.tif'.format(mosaic_name))
    R20m_B06 = os.path.join(mosaic_path, '{}_R20m_B06.tif'.format(mosaic_name))
    R20m_B07 = os.path.join(mosaic_path, '{}_R20m_B07.tif'.format(mosaic_name))
    R20m_B8A = os.path.join(mosaic_path, '{}_R20m_B8A.tif'.format(mosaic_name))
    R20m_B11 = os.path.join(mosaic_path, '{}_R20m_B11.tif'.format(mosaic_name))
    R20m_B12 = os.path.join(mosaic_path, '{}_R20m_B12.tif'.format(mosaic_name))
    src = ' '.join(
        [R20m_B05, R20m_B06, R20m_B07, R20m_B8A, R20m_B11, R20m_B12])
    run_subprocess(
        '{otb_bin_path}/otbcli_ConcatenateImages -il {src} -out {dst}'.format(
            otb_bin_path=settings.OTB_BIN_PATH,
            src=src,
            dst=os.path.join(mosaic_path, tif_20m)))
コード例 #17
0
def generate_vegetation_indexes(mosaic_name, period_s):
    mosaic_path = os.path.join(settings.IMAGES_PATH, 'mosaic', period_s)
    nir = os.path.join(mosaic_path, '{}_R10m_NIR.vrt'.format(mosaic_name))
    rgb = os.path.join(mosaic_path, '{}_R10m_RGB.vrt'.format(mosaic_name))

    #ndiv
    dst = os.path.join(mosaic_path, '{}_R10m_NDVI.tif'.format(mosaic_name))
    exp = '(im1b1 - im2b1) / (im1b1 + im2b1)'
    run_subprocess(
        '{otb_bin_path}/otbcli_BandMath -il {nir} {rgb} -out {dst} -exp "{exp}"'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                nir=nir,
                rgb=rgb,
                dst=dst,
                exp=exp))

    #ndwi
    dst = os.path.join(mosaic_path, '{}_R10m_NDWI.tif'.format(mosaic_name))
    exp = '(im1b1 - im2b2) / (im1b1 + im2b2)'
    run_subprocess(
        '{otb_bin_path}/otbcli_BandMath -il {nir} {rgb} -out {dst} -exp "{exp}"'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                nir=nir,
                rgb=rgb,
                dst=dst,
                exp=exp))

    #evi
    dst = os.path.join(mosaic_path, '{}_R10m_EVI.tif'.format(mosaic_name))
    exp = '(2.5 * ((im1b1 - im2b1) / (im1b1 + 6 * im2b1 - 7.5 * im2b3 + 1)))'
    run_subprocess(
        '{otb_bin_path}/otbcli_BandMath -il {nir} {rgb} -out {dst} -exp "{exp}"'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                nir=nir,
                rgb=rgb,
                dst=dst,
                exp=exp))

    #savi
    dst = os.path.join(mosaic_path, '{}_R10m_SAVI.tif'.format(mosaic_name))
    exp = '((im1b1 - im2b1) * 1.5 / (im1b1 + im2b1 + 0.5))'
    run_subprocess(
        '{otb_bin_path}/otbcli_BandMath -il {nir} {rgb} -out {dst} -exp "{exp}"'
        .format(otb_bin_path=settings.OTB_BIN_PATH,
                nir=nir,
                rgb=rgb,
                dst=dst,
                exp=exp))
コード例 #18
0
ファイル: sentinel2.py プロジェクト: undp/satlomas-back
            unzip(p, delete_zip=False)

    # Build mosaic
    mosaic_dir = os.path.join(proc_scene_dir, 'mosaic')
    os.makedirs(mosaic_dir, exist_ok=True)
    # FIXME: Read bounds from EXTENT_UTM_PATH
    xmin, ymin, xmax, ymax = [
        261215.0000000000000000, 8620583.0000000000000000,
        323691.8790999995544553, 8719912.0846999995410442
    ]
    cmd = f"python3 {settings.S2M_CLI_PATH}/mosaic.py " \
            f"-te {xmin} {ymin} {xmax} {ymax} " \
            f"-e 32718 -res 10 -v " \
            f"-p {settings.S2M_NUM_JOBS} " \
            f"-o {mosaic_dir} {raw_dir}"
    run_subprocess(cmd)

    # Get mosaic band rasters
    mosaic_rgb_paths = [
        glob(os.path.join(mosaic_dir, f'*_{band}.tif'))
        for band in ['B04', 'B03', 'B02']
    ]
    mosaic_rgb_paths = [p[0] for p in mosaic_rgb_paths if p]
    logger.info("RGB paths: %s", mosaic_rgb_paths)

    # Use gdalbuildvrt to concatenate RGB bands from mosaic
    vrt_path = os.path.join(mosaic_dir, 'tci.vrt')
    cmd = f"gdalbuildvrt -separate {vrt_path} {' '.join(mosaic_rgb_paths)}"
    run_subprocess(cmd)

    # Clip to extent and rescale virtual raster