我是一個簡單的下載器,它從 CSV 中的 URL 下載圖像,並按給定列命名它們(在確保其所有值都是唯一的之後)。我可以根據 CSV 中的任何列將您的圖像組織到子資料夾中,並且如果父圖像資料夾已存在,則會在覆蓋之前向您發出警告。如果您需要方形影像進行建模,我將建立第二個目錄(以相同格式組織),其中包含縮小的影像副本。耐心是一種美德,所以在重試清單中收到錯誤後,我會等待指定的時間再重新請求圖像;如果所有重試都已用完或我收到另一個錯誤,我會將其記錄下來供您查看並繼續。我還記錄了所有成功的回覆。下載後, sum-buddy
幫助我收集並記錄所有下載映像的校驗和。如果來源 CSV 有校驗和列,那麼我可以進行夥伴檢查以驗證所有預期影像是否完整下載。至少,我會檢查預期圖像的數量是否與好友總數計數相符。
謹慎機器人標誌是使用 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 來完成的,因此在重新啟動下載時不會覆蓋同名的現有日誌)。請注意,如果在完整下載影像之前串流回應中斷,則此錯誤可能不會記錄在錯誤日誌中,但驗證程式會將它們註冊為遺失。
如果需要,將建立輔助輸出目錄 ( OUTPUT_downsized
),其中包含縮小到指定大小(例如 256 x 256)的圖像的方形副本。此輔助輸出目錄的資料夾結構將與未處理影像的資料夾結構相符。還可以傳遞下載失敗重試之間等待的時間、重試下載映像的最大次數以及從 CSV 的哪個索引開始等參數。 Cautious-robot 在收到以下 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
examples/
目錄中提供了範例 CSV [1],用於測試 CLI。
預設值:
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。與範例/測試影像:100%|███████████████████████████████████████ ██ | 16/16 [00:00<00:00, 3133.00it/s]寫入範例/HCGSD_testNA_checksums.csv8 映像的範例/test_images 的 md5 校驗和已下載到 8 個預期的範例/test_images。
head -n 9 examples/HCGSD_testNA_checksums.csv
輸出:
filepath,fileName,md5examples/test_images/10429021_v_lowres.jpg,10429021_v_lowres.jpg,c6aeb9d2f6db412ff5be0eb0bbe0eb0b5beb5435b835b8383d JPG,55882A0F3FDF8A68579C07254395653BEXAMPLES/TEST_IMAGES/10428972_V_LOWRES.JPG,10428972_LOWRES.JPG 10428803_1_low0383823823020 月。 556390de04aa98822b815examples/ test_images/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc294d589ce3f140f14ddab0166examples/test_images/10428321_D_jpb0166examples/test_images/10428321_D_jp400166examples/test_images/10428321_D_jp40. 4831b06360b587ceb3examples/test_images/10428140_V_lowres.jpg,10428140_V_lowres.jpg,c11538f2de5a5e2d6013fc800848d43 aexamp/Fy25000848 250_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。與範例/test_images_subdirs:100%|███████████████████████████████████████ █ ██| 8/8 [00:00<00:00, 3106.60it/s]寫入範例/HCGSD_testNA_checksums.csv8 映像的範例/test_images_subdirs 的 md5 校驗和已下載到 8 個預期的範例/test_images_subdirs 的 md5 校驗和已下載到 8 個預期的範例/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,c6aeb9d2f6db412ff5be0eb0b5435b83exdiles/jpm 8595 _D_lowres.jpg,55882a0f3fdf8a68579c07254395653bexamples/test_images_subdirs/erato/10428972_ V_lowres.jpg,10428972_Vlowres. 0047e7454ce444f67fee1c90cc3ba9cbexamples/test_images_sub目錄/ erato/10428803_D_lowres.jpg,10428803_D_lowres.jpg,d8btest73f2d3556380245634 melpomene/10428169_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc2_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc2_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc2_V_lowres.jpg,10428169_V_lowres.jpg,042c9dc2 0274e424831b06360b587ceb3examples/test_images_subdirs/melpomene/ 10428 140_V_lowres.jpg,10428140_V_lowres. 9b1a9913a9d420f21b94d6136d6
影像校驗和不匹配:來源 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下載到examples/test_images_md5_mismatch。校驗和範例/test_images_md5_mismatch:100%|██████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]範例/test_images_md5_mismatch 的md5 校驗和寫入範例/HCGSD_test_MD5_mismatch_checksums.csv8 個映像檔已下載到8 個預期映像的範例/test_mism.csv8 個符合映像。 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_low/main/test_data/images/ventral_images/10428972_low_low 10428972_V_lowres。
[1] 測試影像來自 Cuthill Gold Standard 資料集,該資料集由 Cuthill 等人處理。等人。 (原始資料集可在 doi:10.5061/dryad.2hp1978 取得)。