Soy un descargador simple que descarga imágenes de URL en un CSV y las nombra según la columna dada (después de asegurarme de que todos sus valores sean únicos). Puedo organizar sus imágenes en subcarpetas según cualquier columna de su CSV y le avisaré si la carpeta de imágenes principal ya existe antes de sobrescribirla. Si necesita imágenes cuadradas para modelar, crearé un segundo directorio (organizado en el mismo formato) con copias reducidas de sus imágenes. La paciencia es una virtud, por lo que esperaré un tiempo designado antes de volver a solicitar una imagen después de recibir un error en mi lista de reintentos; Si se agotan todos los reintentos o recibo otro error, lo registro para su revisión y sigo adelante. También mantengo un registro de todas las respuestas exitosas. Después de la descarga, sum-buddy
me ayuda a recopilar y registrar sumas de verificación de todas las imágenes descargadas. Si el CSV de origen tiene una columna de suma de verificación, puedo hacer una verificación de amigos para verificar que todas las imágenes esperadas se descarguen intactas. Como mínimo, verifico que la cantidad de imágenes esperadas coincida con la cantidad de recuentos de sum-buddy.
El logotipo del robot cauteloso se diseñó con Canva Magic Media.
Pitón 3.7+
pip instalar git+https://github.com/Imageomics/cautious-robot
Cautious-robot comprobará el CSV proporcionado para IMG_NAME
, URL
y SUBFOLDERS
(si se proporcionan), luego descargará todas las imágenes que tengan un valor en la columna IMG_NAME
. Tenga en cuenta que la elección del nombre del archivo de imagen debe ser única; cauteloso-robot rechazará la solicitud si la columna de nombre de archivo seleccionada no es única dentro del conjunto de datos. También comprobará si la carpeta OUTPUT
proporcionada ya existe y preguntará al usuario antes de continuar. Las imágenes que tienen un nombre de archivo pero no URL
se registran en el registro de errores; Se le pregunta al usuario si desea ignorar o abordar las URL que faltan antes de la descarga. Los registros se guardan en el mismo directorio que el CSV de origen (el registro se realiza agregándolo a un JSON existente, por lo que no sobrescribirá los registros existentes con el mismo nombre en caso de que se reinicie la descarga). Tenga en cuenta que si la respuesta transmitida se interrumpe antes de que la imagen se descargue en su totalidad, es posible que este error no se registre en el registro de errores, pero el verificador los registrará como faltantes.
Si lo desea, se creará un directorio de salida secundario ( OUTPUT_downsized
) con copias cuadradas de las imágenes reducidas al tamaño especificado (por ejemplo, 256 x 256). La estructura de carpetas de este directorio de salida secundario coincidirá con la de las imágenes sin procesar. También se pueden pasar parámetros como el tiempo de espera entre reintentos en una descarga fallida, el número máximo de veces para reintentar la descarga de una imagen y con qué índice del CSV comenzar. Cautious-robot volverá a intentar descargar imágenes cuando reciba uno de los siguientes códigos de estado de respuesta HTTP: 429, 500, 502, 503, 504
.
Después de descargar las imágenes, el robot cauteloso llama sum-buddy
para calcular y registrar las sumas de verificación del contenido de la carpeta OUTPUT
. Imprime la cantidad de imágenes contenidas en la carpeta OUTPUT
junto con la cantidad esperada (basada en el recuento de nombres de archivos únicos y no nulos en el archivo fuente). Si se proporciona una columna con sumas de verificación en el archivo fuente, verificará aún más que todas las imágenes esperadas se descarguen mediante una combinación interna en las columnas de suma de verificación y nombre de archivo del archivo fuente con la suma de verificación CSV (evitando así confusión en caso de imágenes duplicadas). .
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
Se proporcionan CSV de muestra [1] en el directorio examples/
para probar la CLI.
Valores predeterminados:
cautious-robot --input-file examples/HCGSD_testNA.csv --output-dir examples/test_images
Producción:
100%|██████████████████████████████████████ █████████ ███████████████████| 8/8 [00:01<00:00, 4.18it/s] Imágenes descargadas de ejemplos/HCGSD_testNA.csv a ejemplos/test_images. Los registros de descarga están en ejemplos/HCGSD_testNA_log.jsonl y ejemplos/HCGSD_testNA_error_log.jsonl. Calculando sumas de comprobación md5 en ejemplos/imagenes_prueba: 100%|████████████████████████████████████ ███████ | 16/16 [00:00<00:00, 3133.00it/s]Las sumas de comprobación md5 para ejemplos/imágenes de prueba escritas en ejemplos/HCGSD_testNA_checksums.csv8 se descargaron imágenes en ejemplos/imágenes de prueba de las 8 esperadas.
head -n 9 examples/HCGSD_testNA_checksums.csv
Producción:
ruta de archivo, nombre de archivo, md5examples/test_images/10429021_V_lowres.jpg,10429021_V_lowres.jpg,c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_images/10428595_D_lowres.jpg,10428595_D_lowres.jpg,5588 2a0f3fdf8a68579c07254395653bexamples/test_images/10428972_V_lowres.jpg,10428972_V_low res.jpg,0047e7454ce444f67fee1c90cc3ba9cbexamples/test_images/10428803_D_lowres.jpg,10 428803_D_lowres. jpg,d8bfb73f2d3556390de04aa98822b815examples/test_images/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc294d589ce3f140f14ddab0166examples/test_images/10428321 _D_lowres.jpg,10428321_D_lowres.jpg,fbeeed30274e424831b06360b587ceb3examples/test_images/10428140_V_lowres.jpg,10428140_V_lowres.jpg,c11538f2de5a5e2d6013fc800848 d43aexamples/test_images/10428250_V_lowres.jpg,10428250_V_lowres.jpg, 14ac99b1a9913a9d420f21b94d6136d6
Descargue imágenes a subcarpetas según el valor de la columna:
cautious-robot -i examples/HCGSD_testNA.csv -o examples/test_images_subdirs --subdir-col Species
Producción:
100%|██████████████████████████████████████ █████████ ████████████████████████████████████████ ██████████ █| 8/8 [00:02<00:00, 3.47it/s] Imágenes descargadas de ejemplos/HCGSD_testNA.csv a ejemplos/test_images_subdirs. Los registros de descarga están en ejemplos/HCGSD_testNA_log.jsonl y ejemplos/HCGSD_testNA_error_log.jsonl. Calculando sumas de comprobación md5 en ejemplos/test_images_subdirs: 100%|██████████████████████████████████ █████████ ██| 8/8 [00:00<00:00, 3106.60it/s]sumas de comprobación md5 para ejemplos/test_images_subdirs escritas en ejemplos/HCGSD_testNA_checksums.csv8 las imágenes se descargaron en ejemplos/test_images_subdirs de los 8 esperados.
ls examples/test_images
Producción:
erato melpómeno
head -n 9 examples/HCGSD_testNA_checksums.csv
Producción:
FilePath, FileName, MD5Examples/test_images_subdirs/erato/10429021_v_lowres.jpg, 10429021_v_ lowres.jpg, c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_images_subdirs_suT/ERATO/ERATO/ERATO/ERATIM LowRes.jpg, 10428595_d_lowres.jpg, 55882a0f3fdf8a68579c07254395653bexamples/test_images_subdirs/erato/10428972_v_lowres.jpg, 10428972 54ce444f67fee1c90cc3ba9cbexamples/test_images_subdirs/ erato/10428803_D_lowres.jpg,10428803_D_lowres.jpg,d8bfb73f2d3556390de04aa98822b815examples/test_images_subdirs/melpomene/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9d c294d589ce3f140f14ddab0166examples/test_images_subdirs/melpomene/10428321_D_lowres.jpg,10428321_D_lowres.jpg,fbeeed30274e424831b06360b587ceb3examples/test_images_subdirs/melpomene/10 428140_V_lowres.jpg,10428140_V_lowres. jpg,c11538f2de5a5e2d6013fc800848d43aexamples/test_images_subdirs/melpomene/10428250_V_lowres.jpg,10428250_V_lowres.jpg,14ac99b1a9913a9d420f21b94d6136d6
Falta de coincidencia de suma de comprobación de imagen: un valor se modifica intencionalmente en el CSV de origen
cautious-robot -i examples/HCGSD_test_MD5_mismatch.csv -o examples/test_images_md5_mismatch --subdir-col Species -v "md5"
Producción:
100%|██████████████████████████████████████ █████████ ████████████████████████████████████████ ██████████ █| 8/8 [00:01<00:00, 4.23it/s] Imágenes descargadas de ejemplos/HCGSD_test_MD5_mismatch.csv a ejemplos/test_images_md5_mismatch. Los registros de descarga se encuentran en ejemplos/HCGSD_test_MD5_mismatch_log.jsonl y ejemplos/HCGSD_test_MD5_mismatch_error_log.jsonl. Calculando sumas de comprobación md5 en ejemplos/test_images_md5_mismatch: 100%|████████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]sumas de comprobación de md5 para ejemplos/test_images_md5_mismatch escritas en ejemplos/HCGSD_test_MD5_mismatch_checksums.csv8 imágenes se descargaron en ejemplos/test_images_md5_mismatch de las 8 esperadas.No coinciden las imágenes: 1 imagen(es) no alineado, consulte ejemplos/HCGSD_test_MD5_mismatch_missing.csv para ver la información de la imagen que falta y verificar los registros.
# Check on that mis-aligned image head -n 2 examples/HCGSD_test_MD5_mismatch_missing.csv
Producción:
nhm_specimen,especie,subespecie,sexo,file_url,nombre de archivo,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, falta de coincidencia
[1] Las imágenes de prueba provienen del conjunto de datos Cuthill Gold Standard, que fue procesado por Cuthill, et. Alabama. (conjunto de datos original disponible en doi:10.5061/dryad.2hp1978).