私は、CSV 内の URL から画像をダウンロードし、指定された列で名前を付ける単純なダウンローダーです (すべての値が一意であることを確認した後)。 CSV 内の任意の列に基づいて画像をサブフォルダーに整理でき、親画像フォルダーが既に存在する場合は上書きする前に警告が表示されます。モデリング用に正方形の画像が必要な場合は、画像の縮小コピーを含む 2 番目のディレクトリ (同じ形式で編成) を作成します。忍耐は美徳であるため、再試行リストでエラーを受け取った後は、指定された時間待機してからイメージを再リクエストします。すべての再試行が終了するか、別のエラーが発生した場合は、確認のためにログに記録し、次に進みます。また、成功したすべての応答のログも保存します。ダウンロード後、 sum-buddy
、ダウンロードしたすべてのイメージのチェックサムを収集して記録するのに役立ちます。ソース CSV にチェックサム列がある場合は、バディチェックを実行して、予期されるすべての画像がそのままダウンロードされていることを確認できます。少なくとも、期待される画像の数がバディの合計数と一致することを確認します。
Cautious Robot ロゴは、Canva Magic Media を使用してデザインされました。
Python 3.7+
pip install git+https://github.com/Imageomics/cautious-robot
Cautious-robot は、提供された CSV のIMG_NAME
、 URL
、およびSUBFOLDERS
(提供されている場合) を確認し、 IMG_NAME
列に値があるすべての画像をダウンロードします。画像ファイル名の選択は一意である必要があることに注意してください。選択されたファイル名列がデータセット内で一意でない場合、慎重ロボットはリクエストを拒否します。また、指定されたOUTPUT
フォルダーが既に存在するかどうかもチェックされ、続行する前にユーザーに尋ねられます。ファイル名はあるがURL
がない画像はエラー ログに記録されます。ユーザーは、ダウンロードする前に、欠落している URL を無視するか対処するかを尋ねられます。ログはソース CSV と同じディレクトリに保存されます (ログは既存の JSON に追加することによって行われるため、ダウンロードが再開された場合に同じ名前の既存のログが上書きされません)。画像全体がダウンロードされる前にストリーミング応答が中断された場合、このエラーはエラー ログに記録されない可能性がありますが、検証者はそれらを欠落として登録することに注意してください。
必要に応じて、指定したサイズ (256 x 256 など) にダウンサイズされた画像の正方形のコピーを含む 2 番目の出力ディレクトリ ( OUTPUT_downsized
) が作成されます。この 2 番目の出力ディレクトリのフォルダー構造は、未処理の画像のフォルダー構造と一致します。ダウンロードが失敗した場合の再試行間の待機時間、イメージのダウンロードを再試行する最大回数、CSV のどのインデックスから開始するかなどのパラメータもすべて渡すことができます。 Cautious-robot は、HTTP 応答ステータス コード429, 500, 502, 503, 504
のいずれかを受信すると、イメージのダウンロードを再試行します。
画像をダウンロードした後、慎重ロボットは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 からexamples/test_images にイメージがダウンロードされました。ダウンロード ログは、examples/HCGSD_testNA_log.jsonl およびexamples/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
出力:
ファイルパス,ファイル名,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]examples/HCGSD_testNA.csv からexamples/test_images_subdirs にイメージがダウンロードされました。ダウンロード ログは、examples/HCGSD_testNA_log.jsonl およびexamples/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,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 内の 1 つの値が意図的に変更されています
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 からexamples/test_images_md5_mismatch にダウンロードされたイメージ。ダウンロード ログは、examples/HCGSD_test_MD5_mismatch_log.jsonl およびexamples/HCGSD_test_MD5_mismatch_error_log.jsonl にあります。 Examples/test_images_md5_mismatch の md5 チェックサム: 100%|████████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]examples/test_images_md5_mismatch の md5 チェックサムが、examples/HCGSD_test_MD5_mismatch_checksums.csv8 イメージに書き込まれ、予期される 8 つのイメージのうちの example/test_images_md5_mismatch にダウンロードされました。イメージの不一致: 1 つのイメージ整列していない、参照不足しているイメージ情報とチェック ログについては、examples/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 らから処理された Cuthill Gold Standard データセットからのものです。アル。 (元のデータセットは doi:10.5061/dryad.2hp1978 で入手可能)。