Я простой загрузчик, который загружает изображения с 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]Изображения загружены из example/HCGSD_testNA.csv в example/test_images. Журналы загрузки находятся в файлах example/HCGSD_testNA_log.jsonl и example/HCGSD_testNA_error_log.jsonl. Вычисление контрольных сумм md5 включено example/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,c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_images/10428595_D_lowres.jpg,10428595_D_lowres.jpg,558 82a0f3fdf8a68579c07254395653bexamples/test_images/10428972_V_lowres.jpg,10428972_V_lowres.jpg,0047e7454ce444f67fee1c90cc3ba9cbexamples/test_images/10428803_D_lowres. jpg,10428803_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,c11538f2de5a5e2d6013fc80084 8d43aexamples/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 на example/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
Выход:
FilePath, FileName, MD5Examples/test_images_subdirs/erato/10429021_v_lowres.jpg, 10429021_v_lowres.jpg, c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_imgars_mages_sb412ff5be0eb0b5435b83xamples_mages_isb412ff5b5beb0b5435b83xampla _lowres.jpg, 10428595_d_lowres.jpg, 55882a0f3fdf8a68579c07254395653bexamples/test_images_subdirs/erato/10428972_v_lowres.jpg, 10428972_vg 7454ce444f67fee1c90cc3ba9cbexamples/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/1 0428140_V_lowres.jpg,10428140_V_lowres. jpg,c11538f2de5a5e2d6013fc800848d43aexamples/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]Изображения загружены из example/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 суммы на example/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 изображение(я) не выровнено, см. в примерах/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/Imageomics/dashboard-prototype/raw/main/test_data/images/ventral_images/10428972_V_lowres.png,10428972_V_lowres. jpg, несоответствие
[1] Тестовые изображения взяты из набора данных Cuthill Gold Standard, который был обработан Cuthill, et. ал. (исходный набор данных доступен по адресу doi:10.5061/dryad.2hp1978).