저는 URL에서 이미지를 CSV로 다운로드하고 지정된 열로 이름을 지정하는 간단한 다운로더입니다(모든 값이 고유한지 확인한 후). CSV의 모든 열을 기반으로 이미지를 하위 폴더로 구성할 수 있으며 상위 이미지 폴더가 이미 존재하는 경우 덮어쓰기 전에 경고합니다. 모델링을 위해 정사각형 이미지가 필요한 경우 이미지의 축소된 복사본이 포함된 두 번째 디렉터리(동일한 형식으로 구성)를 만들어 드리겠습니다. 인내심은 미덕이므로 재시도 목록에 오류가 발생한 후 이미지를 다시 요청하기 전에 지정된 시간을 기다리겠습니다. 재시도 횟수가 모두 소진되거나 또 다른 오류가 발생하면 귀하의 검토를 위해 해당 내용을 기록하고 계속 진행합니다. 나는 또한 모든 성공적인 응답에 대한 로그를 보관합니다. 다운로드 후 sum-buddy
다운로드한 모든 이미지에 대한 체크섬을 수집하고 기록하는 데 도움을 줍니다. 소스 CSV에 체크섬 열이 있는 경우 친구 확인을 수행하여 예상되는 모든 이미지가 그대로 다운로드되었는지 확인할 수 있습니다. 최소한 예상 이미지 수가 합계 친구 수와 일치하는지 확인합니다.
Cautious Robot 로고는 Canva Magic Media를 사용하여 디자인되었습니다.
파이썬 3.7+
pip 설치 git+https://github.com/Imageomics/cautious-robot
Cautious-robot은 IMG_NAME
, URL
및 SUBFOLDERS
(제공된 경우)에 대해 제공된 CSV를 확인한 다음 IMG_NAME
열에 값이 있는 모든 이미지를 다운로드합니다. 선택한 이미지 파일 이름은 고유해야 합니다. Career-robot은 선택한 파일 이름 열이 데이터 세트 내에서 고유하지 않은 경우 요청을 거부합니다. 또한 제공된 OUTPUT
폴더가 이미 존재하는지 확인하여 계속하기 전에 사용자에게 묻습니다. 파일 이름은 있지만 URL
없는 이미지는 오류 로그에 기록됩니다. 다운로드하기 전에 누락된 URL을 무시할지 아니면 해결할지 묻는 메시지가 사용자에게 표시됩니다. 로그는 소스 CSV와 동일한 디렉터리에 저장됩니다(로깅은 기존 JSON에 추가하여 수행되므로 다운로드를 다시 시작해도 동일한 이름으로 기존 로그를 덮어쓰지 않습니다). 이미지 전체가 다운로드되기 전에 스트리밍 응답이 중단되면 이 오류는 오류 로그에 기록되지 않을 수 있지만 검증자는 해당 오류를 누락된 것으로 등록합니다.
원하는 경우 지정된 크기(예: 256 x 256)로 축소된 이미지의 정사각형 복사본을 사용하여 보조 출력 디렉터리( OUTPUT_downsized
)가 생성됩니다. 이 보조 출력 디렉터리의 폴더 구조는 처리되지 않은 이미지의 폴더 구조와 일치합니다. 다운로드 실패 시 재시도 간 대기 시간, 이미지 다운로드를 재시도하는 최대 횟수, 시작할 CSV 인덱스 등의 매개변수도 모두 전달될 수 있습니다. Cautious-robot은 429, 500, 502, 503, 504
HTTP 응답 상태 코드 중 하나를 수신하면 이미지 다운로드를 다시 시도합니다.
이미지를 다운로드한 후 Career-robot은 sum-buddy
호출하여 OUTPUT
폴더 내용의 체크섬을 계산하고 기록합니다. OUTPUT
폴더에 포함된 이미지 수를 예상 수와 함께 인쇄합니다(소스 파일에 있는 Null이 아닌 고유한 파일 이름 수를 기준으로 함). 소스 파일에 체크섬이 있는 열이 제공되면 체크섬 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
CLI를 테스트하기 위해 샘플 CSV[1]가 examples/
디렉터리에 제공됩니다.
기본값:
cautious-robot --input-file examples/HCGSD_testNA.csv --output-dir examples/test_images
산출:
100%|██████████████████████████████████████████████ ███████████████████ | 8/8 [00:01<00:00, 4.18it/s]examples/HCGSD_testNA.csv에서 example/test_images로 다운로드된 이미지. 다운로드 로그는 example/HCGSD_testNA_log.jsonl 및 example/HCGSD_testNA_error_log.jsonl에 있습니다. md5 체크섬 계산 예제/테스트_이미지: 100%|███████████████████████████████████████████ | 16/16 [00:00<00:00, 3133.00it/s]examples/HCGSD_testNA_checksums.csv8 이미지에 작성된 example/test_images에 대한 md5 체크섬이 예상되는 8개의 example/test_images에 다운로드되었습니다.
head -n 9 examples/HCGSD_testNA_checksums.csv
산출:
filepath,filename,md5examples/test_images/10429021_V_lowres.jpg,10429021_V_lowres.jpg,c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_images/10428595_D_lowres.jpg,10428595_D_lowres.jpg,55882a0f3fdf8a68579c07254395653bexamples/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,c11538f2de5a5e2d6013fc800848d43a 예제/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]examples/HCGSD_testNA.csv에서 example/test_images_subdirs로 다운로드된 이미지. 다운로드 로그는 example/HCGSD_testNA_log.jsonl 및 example/HCGSD_testNA_error_log.jsonl에 있습니다. md5 체크섬 계산 예제/test_images_subdirs: 100%|████████████████████████████████████████████ ██| 8/8 [00:00<00:00, 3106.60it/s]examples/HCGSD_testNA_checksums.csv8 이미지에 작성된 example/test_images_subdirs에 대한 md5 체크섬이 예상되는 8개의 example/test_images_subdirs에 다운로드되었습니다.
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,c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_images_subdirs/erato/10428595_D_lowres.jpg,10428595 _D_lowres.jpg,55882a0f3fdf8a68579c07254395653bexamples/test_images_subdirs/erato/10428972_ V_lowres.jpg,10428972_V_lowres.jpg,0047e7454ce444f67fee1c90cc3ba9cbexamples/test_images_sub 디렉토리/ erato/10428803_D_lowres.jpg,10428803_D_lowres.jpg,d8bfb73f2d3556390de04aa98822b815examples/test_images_subdirs/melpomene/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc 294d589ce3f140f14ddab0166examples/test_images_subdirs/melpomene/10428321_D_lowres.jpg,10428321_D_lowres.jpg,fbeeed30274e424831b06360b587ceb3examples/test_images_subdirs/melpomene/10428 140_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]examples/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]examples/test_images_md5_mismatch에 대한 md5 체크섬이 example/HCGSD_test_MD5_mismatch_checksums.csv8 이미지에 기록되어 8개의 예상 이미지 중 example/test_images_md5_mismatch에 다운로드되었습니다. 이미지 불일치: 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,species,subspecies,sex,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, 불일치
[1] 테스트 이미지는 Cuthill 등에서 처리된 Cuthill Gold Standard 데이터 세트에서 가져온 것입니다. 알. (doi:10.5061/dryad.2hp1978에서 원본 데이터세트 이용 가능)