Saya seorang pengunduh sederhana yang mengunduh gambar dari URL dalam CSV dan menamainya berdasarkan kolom yang diberikan (setelah memastikan semua nilainya unik). Saya dapat mengatur gambar Anda ke dalam subfolder berdasarkan kolom mana pun di CSV Anda dan akan memperingatkan Anda jika folder gambar induk sudah ada sebelum menimpanya. Jika Anda memerlukan gambar persegi untuk pemodelan, saya akan membuat direktori kedua (disusun dalam format yang sama) dengan salinan gambar Anda yang diperkecil. Kesabaran adalah suatu kebajikan, jadi saya akan menunggu waktu yang ditentukan sebelum meminta ulang gambar setelah menerima kesalahan pada daftar percobaan ulang saya; jika semua percobaan ulang dilakukan atau saya menerima kesalahan lain, saya mencatatnya untuk Anda tinjau dan melanjutkan. Saya juga mencatat semua tanggapan yang berhasil. Setelah diunduh, sum-buddy
membantu saya mengumpulkan dan mencatat checksum untuk semua gambar yang diunduh. Jika CSV sumber memiliki kolom checksum, saya kemudian dapat melakukan buddy-check untuk memverifikasi semua gambar yang diharapkan telah diunduh secara utuh. Minimal, saya memeriksa jumlah gambar yang diharapkan sesuai dengan jumlah jumlah sobat.
Logo Robot Berhati-hati didesain menggunakan Canva Magic Media.
Python 3.7+
pip instal git+https://github.com/Imageomics/cautious-robot
Robot yang berhati-hati akan memeriksa CSV yang disediakan untuk IMG_NAME
, URL
, dan SUBFOLDERS
(jika tersedia), lalu mendownload semua gambar yang memiliki nilai di kolom IMG_NAME
. Perhatikan bahwa pilihan nama file gambar harus unik; robot hati-hati akan menolak permintaan jika kolom nama file yang dipilih tidak unik dalam kumpulan data. Ini juga akan memeriksa apakah folder OUTPUT
yang disediakan sudah ada, menanyakan pengguna sebelum melanjutkan. Gambar yang memiliki nama file tetapi tidak memiliki URL
dicatat dalam log kesalahan; pengguna diminta apakah akan mengabaikan atau mengatasi URL yang hilang sebelum mengunduh. Log disimpan di direktori yang sama dengan CSV sumber (logging dilakukan dengan menambahkan ke JSON yang sudah ada, sehingga tidak akan menimpa log yang ada dengan nama yang sama jika unduhan dimulai ulang). Perlu diingat bahwa jika respons streaming terganggu sebelum gambar diunduh secara keseluruhan, kesalahan ini mungkin tidak dicatat dalam log kesalahan, namun pemverifikasi akan mencatatnya sebagai hilang.
Jika diinginkan, direktori keluaran sekunder ( OUTPUT_downsized
) akan dibuat dengan salinan persegi dari gambar yang diperkecil ke ukuran yang ditentukan (misalnya, 256 x 256). Struktur folder direktori keluaran sekunder ini akan cocok dengan gambar yang belum diproses. Parameter seperti waktu menunggu antara percobaan ulang pada pengunduhan yang gagal, jumlah maksimum percobaan ulang pengunduhan gambar, dan indeks CSV mana yang digunakan untuk memulai, semuanya juga dapat dilewati. Robot yang berhati-hati akan mencoba lagi pengunduhan gambar ketika menerima salah satu kode status respons HTTP berikut: 429, 500, 502, 503, 504
.
Setelah mengunduh gambar, robot yang berhati-hati memanggil sum-buddy
untuk menghitung dan mencatat checksum dari isi folder OUTPUT
. Ini mencetak jumlah gambar yang terdapat dalam folder OUTPUT
bersama dengan jumlah yang diharapkan (berdasarkan hitungan nama file unik dan bukan nol dalam file sumber). Jika disediakan kolom dengan checksum di file sumber, maka akan dilakukan verifikasi lebih lanjut bahwa semua gambar yang diharapkan diunduh melalui penggabungan dalam pada kolom checksum dan nama file dari file sumber dengan CSV checksum (sehingga menghindari kebingungan jika terjadi duplikat gambar) .
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
Contoh CSV [1] disediakan di direktori examples/
untuk menguji CLI.
Default:
cautious-robot --input-file examples/HCGSD_testNA.csv --output-dir examples/test_images
Keluaran:
100%|██████████████████████████████████████ █████████ ███████████████████| 8/8 [00:01<00:00, 4.18it/s]Gambar yang diunduh dari contoh/HCGSD_testNA.csv ke contoh/test_images.Log unduhan ada di contoh/HCGSD_testNA_log.jsonl dan contoh/HCGSD_testNA_error_log.jsonl.Menghitung checksum md5 aktif contoh/gambar_tes: 100%|████████████████████████████████████ ███████ | 16/16 [00:00<00:00, 3133.00it/s]md5 checksum untuk contoh/test_images ditulis ke contoh/HCGSD_testNA_checksums.csv8 gambar diunduh ke contoh/test_images dari 8 yang diharapkan.
head -n 9 examples/HCGSD_testNA_checksums.csv
Keluaran:
jalur file,nama file,md5examples/test_images/10429021_V_lowres.jpg,10429021_V_lowres.jpg,c6aeb9d2f6db412ff5be0eb0b5435b83examples/test_images/10428595_D_lowres.jpg,10428595_D_lowres.jpg,5588 2a0f3fdf8a68579c07254395653bexamples/test_images/10428972_V_lowres.jpg,10428972_V_lo wres.jpg,0047e7454ce444f67fee1c90cc3ba9cbexamples/test_images/10428803_D_lowres.jpg,1 0428803_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,c11538f2de5a5e2d6013fc800848 d43aexamples/test_images/10428250_V_lowres.jpg,10428250_V_lowres.jpg, 14ac99b1a9913a9d420f21b94d6136d6
Unduh Gambar ke Subfolder Berdasarkan Nilai Kolom:
cautious-robot -i examples/HCGSD_testNA.csv -o examples/test_images_subdirs --subdir-col Species
Keluaran:
100%|██████████████████████████████████████ █████████ ████████████████████████████████████████ ██████████ █| 8/8 [00:02<00:00, 3.47it/s]Gambar yang diunduh dari contoh/HCGSD_testNA.csv ke contoh/test_images_subdirs.Log unduhan ada di contoh/HCGSD_testNA_log.jsonl dan contoh/HCGSD_testNA_error_log.jsonl.Menghitung checksum md5 di contoh/test_images_subdirs: 100%|██████████████████████████████████ █████████ ██| 8/8 [00:00<00:00, 3106.60it/s]md5 checksum untuk contoh/test_images_subdirs ditulis ke contoh/HCGSD_testNA_checksums.csv8 gambar diunduh ke contoh/test_images_subdirs dari 8 yang diharapkan.
ls examples/test_images
Keluaran:
erato melpomene
head -n 9 examples/HCGSD_testNA_checksums.csv
Keluaran:
FilePath, nama file, MD5Examples/test_images_subdirs/Erato/10429021_v_lowres.jpg, 10429021_v_lowres.jpg, C6AEB9D2F6DB412FF5BE0EB0B5435B83B83P6DB412FF5BE0EB0B5435B8B83P6DB412FF5BE0EB0B5435B8B83B8AP6D _lowres.jpg, 10428595_d_lowres.jpg, 55882a0f3fdf8a68579c07254395653bexamples/test_images_subdirs/Erato/10428972_v_lowre.jes.jger.jger.jo.jo.pe. 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/10 428140_V_lowres.jpg,10428140_V_lowres. jpg,c11538f2de5a5e2d6013fc800848d43aexamples/test_images_subdirs/melpomene/10428250_V_lowres.jpg,10428250_V_lowres.jpg,14ac99b1a9913a9d420f21b94d6136d6
Ketidakcocokan Checksum Gambar: satu nilai sengaja diubah di CSV sumber
cautious-robot -i examples/HCGSD_test_MD5_mismatch.csv -o examples/test_images_md5_mismatch --subdir-col Species -v "md5"
Keluaran:
100%|██████████████████████████████████████ █████████ ████████████████████████████████████████ ██████████ █| 8/8 [00:01<00:00, 4.23it/s]Gambar diunduh dari contoh/HCGSD_test_MD5_mismatch.csv ke contoh/test_images_md5_mismatch.Log unduhan ada di contoh/HCGSD_test_MD5_mismatch_log.jsonl dan contoh/HCGSD_test_MD5_mismatch_error_log.jsonl.Menghitung checksum md5 pada contoh/test_images_md5_mismatch: 100%|████████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]md5 checksum untuk contoh/test_images_md5_mismatch ditulis ke contoh/HCGSD_test_MD5_mismatch_checksums.csv8 gambar diunduh ke contoh/test_images_md5_mismatch dari 8 yang diharapkan. Ketidakcocokan gambar: 1 gambar tidak selaras, lihat contoh/HCGSD_test_MD5_mismatch_missing.csv untuk info gambar yang hilang dan periksa log.
# Check on that mis-aligned image head -n 2 examples/HCGSD_test_MD5_mismatch_missing.csv
Keluaran:
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, ketidakcocokan
[1] Gambar uji berasal dari Kumpulan Data Standar Cuthill Gold, yang diproses dari Cuthill, et. al. (kumpulan data asli tersedia di doi:10.5061/dryad.2hp1978).