Ich bin ein einfacher Downloader, der Bilder von URLs in einer CSV-Datei herunterlädt und sie nach der angegebenen Spalte benennt (nachdem sichergestellt wurde, dass alle Werte eindeutig sind). Ich kann Ihre Bilder basierend auf einer beliebigen Spalte in Ihrer CSV-Datei in Unterordnern organisieren und werde Sie warnen, wenn der übergeordnete Bildordner bereits vorhanden ist, bevor ich ihn überschreibe. Wenn Sie quadratische Bilder zum Modellieren benötigen, erstelle ich ein zweites Verzeichnis (im gleichen Format organisiert) mit verkleinerten Kopien Ihrer Bilder. Geduld ist eine Tugend, daher warte ich eine bestimmte Zeit, bevor ich ein Bild erneut anfordere, nachdem auf meiner Wiederholungsliste eine Fehlermeldung angezeigt wird. Wenn alle Wiederholungsversuche aufgebraucht sind oder ich eine weitere Fehlermeldung erhalte, protokolliere ich dies für Ihre Überprüfung und fahre fort. Außerdem führe ich ein Protokoll über alle erfolgreichen Antworten. Nach dem Download hilft mir sum-buddy
dabei, Prüfsummen für alle heruntergeladenen Bilder zu sammeln und aufzuzeichnen. Wenn die Quell-CSV-Datei über eine Prüfsummenspalte verfügt, kann ich dann einen Buddy-Check durchführen, um zu überprüfen, ob alle erwarteten Bilder intakt heruntergeladen wurden. Ich überprüfe zumindest, ob die Anzahl der erwarteten Bilder mit der Anzahl der Sum-Buddy-Zählungen übereinstimmt.
Das Cautious Robot-Logo wurde mit Canva Magic Media entworfen.
Python 3.7+
pip install git+https://github.com/Imageomics/cautious-robot
Cautious-Robot überprüft die bereitgestellte CSV-Datei auf IMG_NAME
, URL
und SUBFOLDERS
(falls angegeben) und lädt dann alle Bilder herunter, die einen Wert in der Spalte IMG_NAME
haben. Beachten Sie, dass die Wahl des Bilddateinamens eindeutig sein sollte; Vorsichtsroboter lehnt die Anfrage ab, wenn die ausgewählte Dateinamenspalte im Datensatz nicht eindeutig ist. Es prüft außerdem, ob der bereitgestellte OUTPUT
Ordner bereits vorhanden ist, und fragt den Benutzer, bevor es fortfährt. Bilder, die einen Dateinamen, aber keine URL
haben, werden im Fehlerprotokoll aufgezeichnet; Der Benutzer wird vor dem Herunterladen gefragt, ob er die fehlenden URLs ignorieren oder adressieren soll. Protokolle werden im selben Verzeichnis wie die Quell-CSV gespeichert (die Protokollierung erfolgt durch Hinzufügen zu einem vorhandenen JSON, sodass bei einem neu gestarteten Download keine vorhandenen Protokolle mit demselben Namen überschrieben werden). Bitte beachten Sie, dass dieser Fehler möglicherweise nicht im Fehlerprotokoll aufgezeichnet wird, wenn die gestreamte Antwort unterbrochen wird, bevor das Bild vollständig heruntergeladen wurde. Der Verifizierer würde sie jedoch als fehlend registrieren.
Falls gewünscht, wird ein sekundäres Ausgabeverzeichnis ( OUTPUT_downsized
) mit quadratischen Kopien der Bilder erstellt, die auf die angegebene Größe (z. B. 256 x 256) verkleinert wurden. Die Ordnerstruktur dieses sekundären Ausgabeverzeichnisses entspricht der der unverarbeiteten Bilder. Parameter wie die Wartezeit zwischen den Wiederholungsversuchen bei einem fehlgeschlagenen Download, die maximale Anzahl der Wiederholungsversuche beim Herunterladen eines Bildes und der Index der CSV-Datei, mit dem begonnen werden soll, können ebenfalls übergeben werden. Cautious-Robot versucht erneut, Bilder herunterzuladen, wenn er einen der folgenden HTTP-Antwortstatuscodes empfängt: 429, 500, 502, 503, 504
.
Nach dem Herunterladen der Bilder ruft der Vorsichtsroboter sum-buddy
auf, um Prüfsummen für den Inhalt des OUTPUT
Ordners zu berechnen und aufzuzeichnen. Es druckt die Anzahl der im OUTPUT
Ordner enthaltenen Bilder zusammen mit der erwarteten Anzahl (basierend auf der Anzahl der eindeutigen Dateinamen ungleich Null in der Quelldatei). Wenn in der Quelldatei eine Spalte mit Prüfsummen bereitgestellt wird, wird durch eine innere Zusammenführung der Prüfsummen- und Dateinamenspalten der Quelldatei mit der Prüfsummen-CSV weiter überprüft, ob alle erwarteten Bilder heruntergeladen werden (wodurch Verwirrung im Falle doppelter Bilder vermieden wird). .
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
Beispiel-CSVs [1] werden im Verzeichnis examples/
bereitgestellt, um die CLI zu testen.
Standardeinstellungen:
cautious-robot --input-file examples/HCGSD_testNA.csv --output-dir examples/test_images
Ausgabe:
100%|███████████████████████████████ ███████████████████████████████████| 8/8 [00:01<00:00, 4.18it/s]Bilder, die von examples/HCGSD_testNA.csv nach examples/test_images heruntergeladen wurden. Download-Protokolle befinden sich in examples/HCGSD_testNA_log.jsonl und examples/HCGSD_testNA_error_log.jsonl. Berechnung von MD5-Prüfsummen auf Beispiele/Testbilder: 100%|███████████████████ ████████████████████████| 16/16 [00:00<00:00, 3133.00it/s]MD5-Prüfsummen für „examples/test_images“ wurden in „examples/HCGSD_testNA_checksums.csv8“ geschrieben. Bilder wurden in „examples/test_images“ der 8 erwarteten heruntergeladen.
head -n 9 examples/HCGSD_testNA_checksums.csv
Ausgabe:
Dateipfad, Dateiname, 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
Laden Sie Bilder basierend auf dem Spaltenwert in Unterordner herunter:
cautious-robot -i examples/HCGSD_testNA.csv -o examples/test_images_subdirs --subdir-col Species
Ausgabe:
100%|█████████████████████ ██████████████████████████ ██████████████████████████ █████████████████████████| 8/8 [00:02<00:00, 3,47it/s]Bilder, die von examples/HCGSD_testNA.csv nach examples/test_images_subdirs heruntergeladen wurden. Download-Protokolle befinden sich in examples/HCGSD_testNA_log.jsonl und examples/HCGSD_testNA_error_log.jsonl. Berechnung von MD5-Prüfsummen auf Beispiele/test_images_subdirs: 100%|████████████████████ █████████████████████████| 8/8 [00:00<00:00, 3106.60it/s]md5-Prüfsummen für examples/test_images_subdirs geschrieben in examples/HCGSD_testNA_checksums.csv8 Bilder wurden in examples/test_images_subdirs der 8 erwarteten heruntergeladen.
ls examples/test_images
Ausgabe:
Erato Melpomen
head -n 9 examples/HCGSD_testNA_checksums.csv
Ausgabe:
Dateipfad, Dateiname, 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
Nicht übereinstimmende Bildprüfsumme: Ein Wert wurde absichtlich in der Quell-CSV geändert
cautious-robot -i examples/HCGSD_test_MD5_mismatch.csv -o examples/test_images_md5_mismatch --subdir-col Species -v "md5"
Ausgabe:
100%|█████████████████████ ██████████████████████████ ██████████████████████████ █████████████████████████| 8/8 [00:01<00:00, 4.23it/s]Bilder, die von „examples/HCGSD_test_MD5_mismatch.csv“ nach „examples/test_images_md5_mismatch.Download-Protokolle“ heruntergeladen wurden, befinden sich in „examples/HCGSD_test_MD5_mismatch_log.jsonl“ und „examples/HCGSD_test_MD5_mismatch_error_log.jsonl“. Berechnung von MD5-Prüfsummen auf examples/test_images_md5_mismatch: 100 %|████████████████████████████████| 8/8 [00:00<00:00, 4159,98it/s]md5-Prüfsummen für examples/test_images_md5_mismatch wurden in „examples/HCGSD_test_MD5_mismatch_checksums.csv8“ geschrieben. Bilder wurden in „examples/test_images_md5_mismatch“ der 8 erwarteten Bilder heruntergeladen. Bildkonflikt: 1 Bild(er) nicht ausgerichtet, siehe „examples/HCGSD_test_MD5_mismatch_missing.csv“ für fehlende Bildinformationen und Prüfprotokolle.
# Check on that mis-aligned image head -n 2 examples/HCGSD_test_MD5_mismatch_missing.csv
Ausgabe:
nhm_specimen,species,subspecies,sex,file_url,filename,md510428972,erato,petiverana,male,https://github.com/Imageomi cs/dashboard-prototype/raw/main/test_data/images/ventral_images/10428972_V_lowres.png,10428972_V_lowres.jpg,mismatch
[1] Die Testbilder stammen aus dem Cuthill Gold Standard Dataset, der von Cuthill et al. verarbeitet wurde. al. (Originaldatensatz verfügbar unter doi:10.5061/dryad.2hp1978).