Contexto : Trato un conjunto de imágenes utilizando el API Python del motor de Google Earth . Quiero aplicar el proceso sobre un conjunto de imágenes y guardar el resultado (en mi caso exportar a GEE Assets).
Lo que he hecho : Recorrer en bucle el conjunto de imágenes y exportar cada imagen una por una. Eso funciona bien.
Problema Como quiero aplicar mi proceso sobre 60k imágenes, me encuentro con la restricción del número de tareas (3000).
Traceback (última llamada más reciente):
ee.ee_exception.EEException: Ya hay demasiadas tareas en la cola (3000). Por favor, espere a que algunas de ellas se completen.
Lo que he encontrado : el geetools
módulos. Sin embargo, mirando el código, también parece iterar sobre la colección de imágenes y exportar cada imagen una por una.
Pregunta : ¿Es posible exportar múltiples imágenes en un ¿tarea? ¿Cuáles son las soluciones?
Aquí el código:
col = ee.ImageCollection("COPERNICUS/S2") \
.filterDate("2018-01-01", "2018-12-31") \
.filterBounds(geometry)
# Get names of all image as a python list
image_names = get_name_collection(col).getInfo()
total = len(image_names)
# Create new image collection if don't existe
folder = "users/ab43536/masks_4_methods"
if folder not in [elt["id"] for elt in ee.data.getList({"id": "users/ab43536"})]:
ee.data.createAsset({'type': "ImageCollection"}, folder)
# Apply process to all images
for i, name in enumerate(image_names):
print("{:4d}/{} = {:05.2f}% Image {}".format(i, total, i / total * 100, name))
# The long process
mask = computeCloudMasking(name)
# Export image one by one
export_image(mask, folder, getGeometryImage(ee.Image(name)),
name.split('/')[-1], num=i, total=total)
Dónde export_image
es:
def export_image(image, asset_id="users/ab43536/", roi=None, name=None, num=None, total=None):
""" Export one image to GEE Asset
Arguments
:param image: image to export
:param roi=None: specify the roi, default compute from image dimension
:param name=None: name of the image
"""
if roi == None: roi = getGeometryImage(image)
if name == None: name = image.id().getInfo()
description = "Default export"
if num != None and total != None:
description = "Image {} on {} equal {:05.2f} pourcent".format(num, total, num / total * 100)
# print(description)
assetId = asset_id + name
# Create a task : export the result as image asset
task = ee.batch.Export.image.toAsset(image=image.clip(roi),
description=description,
assetId=assetId,
scale=30,
region=roi.coordinates().getInfo(),
)
task.start()