Télécharger sans clics les données Sentinel depuis PEPS

=>

peps_download

C'est une petite routine pour télécharger automatiquement les données fournies par PEPS, le segment sol collaboratif Français pour les projets Sentinel: https://peps.cnes.fr. PEPS redistribue en miroir tous les produits Sentinel fournies par Scihub.

 

Ce code a été écrit grâce à l'aide d'un de mes collègues du CNES,  Jérôme Gasperi qui a développé l'interface Rocket qui permet de distribuer les données PEPS. Il est écrit en python 2.7 et se base sur l'utilitaire CURL Pour cette raison, il ne fonctionne que sous linux, je pense.


L'outil est disponible sur mon dépôt Github : https://github.com/olivierhagolle/peps_download

Exemples

La routine est assez basique, mais si vous avez un compte sur PEPS, vous pouvez télécharger des données avec des lignes de commande du genre :

  • python ./peps_download.py -c S2 -l 'Toulouse' -a peps.txt -d 2015-11-01 -f 2015-12-01qui télécharge les données Sentinel-2 acquises sur Toulouse, en Novembre 2015.
  • python ./peps_download.py -c S2 --lon 1 --lat 43.5 -a peps.txt -d 2015-11-01 -f 2015-12-01qui télécharge les données Sentinel-2 acquises aux coordonnées --lon 1 --lat 43.5 (~Toulouse), en Novembre 2015.
  • python ./peps_download.py -c S1 --lonmin 1 --lonmax 2 --latmin 43 --latmax 44 -a peps.txt -d 2015-11-01 -f 2015-12-01qui télécharge les données Sentinel-1 qui intersectent un rectangle en latitude, longitude autour de Toulouse, en November 2015.

Authentification

le fichier peps.txt doit contenir votre adresse email et votre mot de passe, comme ceci :

your.email@address.fr top_secret

Pour obtenir un compte : https://peps.cnes.fr/rocket/#/register

SPOT (Take5) and Theia products can now be downloaded without a click

=>

Since THEIA new Single Sign On authentication went on-line, last summer, it was not possible anymore to use a program to automatically download the products from the Take5 and Theia servers. But after insisting a little bit ( I have good insistance skills ), and with the arrival of a new version, Jerôme Gasperi invented a clever solution, easy and acceptable by CNES security.

 

Thanks to a few examples provided by Jerôme, I coded two little routines to allow you to search and download your products without any click. To use them, you will need an account and password delivered by Theia or Take5 servers, a linux system, python 2.7, the curl utility, and my little codes.

 


Take5 download tool is here and it comes with a couple of examples. To specify a location, you have to know the site same. If you do not know the exact name, you can find it here or here

python take5_download.py -s 'ToulouseFrance' -a auth_theia.txt -c SPOT5

python take5_download.py -s 'ToulouseFrance' -a auth_theia.txt -c SPOT5 -d 2015-04-01 -f 2015-05-01 -l LEVEL2A

 

Theia download tool is here. It allows to access the L2A LANDSAT data over France, and the SpotWorldHeritage L1C products. It may be used in many ways. For instance, the region to download can be specified by a town name (beware of homonyms), by the lat, lon coordinates, or by a latitude, longitude rectangle.

python theia_download.py -l 'Toulouse' -a auth_theia.txt -d 2015-11-01 -f 2015-12-01

python theia_download.py --lon 1 --lat 43.5 -a auth_theia.txt -d 2015-11-01 -f 2015-12-01

python theia_download.py --lonmin 1 --lonmax 2 --latmin 43 --latmax 44 -a auth_theia.txt -d 2015-11-01 -f 2015-12-01

python theia_download.py -l 'Toulouse' -a auth_theia.txt -c SpotWorldHeritage -p SPOT4 -d 2005-11-01 -f 2006-12-01

 

All these examples are explained on the github server. And you may even enhance the codes and allow any one to benefit from your enhancements.

Les produits de Theia et de Take5 peuvent être téléchargés sans clics

=>

Depuis que THEIA a introduit son système d'authentification unique au début de l'été, il n'était plus possible de se connecter par programme aux serveurs Take5 et Theia et les téléchargements automatiques n'étaient donc plus possibles. Mais à force d'insister (c'est une chose que je sais bien faire), et avec l'arrivée de la nouvelle version du serveur, cette demande a été prise en compte, et Jérôme Gaspéri, du CNES, a inventé une belle solution, à la fois pratique et acceptable par la sécurité informatique du CNES.

 

Avec l'aide d'exemples fournis par Jérôme, j'ai donc codé deux petits outils en Python pour vous permettre de reprendre des téléchargements automatiques. Pour les faire tourner, il vous faudra un login et mot de passe acquis depuis les serveurs Theia ou Take5, une machine linux, python 2.7, l'utilitaire Curl (généralement présent par défaut), et mes petits programmes.

 


L'outil pour Take5 est ici et en prime, voici quelques exemples d'utilisation. La recherche du lieu ne peut se faire que par le nom du site qu'on peut aller chercher sur le serveur Take5..

python take5_download.py -s 'ToulouseFrance' -a auth_theia.txt -c SPOT5

python take5_download.py -s 'ToulouseFrance' -a auth_theia.txt -c SPOT5 -d 2015-04-01 -f 2015-05-01 -l LEVEL2A

 

Pour Theia, l'outil est ici. Il permet d'accéder aux données LANDSAT de niveau 2A, et aux données SpotWorldHeritage, de niveau 1C,  et il peut s'utiliser de nombreuses manières. Le site peut être désigné par le nom d'une ville située dans le site (attention aux homonymes !), par ses coordonnées lat,lon, pour par la définition d'un rectangle en longitude et latitude.

python theia_download.py -l 'Toulouse' -a auth_theia.txt -d 2015-11-01 -f 2015-12-01

python theia_download.py --lon 1 --lat 43.5 -a auth_theia.txt -d 2015-11-01 -f 2015-12-01

python theia_download.py --lonmin 1 --lonmax 2 --latmin 43 --latmax 44 -a auth_theia.txt -d 2015-11-01 -f 2015-12-01

python theia_download.py -l 'Toulouse' -a auth_theia.txt -c SpotWorldHeritage -p SPOT4 -d 2005-11-01 -f 2006-12-01

 

Tous ces exemples, et la manière de s'authentifier sont expliques sur le serveur github. Et vous avez même la possibilité de les améliorer et de faire profiter tout le monde de vos améliorations.

Un programme en Python pour télécharger les données Sentinel

=>

Note : L'interface APIHUB/SCIHUB présente de nombreuses restrictions d'accès, comme par exemple le fait de n'accepter que des comptes créés avant le 21 décembre 2015. La plateforme PEPS, du CNES, fournit un accès beaucoup plus facile. J'ai créé un petit programme similaire à celui ci-dessous, pour télécharger des données sans cliquer.

 

L'interface du serveur Scihub pour les données Sentinel vous permet de faire des recherches dans le catalogue ou de télécharger les données par de simples requêtes HTTPS. Par exemple, pour rechercher les produits de S2 présents dans le catalogue, essayez simplement les exemples ci-dessous :

 

La routine Python, accessible par le lien à la fin de cet article, permet de récupérer sans un clic les données de Sentinel-1 et Sentinel-2 (et probablement bientôt Sentinel-3), depuis le site de distribution  Scihub. Vous me connaissez, je l'ai surtout testé avec Sentinel-2.

La routine Sentinel_download.py fonctionne sous linux et s'appuie sur l'utilitairede tléchargement wget. Il pourrait marcher sous windows, mais peobablemenent moyennant quelques adaptations, et je ne connais pas windows. Si quelqu'un veut le faire, le dépot de l'outil sous githuib est ouvert. L'outil similaire Landsat-download a ainsi reçu de nombreuses contributions.

 

Comme l'outil fait des recherches sur le catalogue Sentinel, ivous pouvez sélectionner les donnes par date, type, par coordonnées géographiques et même, pour Sentinel-2, par le taux de couverture nuageuse (en faisant confiance au pourcentage fourni dans les produits de niveau 1C). Le Readme file sur le depot Github donne de nombreux exemples, ici, je n'en fournis qu'un :

python  Sentinel_download.py -s S2 --latmin 43 --latmax 46 --lonmin -1 --lonmax 2 -a apihub.txt -o 94 -m 25 -d 20151206

 

Et voici ce que signifient les options :

  • -s définit le satellite (S2, S2A, S2B, S1, S1B)
  • --latmin 43 --latmax 46 --lonmin -1 --lonmax 2 definit un rectangle en degrés décimaux avec lequel les produits doivent avoir une intersection (vous pouvez aussi demander un point avec les options --lat et --lon)
  • - a apihub.txt fournit le compte et mot de passe d'authentification (guest guest ne fonctionne que pour les consultations du catalogue)

  • -o est le numéro de trace (si vous n'en voulez qu'une)

  • -m 25 est le pourcentage maximal de nuages accepté (25%)

  • -d 20151206 est le début de la période (le 6 décembre), et le téléchargement des données va jusqu'à la date courante, à moins que vous n'utilisiez l'option -f pour définir la date finale avec l'option -f

 

Donc, pour utiliser cet outil, allez le cloner sur le dépôt github de sentinel-download.

 

A python module for batch download of Sentinel data from ESA

=> 

Note : the apihub is only accessible for those of you who submitted an account before the 21st of December. As a result, it is much easier to download the Sentinel- products at CNES PEPS facility. To access the data within PEPS, I have written a similar program to the one described below .

 

The Sentinel Scihub interface lets you search the catalog or download Sentinel data through a simple https request. For instance, to search all the S2 products within the catalog, just try the following URLs :

 

To select all the products which contain Toulouse :

  • you may login with your own Scihub account or with "guest", "guest"
  • All you need to know are your site  Lat, Lon (in this order) coordinates.

To select all the products which contain Toulouse ingested in the catalog after the first of December :

 

The Python routine, provided via the link at the end of this post, enables batch downloads of Sentinel-1 and Sentinel-2 (and probably soon Sentinel-3), from ESA distribution website. You know me, I have mostly tested it with Sentinel-2.

Sentinel_download runs on linux and it relies on the wget download utility. It might work on windows, probably with adaptations, but I do not know windows. If someone is willing to contribute, the software repository on github is open. That's what happened with the Landsat-download tool.

 

As the tool performs catalog searches, you can select the data by date, type, location, and even, for Sentinel-2, cloud percentage (if you trust ESA L1C cloud percentage). The readme file shows several examples, here, I'll only provide one :

 

python  Sentinel_download.py -s S2 --latmin 43 --latmax 46 --lonmin -1 --lonmax 2 -a apihub.txt -o 94 -m 25 -d 20151206

Here is the meaning of the options :

  • -s defines the satellite (S2, S2A, S2B, S1, S1, S1B)
  • --latmin 43 --latmax 46 --lonmin -1 --lonmax 2 define the bounding box in degrees (you can also only specify a point with --lat and --lon options)
  • - a apihub.txt provide the authentification to the website (guest guest still works)

  • -o is the path number (if you only want that one)

  • -m 25 is the maximum accepted cloud percentage to download (25%)

 

  • -d 20151206 is the start date of the period, and the download goes until now, unless you specify the final date (with -f option)

So, if you want to use this tool, get it from the github repository of sentinel-download.

 

Les coefficients SMAC pour la correction atmosphérique de Sentinel-2A sont disponibles

=>

Les coefficients SMAC pour la correction atmosphérique des images Sentinel-2A ont été calculés et ajoutés à la collection du CESBIO. Cette fois, les coefficients ont été calculés par le service Physique de la Mesure Optique du CNES. Si vous les utilisez, n'oubliez donc pas de remercier le CNES et le CESBIO.

 

Comme je l'ai dit dans un ancien article :

Le Simplifié Modèle d'Atmosphérique Correction (SMAC) est parfaitement adapté à l'implémentation rapide et moyennement précise de corrections atmosphériques. Il utilise des fonctions analytiques dérivées du modèle 5S. Les 49 coefficients de ce modèle sont ajustés à partir de simulations de transfert radiatif obtenues avec le modèle 6S (l'ancienne version, pas la récente version vectorielle). SMAC n'est pas un modèle très précis (beaucoup moins que MACCS), et il faut lui fournir des données auxiliaires pour l'épaisseur optique des aérosols ou pour les contenus atmosphériques en ozone et vapeur d'eau. Quand ces données sont précisément connues, la précision des simulations est en général meilleure que deux à trois pour cent, sauf parfois pour les grands angles (au dessus de 70°) ou dans de fortes bandes d'absorption et si on ne prend pas en compte les effets d'environnement et les effets de pente.

 

Nous mettons aussi à disposition un code en python qui utilise ces coefficients. Ce code est décrit et distribué ici.


References

[1] Rahman, H., & Dedieu, G. (1994). SMAC: a simplified method for the atmospheric correction of satellite measurements in the solar spectrum. REMOTE SENSING, 15(1), 123-143.
"[2]"Tanré, D., Deroo, C., Duhaut, P., Herman, M., Morcrette, J. J., Perbos, J., & Deschamps, P. Y. (1990). Technical note Description of a computer code to simulate the satellite signal in the solar spectrum: the 5S code. International Journal of Remote Sensing, 11(4), 659-668.
"[3]"Vermote, E. F., Tanré, D., Deuze, J. L., Herman, M., & Morcette, J. J. (1997). Second simulation of the satellite signal in the solar spectrum, 6S: An overview. Geoscience and Remote Sensing, IEEE Transactions on, 35(3), 675-686.>
"[4]"Kotchenova, S. Y., Vermote, E. F., Matarrese, R., & Klemm Jr, F. J. (2006). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part I: Path radiance. Applied Optics, 45(26), 6762-6774.
"[5]"Kotchenova, S. Y., & Vermote, E. F. (2007). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part II. Homogeneous Lambertian and anisotropic surfaces. Applied Optics, 46(20), 4455-4464.

SMAC coefficients for quick Sentinel-2A atmospheric correction

=> 

The SMAC coefficients for Sentinel-2A are now available, and have been added to the CESBIO repository for SMAC coefficients. These coefficients were computed and checked by CNES colleagues in the Optical Measurement Physics service. If you happen to use these coefficients in your work, please thank CNES and CESBIO for providing them.

As already said in an earlier post :

The Simplified Model for Atmospheric Correction (SMAC) is the perfect model to perform easy, quick and not too dirty atmospheric corrections. It is based on very simple analytic formulas, based on the 5S model. The 49 coefficients of this model are fitted using a large number of radiative transfer simulations with the 6S model (the old historic version, not the recent vector version). This software is not very accurate (much less than MACCS), and it requires in-situ measurements for the aerosol optical thickness, and weather analyses for ozone and water vapour. If these data are available,  in most cases, its accuracy is within 2 and 3 percent, if we do not account for adjacency effects and slope effects, and it may be worse for large viewing and solar angles (above 70°) or within strong absorption bands.

 

We are also providing a python code to use these coefficients. This code is described and available here.

References

[1] Rahman, H., & Dedieu, G. (1994). SMAC: a simplified method for the atmospheric correction of satellite measurements in the solar spectrum. REMOTE SENSING15(1), 123-143.

 

Landsat Download (the good things with free software)

=>

Those who know me know that I work with Linux and that I like to use free softwares, even if it is not always easy at CNES where everything is around windows :-( . But before I started this blog, I had never contributed with free software. A few months ago, I published here two pieces of code, one is SMAC (I just did a translation into Python), to do easy but approximate atmospheric corrections, the other is Landsat Download, to automatically download Landsat data from USGS website. These two codes are among the pages most often read in this blog.

 

A few weeks ago, one user of Landsat-Download tool suggested to host the code on GitHub, and I did it at the end of July (I published a piece of code for the first time !). And it was a pleasure to discover that a few days later, I had two contributions to this code, one from Jake Brinkmann, who added a nice progress bar, and one from Michel Lepage from CESBIO, which contributes to an interface simplification that I just implemented in the new version.

 

In brief, the module I released has been nicely enhanced, and as I am one of the main users, I benefit from it every day. Well, I know that my colleagues who have been producing free softwares since their childhood will say that I just re-invented the wheel....

 

And finally, remember that, if you need well processed LANDSAT data over France, with cloud masks and atmospheric correction, you might also try the products provided by THEIA.

 

Landsat Download (les bienfaits du logiciel libre)

=>

Ceux qui me connaissent savent que je travaille avec linux et que j'apprécie l'utilisation des logiciels libres, bien que cela présente certaines difficultés au CNES où tout fonctionne autour de windows :-( . Mais avant d'écrire ce blog, je n'avais pas contribué à la fourniture d'outils libres. Depuis quelques mois, j'ai mis à disposition deux petits codes sur ce blog, l'un, SMAC, pour faire facilement des corrections atmosphériques approchées, l'autre, Landsat Download, pour télécharger les données LANDSAT automatiquement depuis le site de l'USGS. Très rapidement, ces deux pages se sont classées parmi les pages les plus lues et les plus commentées de ce blog (souvent pour signaler des bugs...). Pour SMAC, je n'ai fait que le portage en Python.

 

Dernièrement, un des utilisateurs de Landsat-Download m'a suggéré de passer le code sous GitHub, et c'est chose faite depuis la fin du mois de juillet. J'ai donc vraiment publié mon premier code (enfin, mon premier petit module...). Et c'est avec grand plaisir que j'ai découvert très rapidement deux contributions à ce code, Jake Brinkmann (que je ne connais pas) a ajouté une jolie barre de progression des téléchargements, alors que Michel le Page (mon collègue de bureau), contribuait à simplifier l'interface.

 

Bref, le module que j'ai fourni a bien progressé, il est devenu plus pratique, et comme j'en suis le premier utilisateur, j'en profite tous les jours! Bon, je sens que mes collègues qui produisent des logiciels libres depuis leur plus tendre enfance vont me dire que j'ai découvert l'eau tiède...

 

Enfin, si vous avez besoin de données LANDSAT sur la France, avec un masque de nuages précis et une bonne correction atmosphérique, vous pouvez utiliser les produits distribués par THEIA.

Land cover maps quickly obtained using SPOT4 (Take5) data for the Sudmipy site

=>

At CESBIO, we are developing land cover map production techniques, for high resolution image time series, similar to those which will soon be provided by Venµs and Sentinel-2. As soon as the SPOT4 (Take5) data were available over our study area (Sudmipy site in South West France), we decided to assess our processing chains on those data sets. The first results were quickly presented during Take5 user's meeting which was held last October.

1. Experiments

In this post we describe the work carried out in order to produce these first land cover classifications with the SPOT4 (Take5) Sudmipy images (East and West areas) and we compare the results obtained over the common region to these two areas.

 

Prior to the work presented here, we organized a field data collection campaign which was synchronous to the satellite acquisitions. These data are needed to train the classifier training and validate the classification. The field work was conducted in 3 study areas (figure 1) which were visited 6 times between February and September 2013, and corresponded to a total of 2000 agricultural plots. This allowed to monitor the cultural cycle of Winter crops, Summer crops and their irrigation attribute, grasslands, forests and bulit-up areas. The final nomenclature consists in 16 land cover classes.

 

The goal was to assess the results of a classification using limited field data in terms of quantity but also in terms of spatial spread. We wanted also to check whether the East and West SPOT4 (Take5) tracks could be merged. To this end, we used the field data collected on the common area of the two tracks (in pink on the figure) and 5 level 2A images for each track acquired with a one day shift.

 

OUEST EST
2013-02-16
2013-02-21
2013-03-03
2013-04-17
2013-06-06
2013-02-17
2013-02-22
2013-03-04
2013-04-13
2013-06-07
2. Results

The first results of supervised SVM classification (using the ORFEO Toolbox) can be considered as very ipromising, since they allow to obtain more than 90% of correctly classified pixels for both the East and the West tracks and since the continuity between the two swaths is excellent. Some confusions can be observed between bare soils or mineral surfaces and Summer crops, but these errors should be reduced by using LANDSAT 8 images acquired during the Summer, when Summer crops will develop.

Merging of the land cover maps obtained on the East and West Sudmipy tracks (the cloudy areas were cropped out). The comparison against the ground truth (the black dots on the map to the South-West of Toulouse) results in a kappa coefficient of 0.89 for the West and 0.92 on the East.

 

West EAST

This zoom compares the results obtained on the common area of the two tracks (West to the left and East to the right). The two classifications were obtained independently, using the same method and the same training data, but with images acquired at different dates and with different viewing angles. The main errors are maize plots labeled as bare soil, which is not surprising, since this crop was just emerging when the last image was acquired. There are also confusions between wheat and barley, but even on the field, one has to be a specialist to tell them apart.


3. Feedback and retrospective

After performing these experiments, we were very satisfied with the operationnality of our tools. Given the data volume to be processed (about 10 GB of images) we could have expected very long computation times or a limitation in terms of memory limits of the software used (after all, we are just scientists in a lab!). You will not be surprised to know that our processing chains are based on Orfeo Toolbox. More precisely, the core of the chain uses the applications provided with OTB for supervised training and image classification. One just have to build a multi-channel image were each channel is a classification feature (reflectances, NDVI, etc.) and provide a vector data (a shapefile, for instance) containing the training (and validation) data. Then, a command line for the training (see the end of this post) and another one for the classification (idem) are enough.

Computation times are very interesting: several minutes for the training and several tens of minutes for the classification. One big advantage of OTB applications is that they automatically use all the available processors automatically (our server has 24 cores, but any off the shelf PC has between 4 and 12 cores nowadays!).

We are going to continue using these data, since we have other field data which are better spread over the area. This should allow us to obtain even better results. We will also use the Summer LANDSAT 8 images in order to avoid the above-mentioned errors on Summer crops.

4. Command line examples

We start by building a multi-channel image with the SPOT4 (Take5) data, not accounting for the cloud masks in this example :

otbcli_ConcatenateImages -il SPOT4_HRVIR_XS_20130217_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130222_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130304_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130413_N1_TUILE_CSudmipyE.TIF
SPOT4_HRVIR_XS_20130607_N1_TUILE_CSudmipyE.TIF -out
otbConcatImg_Spot4_Take5_5dat2013.tif

We compute the statistics of the images in order to normalize the features :

otbcli_ComputeImagesStatistics -il otbConcatImg_Spot4_Take5_5dat2013.tif -out
EstimateImageStatistics_Take5_5dat2013.xml

We train a SVM with an RBF (Gaussian) kernel :

otbcli_TrainSVMImagesClassifier -io.il otbConcatImg_Spot4_Take5_5dat2013.tif
-io.vd DT2013_Take5_CNES_1002_Erod_Perm_Dissolve16cl.shp -sample.vfn "Class"
-io.imstat EstimateImageStatistics_Take5_5dat2013.xml -svm.opt 1 -svm.k rbf
-io.out svmModel_Take5Est_5dat2013_train6.svm

And Voilà !, we perform the classification:

otbcli_ImageSVMClassifier -in otbConcatImg_Spot4_Take5_5dat2013.tif -mask
EmpriseTake5_CnesAll.tif -imstat EstimateImageStatistics_Take5_5dat2013.xml
-svm svmModel_Take5Est_5dat2013_train_6.svm -out ClasSVMTake5_5dat_16cl_6.tif