Je suis un simple téléchargeur qui télécharge des images à partir d'URL dans un CSV et les nomme par la colonne donnée (après s'être assuré que toutes ses valeurs sont uniques). Je peux organiser vos images en sous-dossiers en fonction de n'importe quelle colonne de votre CSV et vous avertirai si le dossier d'images parent existe déjà avant de l'écraser. Si vous avez besoin d'images carrées pour la modélisation, je créerai un deuxième répertoire (organisé dans le même format) avec des copies réduites de vos images. La patience est une vertu, j'attendrai donc un temps déterminé avant de demander à nouveau une image après avoir reçu une erreur sur ma liste de nouvelles tentatives ; si toutes les tentatives sont épuisées ou si je reçois une autre erreur, je l'enregistre pour votre examen et je passe à autre chose. Je tiens également un journal de toutes les réponses réussies. Après le téléchargement, sum-buddy
m'aide à rassembler et à enregistrer les sommes de contrôle pour toutes les images téléchargées. Si le CSV source comporte une colonne de somme de contrôle, je peux alors effectuer une vérification par un ami pour vérifier que toutes les images attendues sont téléchargées intactes. Au minimum, je vérifie que le nombre d'images attendues correspond au nombre total de copains.
Le logo du robot Cautious a été conçu à l'aide de Canva Magic Media.
Python3.7+
pip install git+https://github.com/Imageomics/cautious-robot
Cautious-robot vérifiera le CSV fourni pour IMG_NAME
, URL
et SUBFOLDERS
(le cas échéant), puis téléchargera toutes les images qui ont une valeur dans la colonne IMG_NAME
. Notez que le choix du nom de fichier image doit être unique ; prudent-robot refusera la demande si la colonne de nom de fichier sélectionnée n'est pas unique dans l'ensemble de données. Il vérifiera également si le dossier OUTPUT
fourni existe déjà, en demandant à l'utilisateur avant de continuer. Les images qui ont un nom de fichier mais pas URL
sont enregistrées dans le journal des erreurs ; l'utilisateur est invité à ignorer ou à corriger les URL manquantes avant le téléchargement. Les journaux sont enregistrés dans le même répertoire que le CSV source (la journalisation est effectuée en ajoutant un JSON existant, de sorte qu'elle n'écrasera pas les journaux existants portant le même nom en cas de redémarrage du téléchargement). Veuillez noter que si la réponse diffusée est interrompue avant que l'image ne soit téléchargée dans son intégralité, cette erreur peut ne pas être enregistrée dans le journal des erreurs, mais le vérificateur les enregistrera comme manquantes.
Si vous le souhaitez, un répertoire de sortie secondaire ( OUTPUT_downsized
) sera créé avec des copies carrées des images réduites à la taille spécifiée (par exemple, 256 x 256). La structure des dossiers de ce répertoire de sortie secondaire correspondra à celle des images non traitées. Des paramètres tels que le temps d'attente entre les tentatives en cas d'échec de téléchargement, le nombre maximum de tentatives de téléchargement d'une image et l'index du CSV par lequel commencer peuvent également être transmis. Cautious-robot réessayera de télécharger des images lorsqu'il recevra l'un des codes d'état de réponse HTTP suivants : 429, 500, 502, 503, 504
.
Après avoir téléchargé les images, prudent-robot appelle sum-buddy
pour calculer et enregistrer les sommes de contrôle du contenu du dossier OUTPUT
. Il imprime le nombre d'images contenues dans le dossier OUTPUT
ainsi que le nombre attendu (basé sur le nombre de noms de fichiers uniques et non nuls dans le fichier source). Si une colonne avec des sommes de contrôle est fournie dans le fichier source, il vérifiera ensuite que toutes les images attendues sont téléchargées via une fusion interne sur les colonnes de somme de contrôle et de nom de fichier du fichier source avec la somme de contrôle CSV (évitant ainsi toute confusion en cas d'images en double) .
usage: cautious-robot [-h] -i [INPUT_FILE] -o [OUTPUT_DIR] [-s [SUBDIR_COL]] [-n [IMG_NAME_COL]] [-u [URL_COL]] [-w WAIT_TIME] [-r MAX_RETRIES] [-l SIDE_LENGTH] [-x STARTING_IDX] [-a CHECKSUM_ALGORITHM] [-v [VERIFIER_COL]] options: -h, --help show this help message and exit required arguments: -i [INPUT_FILE], --input-file [INPUT_FILE] path to CSV file with urls. -o [OUTPUT_DIR], --output-dir [OUTPUT_DIR] main directory to download images into. optional arguments: -s [SUBDIR_COL], --subdir-col [SUBDIR_COL] name of column to use for subfolders in image directory (defaults to flat directory if left blank) -n [IMG_NAME_COL], --img-name-col [IMG_NAME_COL] column to use for image filename (default: filename) -u [URL_COL], --url-col [URL_COL] column with URLs to download (default: file_url) -w WAIT_TIME, --wait-time WAIT_TIME seconds to wait between retries for an image (default: 3) -r MAX_RETRIES, --max-retries MAX_RETRIES max times to retry download on a single image (default: 5) -l SIDE_LENGTH, --side-length SIDE_LENGTH number of pixels per side for resized square images (default: no resized images created) -x STARTING_IDX, --starting-idx STARTING_IDX index of CSV at which to start download (default: 0) -a CHECKSUM_ALGORITHM, --checksum-algorithm CHECKSUM_ALGORITHM checksum algorithm to use on images (default: md5, available: sha256, sha384, md5-sha1, blake2b, sha512, sha1, sm3, sha3_256, sha512_256, sha224, sha3_224, ripemd160, sha3_384, shake_128, blake2s, md5, sha3_512, sha512_224, shake_256) -v [VERIFIER_COL], --verifier-col [VERIFIER_COL] name of column in source CSV with checksums (same hash as -a) to verify download
Des exemples de fichiers CSV [1] sont fournis dans le répertoire examples/
pour tester la CLI.
Valeurs par défaut :
cautious-robot --input-file examples/HCGSD_testNA.csv --output-dir examples/test_images
Sortir:
100%|███████████████████████████████ ███████████████████████████████████| 8/8 [00:01<00:00, 4.18it/s]Images téléchargées depuis examples/HCGSD_testNA.csv vers examples/test_images. Les journaux de téléchargement se trouvent dans examples/HCGSD_testNA_log.jsonl et examples/HCGSD_testNA_error_log.jsonl.Calcul des sommes de contrôle md5 sur exemples/test_images : 100%|███████████████████ ████████████████████████| 16/16 [00:00<00:00, 3133.00it/s]Les sommes de contrôle md5 pour les exemples/test_images écrites dans les images examples/HCGSD_testNA_checksums.csv8 ont été téléchargées dans les exemples/test_images sur les 8 attendus.
head -n 9 examples/HCGSD_testNA_checksums.csv
Sortir:
chemin du fichier, nom du fichier, md5examples/test_images/10429021_V_lowres.jpg,10429021_V_lowres.jpg,c6aeb9d2f6db4 12ff5be0eb0b5435b83examples/test_images/10428595_D_lowres.jpg,10428595_D_lowres.jpg,55882a0f3fdf8a68 579c07254395653bexamples/test_images/10428972_V_lowres.jpg,10428972_V_lowres.jpg,0047e7454ce444f67f ee1c90cc3ba9cbexamples/test_images/10428803_D_lowres.jpg,10428803_D_lowres.jpg,d8bfb73f2d3556390de04 aa98822b815examples/test_images/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc294d589ce3f140f1 4ddab0166examples/test_images/10428321_D_lowres.jpg,10428321_D_lowres.jpg,fbeeed30274e424831b06360b5 87ceb3examples/test_images/10428140_V_lowres.jpg,10428140_V_lowres.jpg,c11538f2de5a5e2d6013fc800848d 43aexamples/test_images/10428250_V_lowres.jpg,10428250_V_lowres.jpg,14ac99b1a9913a9d420f21b94d6136d6
Téléchargez des images dans des sous-dossiers en fonction de la valeur de la colonne :
cautious-robot -i examples/HCGSD_testNA.csv -o examples/test_images_subdirs --subdir-col Species
Sortir:
100%|█████████████████████ ██████████████████████████ ██████████████████████████ █████████████████████████| 8/8 [00:02<00:00, 3.47it/s]Images téléchargées depuis examples/HCGSD_testNA.csv vers examples/test_images_subdirs. Les journaux de téléchargement se trouvent dans examples/HCGSD_testNA_log.jsonl et examples/HCGSD_testNA_error_log.jsonl.Calcul des sommes de contrôle md5 sur exemples/test_images_subdirs : 100%|████████████████████ █████████████████████████| 8/8 [00:00<00:00, 3106.60it/s]sommes de contrôle md5 pour les exemples/test_images_subdirs écrits dans examples/HCGSD_testNA_checksums.csv8 images ont été téléchargées dans examples/test_images_subdirs sur les 8 attendus.
ls examples/test_images
Sortir:
Erato Melpomène
head -n 9 examples/HCGSD_testNA_checksums.csv
Sortir:
chemin du fichier, nom du fichier, md5examples/test_images_subdirs/erato/10429021_V_lowres.jpg,10429021_V_lowres.jpg,c6aeb9d2f6db412 ff5be0eb0b5435b83examples/test_images_subdirs/erato/10428595_D_lowres.jpg,10428595_D_lowres.jpg,55882a0f3fdf8a68579c 07254395653bexamples/test_images_subdirs/erato/10428972_V_lowres.jpg,10428972_V_lowres.jpg,0047e7454ce444f67fee1c90 cc3ba9cbexamples/test_images_subdirs/erato/10428803_D_lowres.jpg,10428803_D_lowres.jpg,d8bfb73f2d3556390de04aa98822b 815examples/test_images_subdirs/melpomene/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc294d589ce3f140f14ddab0 166examples/test_images_subdirs/melpomene/10428321_D_lowres.jpg,10428321_D_lowres.jpg,fbeeed30274e424831b06360b587ce b3examples/test_images_subdirs/melpomene/10428140_V_lowres.jpg,10428140_V_lowres.jpg,c11538f2de5a5e2d6013fc800848d43 aexamples/test_images_subdirs/melpomene/10428250_V_lowres.jpg,10428250_V_lowres.jpg,14ac99b1a9913a9d420f21b94d6136d6
Incompatibilité de la somme de contrôle de l'image : une valeur est intentionnellement modifiée dans le CSV source
cautious-robot -i examples/HCGSD_test_MD5_mismatch.csv -o examples/test_images_md5_mismatch --subdir-col Species -v "md5"
Sortir:
100%|█████████████████████ ██████████████████████████ ██████████████████████████ █████████████████████████| 8/8 [00:01<00:00, 4.23it/s]Images téléchargées depuis examples/HCGSD_test_MD5_mismatch.csv vers examples/test_images_md5_mismatch. Les journaux de téléchargement se trouvent dans examples/HCGSD_test_MD5_mismatch_log.jsonl et examples/HCGSD_test_MD5_mismatch_error_log.jsonl.Calculating md5 sommes de contrôle sur les exemples/test_images_md5_mismatch : 100%|████████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]sommes de contrôle md5 pour les exemples/test_images_md5_mismatch écrites dans examples/HCGSD_test_MD5_mismatch_checksums.csv8 images ont été téléchargées dans examples/test_images_md5_mismatch sur les 8 attendues. Incompatibilité d'image : 1 image(s) pas aligné, voir examples/HCGSD_test_MD5_mismatch_missing.csv pour les informations sur les images manquantes et vérifier les journaux.
# Check on that mis-aligned image head -n 2 examples/HCGSD_test_MD5_mismatch_missing.csv
Sortir:
nhm_specimen,espèce,sous-espèce,sexe,file_url,filename,md510428972,erato,petiverana,male,https://github.com/Imageomics/dashboard-prototype/raw/main/test_data/images/ventral_images/10428972_V_lowres.png,10428972_V_lowres. jpg, disparité
[1] Les images de test proviennent de l'ensemble de données Cuthill Gold Standard, qui a été traité à partir de Cuthill, et. al. (ensemble de données original disponible sur doi:10.5061/dryad.2hp1978).