diff --git a/sen2chain/__init__.py b/sen2chain/__init__.py index 9f9aad6d4e3c151f2651ef0ba8116c5657b32327..68777602428acac244163958a1cafa8fdef54ea0 100644 --- a/sen2chain/__init__.py +++ b/sen2chain/__init__.py @@ -63,7 +63,7 @@ from .multi_processing import ( from .tileset import TileSet from .jobs import Jobs, Job -__version__ = "0.7.0" +__version__ = "v1.01.00" __author__ = ( "Jérémy Commins <jebins@laposte.net> & Impact <pascal.mouquet@ird.fr>" ) diff --git a/sen2chain/cloud_mask.py b/sen2chain/cloud_mask.py index 26ed50b9a2df841425d2c748c8613b984979bd1f..07073afd359c5a50a41ab18caf90e62981a33e7f 100755 --- a/sen2chain/cloud_mask.py +++ b/sen2chain/cloud_mask.py @@ -298,6 +298,7 @@ def create_cloud_mask_v2( out_temp_path = Path(Config().get("temp_path")) out_dilate = str(out_temp_path / (out_path.stem + "_tmp_dilate.tif")) + out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_dilate_2.tif")) CLD_seuil = 25 with rasterio.open(str(cloud_mask)) as cld_src: @@ -341,6 +342,7 @@ def create_cloud_mask_v2( # Save to JP2000 src_ds = gdal.Open(out_dilate) + src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte) driver = gdal.GetDriverByName("JP2OpenJPEG") dst_ds = driver.CreateCopy( str(out_path), @@ -349,8 +351,8 @@ def create_cloud_mask_v2( ) dst_ds = None src_ds = None - os.remove(out_dilate) + os.remove(out_temp2) logger.info("Done: {}".format(out_path.name)) @@ -373,6 +375,7 @@ def create_cloud_mask_b11( out_temp_path = Path(Config().get("temp_path")) out_mask = str(out_temp_path / (out_path.stem + "_tmp_mask.tif")) + out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_mask_2.tif")) b11_seuil = 1500 with rasterio.open(str(b11_path)) as b11_src: @@ -439,6 +442,7 @@ def create_cloud_mask_b11( # Save to JP2000 src_ds = gdal.Open(out_mask) + src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte) driver = gdal.GetDriverByName("JP2OpenJPEG") dst_ds = driver.CreateCopy( str(out_path), @@ -449,6 +453,7 @@ def create_cloud_mask_b11( src_ds = None os.remove(out_mask) + os.remov(out_temp2) logger.info("Done: {}".format(out_path.name)) @@ -456,7 +461,7 @@ def create_cloud_mask_v003( cloud_mask: Union[str, pathlib.PosixPath], out_path="./CM003.jp2", probability: int = 1, - iterations: int = 5, + iterations: int = 1, ) -> None: """ @@ -472,6 +477,7 @@ def create_cloud_mask_v003( out_temp_path = Path(Config().get("temp_path")) out_temp = str(out_temp_path / (out_path.stem + "_tmp_cm003.tif")) + out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_cm003_2.tif")) with rasterio.open(str(cloud_mask)) as cld_src: cld_profile = cld_src.profile @@ -500,6 +506,7 @@ def create_cloud_mask_v003( # Save to JP2000 src_ds = gdal.Open(out_temp) + src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte) driver = gdal.GetDriverByName("JP2OpenJPEG") dst_ds = driver.CreateCopy( str(out_path), @@ -510,13 +517,14 @@ def create_cloud_mask_v003( src_ds = None os.remove(out_temp) + os.remove(out_temp2) logger.info("Done: {}".format(out_path.name)) def create_cloud_mask_v004( scl_path: Union[str, pathlib.PosixPath], out_path="./CM004.jp2", - iterations: int = 5, + iterations: int = 1, cld_shad: bool = True, cld_med_prob: bool = True, cld_hi_prob: bool = True, @@ -537,6 +545,7 @@ def create_cloud_mask_v004( out_temp_path = Path(Config().get("temp_path")) out_temp = str(out_temp_path / (out_path.stem + "_tmp_cm004.tif")) + out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_cm004_2.tif")) with rasterio.open(str(scl_path)) as scl_src: scl_profile = scl_src.profile @@ -575,6 +584,8 @@ def create_cloud_mask_v004( # Save to JP2000 src_ds = gdal.Open(out_temp) + src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte) + driver = gdal.GetDriverByName("JP2OpenJPEG") dst_ds = driver.CreateCopy( str(out_path), @@ -583,6 +594,8 @@ def create_cloud_mask_v004( ) dst_ds = None src_ds = None - + os.remove(out_temp) - logger.info("Done: {}".format(out_path.name)) + os.remove(out_temp2) + + logger.info("Done : {}".format(out_path.name)) diff --git a/sen2chain/tiles.py b/sen2chain/tiles.py index b497f4b28677b21884b526f703c7dc926e92befd..3cb1674f39540d33e9622f611b83a718bb851366 100644 --- a/sen2chain/tiles.py +++ b/sen2chain/tiles.py @@ -21,6 +21,7 @@ from pprint import pformat import multiprocessing from queue import Queue from threading import Thread +from jpylyzer import jpylyzer # type annotations from typing import List, Dict, Iterable @@ -1859,6 +1860,27 @@ class Tile: ) f.unlink() nb_rm += 1 + + # check jp2 validity + for key, sub_path in self._paths["indices"].items(): + sub_path = Path(sub_path) # Convertit le chemin en objet Path + print(f"Exploration du dossier {key}: {sub_path}") + for jp2_file in sub_path.rglob("*.jp2"): + #print(f" - Fichier : {jp2_file}") + test_validity = jpylyzer.checkOneFile(jp2_file).findtext('isValid') + if test_validity == 'False': + txt = "Invalid jp2 {} (jpylyzer)".format(jp2_file.name) + prob_id.append(txt) + logger.info(txt) + nb_id += 1 + if remove: + logger.info( + "Removing invalid jp2 {} from L2A folder".format( + jp2_file.name + ) + ) + jp2_file.unlink() + nb_rm += 1 # identify 0B or absent indice QL """