أنا أداة تنزيل بسيطة تقوم بتنزيل الصور من عناوين URL في ملف CSV وتسميتها حسب العمود المحدد (بعد التأكد من أن جميع قيمها فريدة). يمكنني تنظيم صورك في مجلدات فرعية بناءً على أي عمود في ملف CSV الخاص بك وسوف أحذرك إذا كان مجلد الصورة الأصلي موجودًا بالفعل قبل الكتابة فوقه. إذا كنت بحاجة إلى صور مربعة للنمذجة، فسوف أقوم بإنشاء دليل ثانٍ (منظم بنفس التنسيق) يحتوي على نسخ مصغرة من صورك. الصبر فضيلة، لذلك سأنتظر وقتًا محددًا قبل إعادة طلب الصورة بعد تلقي خطأ في قائمة إعادة المحاولة الخاصة بي؛ إذا تم استنفاد كافة المحاولات أو تلقيت خطأ آخر، فسأسجل ذلك لمراجعتك وأمضي قدمًا. وأحتفظ أيضًا بسجل لجميع الاستجابات الناجحة. بعد التنزيل، يساعدني sum-buddy
في جمع وتسجيل المجاميع الاختبارية لجميع الصور التي تم تنزيلها. إذا كان ملف CSV المصدر يحتوي على عمود المجموع الاختباري، فيمكنني بعد ذلك إجراء فحص الأصدقاء للتحقق من تنزيل جميع الصور المتوقعة سليمة. كحد أدنى، أتحقق من تطابق عدد الصور المتوقعة مع عدد مجموع الأصدقاء.
تم تصميم شعار Cautious Robot باستخدام Canva Magic Media.
بايثون 3.7+
تثبيت النقطة git+https://github.com/Imageomics/cautious-robot
سيتحقق الروبوت الحذر من ملف CSV المقدم لـ IMG_NAME
و URL
و SUBFOLDERS
(إذا تم توفيره)، ثم يقوم بتنزيل جميع الصور التي لها قيمة في عمود IMG_NAME
. لاحظ أن اختيار اسم ملف الصورة يجب أن يكون فريدًا؛ سوف يرفض الحذر الروبوت الطلب إذا لم يكن عمود اسم الملف المحدد فريدًا ضمن مجموعة البيانات. وسوف يتحقق أيضًا مما إذا كان مجلد OUTPUT
المقدم موجودًا بالفعل، ويسأل المستخدم قبل المتابعة. يتم تسجيل الصور التي لها اسم ملف ولكن بدون عنوان URL
في سجل الأخطاء؛ يُطلب من المستخدم ما إذا كان يجب تجاهل عناوين URL المفقودة أو معالجتها قبل التنزيل. يتم حفظ السجلات في نفس الدليل مثل ملف CSV المصدر (يتم التسجيل عن طريق الإضافة إلى ملف JSON موجود، لذلك لن يتم استبدال السجلات الموجودة بنفس الاسم في حالة إعادة تشغيل التنزيل). يرجى ملاحظة أنه إذا تمت مقاطعة الاستجابة المتدفقة قبل تنزيل الصورة بأكملها، فقد لا يتم تسجيل هذا الخطأ في سجل الأخطاء، ولكن المدقق سيسجلها على أنها مفقودة.
إذا رغبت في ذلك، سيتم إنشاء دليل إخراج ثانوي ( OUTPUT_downsized
) بنسخ مربعة من الصور تم تصغير حجمها إلى الحجم المحدد (على سبيل المثال، 256 × 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]الصور التي تم تنزيلها من الأمثلة/HCGSD_testNA.csv إلى الأمثلة/test_images. توجد سجلات التنزيل في الأمثلة/HCGSD_testNA_log.jsonl والأمثلة/HCGSD_testNA_error_log.jsonl.حساب المجاميع الاختبارية md5 على أمثلة/test_images: 100%|█████████████████ ██████████████████████| 16/16 [00:00<00:00, 3133.00it/s]تم تنزيل المجاميع الاختبارية md5 للأمثلة/test_images المكتوبة على الأمثلة/HCGSD_testNA_checksums.csv8 الصور إلى الأمثلة/test_images من أصل 8 صور متوقعة.
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]الصور التي تم تنزيلها من الأمثلة/HCGSD_testNA.csv إلى الأمثلة/test_images_subdirs. توجد سجلات التنزيل في الأمثلة/HCGSD_testNA_log.jsonl والأمثلة/HCGSD_testNA_error_log.jsonl.حساب المجموع الاختباري md5 أمثلة/test_images_subdirs: 100%|██████████████████ ███████████████████████| 8/8 [00:00<00:00, 3106.60it/s]تم تنزيل المجاميع الاختبارية md5 للأمثلة/test_images_subdirs المكتوبة على الأمثلة/HCGSD_testNA_checksums.csv8 الصور إلى الأمثلة/test_images_subdirs من أصل 8 صور متوقعة.
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 المصدر
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]الصور التي تم تنزيلها من الأمثلة/HCGSD_test_MD5_mismatch.csv إلى الأمثلة/test_images_md5_mismatch. سجلات التنزيل موجودة في الأمثلة/HCGSD_test_MD5_mismatch_log.jsonl والأمثلة/HCGSD_test_MD5_mismatch_error_log.jsonl.Calculated md5 المجاميع الاختبارية على الأمثلة/test_images_md5_mismatch: 100%|██████████████████████████████| 8/8 [00:00<00:00, 4159.98it/s]المجموعات الاختبارية md5 للأمثلة/test_images_md5_mismatch المكتوبة على الأمثلة/HCGSD_test_MD5_mismatch_checksums.csv8 تم تنزيل الصور إلى الأمثلة/test_images_md5_mismatch من الـ 8 المتوقعة. عدم تطابق الصورة: صورة (صور) واحدة غير الانحياز، انظر 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،الأنواع،الأنواع الفرعية،الجنس،file_url،اسم الملف،md510428972،erato،petiverana،ذكر،https://github.com/Imageomi cs/dashboard-prototype/raw/main/test_data/images/ventral_images/10428972_V_lowres.png,10428972_V_lowres.jpg,عدم تطابق
[1] صور الاختبار مأخوذة من مجموعة بيانات Cuthill Gold Standard، والتي تمت معالجتها من Cuthill, et. آل. (مجموعة البيانات الأصلية متاحة على doi:10.5061/dryad.2hp1978).