Я простой загрузчик, который загружает изображения с URL-адресов в формате CSV и называет их по заданному столбцу (после проверки уникальности всех его значений). Я могу организовать ваши изображения в подпапки на основе любого столбца в вашем CSV-файле и предупредю вас, если родительская папка с изображениями уже существует, прежде чем перезаписать ее. Если вам нужны квадратные изображения для моделирования, я создам второй каталог (организованный в том же формате) с уменьшенными копиями ваших изображений. Терпение — добродетель, поэтому я подожду назначенное время, прежде чем повторно запросить изображение после получения ошибки в списке повторов; если все повторные попытки исчерпаны или я получаю еще одну ошибку, я регистрирую это для вашего рассмотрения и двигаюсь дальше. Я также веду журнал всех успешных ответов. После загрузки sum-buddy
помогает мне собирать и записывать контрольные суммы для всех загруженных изображений. Если в исходном CSV-файле есть столбец контрольной суммы, я могу выполнить проверку приятеля, чтобы убедиться, что все ожидаемые изображения загружены в целости и сохранности. Как минимум, я проверяю, что количество ожидаемых изображений соответствует количеству подсчетов суммы друзей.
Логотип «Осторожный робот» был создан с помощью Canva Magic Media.
Питон 3.7+
pip install git+https://github.com/Imageomics/cautious-robot
Осторожный-робот проверит предоставленный CSV-файл на наличие IMG_NAME
, URL
и SUBFOLDERS
(если они есть), а затем загрузит все изображения, имеющие значение в столбце IMG_NAME
. Обратите внимание, что выбор имени файла изображения должен быть уникальным; осторожный-робот отклонит запрос, если выбранный столбец имени файла не уникален в наборе данных. Он также проверит, существует ли предоставленная папка OUTPUT
, и спросит пользователя, прежде чем продолжить. Изображения, у которых есть имя файла, но нет URL
, записываются в журнал ошибок; перед загрузкой пользователю будет предложено игнорировать или указать недостающие URL-адреса. Журналы сохраняются в том же каталоге, что и исходный CSV (журналирование осуществляется путем добавления к существующему JSON, поэтому существующие журналы с тем же именем не перезаписываются в случае перезапуска загрузки). Обратите внимание, что если потоковый ответ прервется до того, как изображение будет загружено полностью, эта ошибка может не быть записана в журнал ошибок, но верификатор зарегистрирует их как отсутствующие.
При желании будет создан вторичный выходной каталог ( OUTPUT_downsized
) с квадратными копиями изображений, уменьшенными до указанного размера (например, 256 x 256). Структура папок этого вторичного выходного каталога будет соответствовать структуре необработанных изображений. Также можно передать такие параметры, как время ожидания между повторными попытками при неудачной загрузке, максимальное количество повторных попыток загрузки изображения и индекс CSV-файла, с которого начать. Осторожный-робот повторит загрузку изображений при получении одного из следующих кодов состояния ответа HTTP: 429, 500, 502, 503, 504
.
После загрузки изображений осторожный робот вызывает sum-buddy
для расчета и записи контрольных сумм содержимого папки OUTPUT
. Он печатает количество изображений, содержащихся в папке OUTPUT
, вместе с ожидаемым числом (на основе количества уникальных, ненулевых имен файлов в исходном файле). Если в исходном файле предоставлен столбец с контрольными суммами, он затем дополнительно проверит, что все ожидаемые изображения загружаются посредством внутреннего слияния столбцов контрольной суммы и имени файла исходного файла с контрольной суммой CSV (что позволяет избежать путаницы в случае дублирования изображений). .
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
Примеры CSV-файлов [1] доступны в каталоге examples/
для тестирования CLI.
По умолчанию:
cautious-robot --input-file examples/HCGSD_testNA.csv --output-dir examples/test_images
Выход:
100%|█████████████████████████████████████████████████ ████████████████████| 8/8 [00:01<00:00, 4.18it/s]Изображения загружены из примеров/HCGSD_testNA.csv в примеры/test_images. Журналы загрузки находятся в файлах example/HCGSD_testNA_log.jsonl и example/HCGSD_testNA_error_log.jsonl. Вычисление контрольных сумм md5 включено примеры/test_images: 100%|█████████████████████████████████████████████| 16/16 [00:00<00:00, 3133.00it/s]Контрольные суммы md5 для примеров/test_images, записанных в примеры/HCGSD_testNA_checksums.csv8, были загружены в примеры/test_images из 8 ожидаемых.
head -n 9 examples/HCGSD_testNA_checksums.csv
Выход:
путь к файлу, имя файла, 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
Загрузка изображений в подпапки на основе значения столбца:
cautious-robot -i examples/HCGSD_testNA.csv -o examples/test_images_subdirs --subdir-col Species
Выход:
100%|█████████████████████████████████████████████████ ████████████████████████████████████████████████████ █| 8/8 [00:02<00:00, 3.47it/s]Изображения загружены из примеров/HCGSD_testNA.csv в example/test_images_subdirs. Журналы загрузки находятся в примерах/HCGSD_testNA_log.jsonl и example/HCGSD_testNA_error_log.jsonl. Вычисление контрольных сумм md5 на примеры/test_images_subdirs: 100%|███████████████████████████████████████████████| 8/8 [00:00<00:00, 3106.60it/s]Контрольные суммы md5 для example/test_images_subdirs, записанные в example/HCGSD_testNA_checksums.csv8, изображения были загружены в example/test_images_subdirs из 8 ожидаемых.
ls examples/test_images
Выход:
Эрато Мельпомена
head -n 9 examples/HCGSD_testNA_checksums.csv
Выход:
путь к файлу, имя файла, 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
Несоответствие контрольной суммы изображения: одно значение намеренно изменено в исходном CSV-файле.
cautious-robot -i examples/HCGSD_test_MD5_mismatch.csv -o examples/test_images_md5_mismatch --subdir-col Species -v "md5"
Выход:
100%|█████████████████████████████████████████████████ ████████████████████████████████████████████████████ █| 8/8 [00:01<00:00, 4.23it/s]Изображения загружены из примеров/HCGSD_test_MD5_mismatch.csv в example/test_images_md5_mismatch. Журналы загрузки находятся в файлах example/HCGSD_test_MD5_mismatch_log.jsonl и example/HCGSD_test_MD5_mismatch_error_log.jsonl.Вычисление контрольных сумм md5 на примерах/test_images_md5_mismatch: 100%|████████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]Контрольные суммы md5 для примеров/test_images_md5_mismatch, записанные в примеры/HCGSD_test_MD5_mismatch_checksums.csv8 изображений были загружены в примеры/test_images_md5_mismatch из 8 ожидаемых. Несоответствие изображений: 1 изображение(я) не выровнено, см. example/HCGSD_test_MD5_mismatch_missing.csv для отсутствующей информации об изображении и журналов проверки.
# Check on that mis-aligned image head -n 2 examples/HCGSD_test_MD5_mismatch_missing.csv
Выход:
nhm_specimen,вид,подвид,пол,file_url,имя файла,md510428972,erato,petiverana,мужской,https://github.com/Imageomi cs/dashboard-prototype/raw/main/test_data/images/ventral_images/10428972_V_lowres.png,10428972_V_lowres.jpg,mismatch
[1] Тестовые изображения взяты из набора данных Cuthill Gold Standard, который был обработан Cuthill, et. ал. (исходный набор данных доступен по адресу doi:10.5061/dryad.2hp1978).