ฉันเป็นเครื่องมือดาวน์โหลดง่ายๆ ที่ดาวน์โหลดรูปภาพจาก URL ในรูปแบบ CSV และตั้งชื่อตามคอลัมน์ที่กำหนด (หลังจากแน่ใจว่าค่าทั้งหมดไม่ซ้ำกัน) ฉันสามารถจัดระเบียบรูปภาพของคุณเป็นโฟลเดอร์ย่อยตามคอลัมน์ใดๆ ใน CSV ของคุณได้ และจะเตือนคุณหากมีโฟลเดอร์รูปภาพหลักอยู่แล้วก่อนที่จะเขียนทับ หากคุณต้องการภาพสี่เหลี่ยมจัตุรัสสำหรับการสร้างแบบจำลอง ฉันจะสร้างไดเร็กทอรีที่สอง (จัดระเบียบในรูปแบบเดียวกัน) พร้อมลดขนาดสำเนารูปภาพของคุณ ความอดทนเป็นคุณธรรม ดังนั้นฉันจะรอตามเวลาที่กำหนดก่อนที่จะขอรูปภาพใหม่หลังจากได้รับข้อผิดพลาดในรายการลองใหม่ของฉัน หากการลองใหม่ทั้งหมดหมดลงหรือฉันได้รับข้อผิดพลาดอื่น ฉันจะบันทึกสิ่งนั้นเพื่อให้คุณตรวจสอบและดำเนินการต่อไป ฉันยังเก็บบันทึกการตอบกลับที่ประสบความสำเร็จทั้งหมดด้วย หลังจากดาวน์โหลด sum-buddy
จะช่วยฉันรวบรวมและบันทึกการตรวจสอบสำหรับภาพที่ดาวน์โหลดทั้งหมด หาก CSV แหล่งที่มามีคอลัมน์ตรวจสอบ ฉันสามารถตรวจสอบบัดดี้เพื่อตรวจสอบว่าภาพที่คาดหวังทั้งหมดได้รับการดาวน์โหลดครบถ้วน อย่างน้อยที่สุด ฉันตรวจสอบจำนวนภาพที่คาดหวังตรงกับจำนวนรวมของเพื่อน
โลโก้ Cautious Robot ออกแบบโดยใช้ Canva Magic Media
ไพธอน 3.7+
pip ติดตั้ง git+https://github.com/Imageomics/cautious-robot
Cautious-robot จะตรวจสอบ CSV ที่ให้มาสำหรับ IMG_NAME
, URL
และ SUBFOLDERS
(ถ้ามี) จากนั้นดาวน์โหลดรูปภาพทั้งหมดที่มีค่าในคอลัมน์ IMG_NAME
โปรดทราบว่าการเลือกชื่อไฟล์รูปภาพต้องไม่ซ้ำกัน cautious-robot จะปฏิเสธคำขอหากคอลัมน์ชื่อไฟล์ที่เลือกไม่ซ้ำกันภายในชุดข้อมูล นอกจากนี้ยังจะตรวจสอบว่ามีโฟลเดอร์ 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
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]ภาพที่ดาวน์โหลดจาก examples/HCGSD_testNA.csv ไปยัง examples/test_images บันทึกการดาวน์โหลดอยู่ใน examples/HCGSD_testNA_log.jsonl และ examples/HCGSD_testNA_error_log.jsonl การคำนวณ md5 checksums บน ตัวอย่าง/test_images: 100%|██████████████████████████████████████████ | 16/16 [00:00<00:00, 3133.00it/s]md5 checksums สำหรับ examples/test_images ที่เขียนลงใน examples/HCGSD_testNA_checksums.csv8 อิมเมจถูกดาวน์โหลดไปยัง examples/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,5588 2a0f3fdf8a68579c07254395653bexamples/test_images/10428972_V_lowres.jpg,10428972_V_low res.jpg,0047e7454ce444f67fee1c90cc3ba9cbexamples/test_images/10428803_D_lowres.jpg,10 428803_D_lowres. jpg,d8bfb73f2d3556390de04aa98822b815ตัวอย่าง/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,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 checksums บน ตัวอย่าง/test_images_subdirs: 100%|██████████████████████████████████████████ ██| 8/8 [00:00<00:00, 3106.60it/s]md5 checksums สำหรับ examples/test_images_subdirs ที่เขียนไปยัง examples/HCGSD_testNA_checksums.csv8 อิมเมจถูกดาวน์โหลดไปยัง examples/test_images_subdirs จาก 8 ภาพที่คาดไว้
ls examples/test_images
เอาท์พุท:
เอราโต เมลโพมีน
head -n 9 examples/HCGSD_testNA_checksums.csv
เอาท์พุท:
filepath, ชื่อไฟล์, md5examples/test_images_subdirs/erato/10429021_v_lowres.jpg, 10429021_v_ lowres.jpg, c6aeb9d2f6db412ff5be0b0b5435b835b835b8353 lowres.jpg, 10428595_D_lowres.jpg, 55882a0f3fdf8a68579c07254395653bexamples/test_images_subdirs/erato/10428972_v_lowres.jpg, 10428972_ 54CE444F67FEE1C90CC3BA9CBEXAMPLES/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,042c9 dc294d589ce3f140f14ddab0166ตัวอย่าง/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]ภาพที่ดาวน์โหลดจาก 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 การคำนวณการตรวจสอบ md5 ผลรวม ตัวอย่าง/test_images_md5_mismatch: 100%|██████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]md5 checksums สำหรับ examples/test_images_md5_mismatch เขียนไปยัง examples/HCGSD_test_MD5_mismatch_checksums.csv8 รูปภาพถูกดาวน์โหลดไปยัง examples/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 ฯลฯ อัล (ชุดข้อมูลดั้งเดิมอยู่ที่ doi:10.5061/dryad.2hp1978)