informatique:ign_bdortho
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| informatique:ign_bdortho [08/04/2026 11:25] – [IGN BdOrtho] cyrille | informatique:ign_bdortho [10/07/2026 09:06] (Version actuelle) – [Outils] cyrille | ||
|---|---|---|---|
| Ligne 21: | Ligne 21: | ||
| ===== Outils ===== | ===== Outils ===== | ||
| - | P'tit script Python pour découper les JP2 en JPG 640 pixels pour Yolo: | + | P'tit script Python pour découper les JP2 en JPG 640 pixels pour Yolo (//utilisé pour [[/ |
| + | |||
| + | 📢 À noter que c'est plusieurs heures de traitement, ~> 4h selon les départements et les dossiers des tuiles font entre 20 et 30 Go. | ||
| <code python> | <code python> | ||
| """ | """ | ||
| Installation: | Installation: | ||
| - | pip install rasterio pillow numpy tqdm | + | pip3 install rasterio pillow numpy tqdm |
| """ | """ | ||
| import rasterio | import rasterio | ||
| Ligne 39: | Ligne 41: | ||
| import argparse | import argparse | ||
| import sys | import sys | ||
| + | |||
| + | # | ||
| def decouper_fichier_jp2(fichier, | def decouper_fichier_jp2(fichier, | ||
| Ligne 49: | Ligne 53: | ||
| shutil.copy(fichier_tab, | shutil.copy(fichier_tab, | ||
| # Découpe le fichier JP2 en tuiles JPG | # Découpe le fichier JP2 en tuiles JPG | ||
| + | # optimize only for write " | ||
| + | # GDAL possède un cache interne (GDAL_CACHEMAX) qui garde les blocs décompressés en mémoire. | ||
| + | # Si un bloc est relu pour deux tuiles adjacentes, il est servi depuis le cache sans décompression supplémentaire. | ||
| + | # Par défaut ce cache est à 5% de la RAM, mais on peut l' | ||
| + | # | ||
| + | #with rasterio.Env(CPL_DEBUG=True, | ||
| with rasterio.open(fichier) as src: | with rasterio.open(fichier) as src: | ||
| h, w = src.shape | h, w = src.shape | ||
| Ligne 54: | Ligne 64: | ||
| nb_tuiles_w = w // taille | nb_tuiles_w = w // taille | ||
| total_tuiles = nb_tuiles_h * nb_tuiles_w | total_tuiles = nb_tuiles_h * nb_tuiles_w | ||
| + | # Update progress bar every 100 tiles instead of every tile | ||
| + | update_interval = 50 | ||
| + | tile_count = 0 | ||
| # réserve un buffer pour limiter une allocation à chaque tuile. | # réserve un buffer pour limiter une allocation à chaque tuile. | ||
| buffer = np.empty((src.count, | buffer = np.empty((src.count, | ||
| - | with tqdm(total=total_tuiles, | + | with tqdm(total=total_tuiles, |
| for y in range(0, h, taille): | for y in range(0, h, taille): | ||
| for x in range(0, w, taille): | for x in range(0, w, taille): | ||
| Ligne 65: | Ligne 78: | ||
| img = Image.fromarray(tile_rgb) | img = Image.fromarray(tile_rgb) | ||
| img.save(f" | img.save(f" | ||
| - | pbar.update(1) | + | |
| + | if tile_count % update_interval == 0: | ||
| + | | ||
| + | pbar.update(tile_count % update_interval) | ||
| def decouper_jp2_en_tuiles_parallele(dossier_entree, | def decouper_jp2_en_tuiles_parallele(dossier_entree, | ||
| Ligne 71: | Ligne 87: | ||
| fichiers = glob.glob(os.path.join(dossier_entree, | fichiers = glob.glob(os.path.join(dossier_entree, | ||
| #fichiers = glob.glob(os.path.join(dossier_entree, | #fichiers = glob.glob(os.path.join(dossier_entree, | ||
| - | with ThreadPoolExecutor(max_workers=nb_threads) as executor: | + | |
| - | futures = [executor.submit(decouper_fichier_jp2, | + | |
| - | for future in as_completed(futures): | + | futures = [executor.submit(decouper_fichier_jp2, |
| - | future.result() | + | for future in as_completed(futures): |
| + | future.result() | ||
| + | pbar.update(1) | ||
| if __name__ == " | if __name__ == " | ||
| Ligne 81: | Ligne 99: | ||
| parser.add_argument(" | parser.add_argument(" | ||
| parser.add_argument(" | parser.add_argument(" | ||
| - | parser.add_argument(" | + | parser.add_argument(" |
| args = parser.parse_args() | args = parser.parse_args() | ||
informatique/ign_bdortho.1775640334.txt.gz · Dernière modification : de cyrille
