Finden Sie visuell ähnliche Bilder zu einem bestimmten Bild unter Linux

Ich suche nach einem Tool/einer Software, die ein Bild als Beispiel nimmt und meine Festplatte scannt, um ähnliche Bilder zu finden, genau wie Google Bilder im Web.

Muss unter Linux laufen. Siehe Finden visuell ähnlicher Bilder für eine bestimmte Bilddatei (unter Windows) für Windows-Software.

Antworten (6)

findimagedupesist das übliche Kommandozeilenprogramm dafür auf Linux und anderen Unix-Plattformen.

Es sucht nach Ähnlichkeiten zwischen allen Dateien. Sie können die Ausgabe filtern, um nur Informationen zu einer Datei zu behalten, wenn Sie möchten, ich glaube nicht, dass das einen großen Unterschied in der Leistung macht (der langsame Teil scannt alle Dateien).

Führen Sie die folgenden Befehle aus, um PNG- und JPEG-Dateien in einem bestimmten Verzeichnis zu scannen und nur Bilder ähnlich SOMEIMAGE.jpg beizubehalten:

cd /path/to/directory
find . \( -name '*.jpg' -o -name '*.png' \) -print0 |
findimagedupes -0 - |
grep -F 'SOMEIMAGE.jpg'

Wenn Sie das häufig tun, kann findimagedupes Fingerabdrücke von Bildern in einer Datenbank speichern, was die Suche viel schneller macht, sobald die Datenbank aufgebaut ist. Weitere Einzelheiten finden Sie im Handbuch.

das Ergebnis ist: "bash: findimagesdupes: command not found". Auf der Website heißt es, dass die meisten Linux-Distributionen die Pakete standardmäßig installiert haben, und ich habe kal linux (das aktualisiert wird) überprüft und "imagemagik" ist installiert. muss ich irgendein anderes paket installieren?
@Saeed Sie müssen das Paket findimagedupes installieren. Die meisten Distributionen, einschließlich Kali, haben es vorinstalliert , nicht vorinstalliert .
Ja, Sie hatten Recht, jetzt führe ich den Befehl aus und es scheint, dass er funktioniert, aber ich bekomme weder eine Ausgabe noch einen Fehler.
findimagedupesfunktioniert für mich wie ein Zauber, hier ist die Dokumentation: manpages.ubuntu.com/manpages/precise/man1/…
Ich weiß nicht mehr, wann ich es hinzugefügt habe, aber mit dieser -aOption können Sie Ihre Datenbank einfach auf Treffer mit einer kurzen Liste von Dateien überprüfen, was schneller geht, als sie alle zu überprüfen - so etwas wie O(m*n) für m neue Dateien und n in der Datenbank statt O(n^2).
Sie meinen das berühmte Perl-Skript findimagedupes.pl, nicht zu verwechseln mit findimagedupes.go"das einen anderen Hash-Algorithmus verwendet" .

Ein bisschen DIY, aber Sie können so etwas mit Python plus entweder OpenCV oder Numpy machen - in beiden Fällen ist der Ansatz derselbe:

  • Generieren Sie einen Fingerabdruck des Bildes, nach dem Sie suchen, indem Sie Folgendes tun:
    • Auf Graustufen reduzieren
    • Ändern Sie die Größe auf eine feste Größe, zB 64x64
    • eventuell ein Histogramm der Intensitäten erzeugen
  • Verwenden Sie os.walk, um Dateien zum Testen zu finden
  • Generieren Sie den Fingerabdruck der möglichen Übereinstimmung
  • Vergleichen Sie den Fingerabdruck z. B. xoder die Fingerabdrücke miteinander und zählen Sie die Einsen als Maß dafür, wie unterschiedlich sie sind.
  • Fügen Sie bei Bedarf eine GUI hinzu.

    1. Jedes Betriebssystem, einschließlich Windows, Linux, OS-X, Raspberry Pi, Supercomputer.
    2. Kostenlos - sowohl Preis als auch FOSS
    3. GUI - Viele GUI-Bibliotheken verfügbar
    4. Viele Beispiele online nur Google.
    5. Eine Lernerfahrung - Sie können dies als Plus oder Minus zählen .
Danke, aber das ist eine Menge DIY und ich habe nicht die Zeit, eine andere Programmiersprache zu lernen, es wäre gut, wenn es ein Programm gäbe, das das automatisch macht.
@Conspiria Wenn Sie eine bestimmte Programmiersprache fließend beherrschen, wäre dies relevant. Es gibt ähnliche Bibliotheken für andere Sprachen.

Ich empfehle geeqie, Sie können über Paketmanager wie sudo apt install geeqie.

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, kann es nach Pikachus Ohren gruppieren, obwohl die Bilder sehr unterschiedlich sind. Beachten Sie, dass dieses Verzeichnis ~3759 Bilder enthält und ungefähr 5 Minuten dauert, bis es fertig ist.

Wie benutzt man:

  1. cdzum gewünschten Verzeichnis. Alternativ können Sie zuerst öffnen geeqieund den Pfad später einfügen.
  2. eingeben geeqie, um aktuelle Verzeichnisbilder zu öffnen.
  3. ctrl+Aum alle Bilder im linken Bereich hervorzuheben.
  4. Klicken Sie mit der rechten Maustaste, um das Kontextmenü zu öffnen.
  5. Wählen Sie den Menüpunkt „Duplikate suchen..“ aus
  6. Wählen Sie "niedrige" Ähnlichkeit. Warten Sie, bis der Fortschrittsbalken unten rechts abgeschlossen ist. Möglicherweise müssen Sie die „benutzerdefinierte“ Ähnlichkeit erneut auswählen, wenn Sie das Feld „Benutzerdefinierter Schwellenwert“ eingeben, aber die Seite nicht aktualisieren.
  7. Klicken Sie auf die Schaltfläche "Miniaturansichten", um Miniaturansichten anzuzeigen (klicken Sie erneut, wenn sie nicht angezeigt werden).
  8. Klicken Sie mit der rechten Maustaste auf ein einzelnes Element und wählen Sie „Anzeigen“ im Hauptfenster ODER „Anzeigen in neuem Fenster“.
  9. Nur ähnliche Bildgruppen werden sichtbar, der Rest bleibt verborgen.
  10. Sie können dann das Kontrollkästchen "Zwei Dateisätze vergleichen" unten rechts aktivieren, Bilddateien, die Sie vergleichen möchten, per Drag & Drop aus dem Dateimanager in das rechte Bedienfeld ziehen, es werden die ähnlichen Bilder (aus dem ersten Satz) im linken Bedienfeld angezeigt. Der Fehler ist, dass das Ähnlichkeitsniveau hier nicht gut funktioniert und nur genau dasselbe anstelle einer geringen Ähnlichkeit anzeigen kann.

[AKTUALISIEREN]

Ich habe gerade ein Python-Skript (nicht verwandt mit geeqie) geschrieben, um dies zu tun. Dieses Skript verfügt über robuste Optionen, mit denen Sie die Hash-Methode oder die Manhattan-Norm-Methode auswählen, die übereinstimmende/nicht übereinstimmende Ausgabe als symbolischen Link zu einem bestimmten Verzeichnis speichern, eine Datei zwischenspeichern (Sie können mehr als 10000 Bilder in Sekunden vergleichen!) und einen akzeptablen Prozentsatz angeben. Derzeit mache ich es nur unter Linux funktioniert.

Ist dieses Skript mit Geeqie verwandt? Ist es zum Beispiel ein Plugin? Wenn dies nicht der Fall ist, bearbeiten Sie bitte Ihren Beitrag. Vielen Dank
@knb Nicht verwandt mit Geeqie. Bearbeitet.
geeqieist ziemlich gut. Wenn Move tomich das Dialogfeld nur zum richtigen Arbeitsverzeichnis führen würde, fände ich das nützlich.
@Fruit dein Skript funktioniert auch auf macOS, ich habe es gerade getestet :)

HINWEIS: Dies funktioniert nicht mehr. Ich konnte es für die meisten Dateien nicht mehr zum Laufen bringen, es scheint, als wäre dieses Tool kaputt.

Es gibt Libpuzzle , das den Vergleichsteil übernimmt, aber nicht die Suche nach allen Bildern. Um es zu installieren, verwenden Sie das Paket libpuzzle-bin, das Ihnen das Befehlszeilentool zur Verfügung stellt.

Es ist eine Bibliothek und ein Befehlszeilentool, das dazu dient, zwei Bilder zu vergleichen und ihre Ähnlichkeit aufzulisten. Ich habe es vor einiger Zeit verwendet, um Dateien zu finden, die sehr ähnlich waren (Logos), das hat gut funktioniert.

Wenn Sie es verwenden möchten, müssen Sie zusätzliche Software verwenden, die libpuzzle mit den entsprechenden Optionen aufruft.

Ich habe ein Skript geschrieben, das für einen Befehl find -exec verwendet werden kann. Das Skript geht so (ich habe es in einer Datei namens simple-pd.sh):

#!/bin/bash
if (( $(echo "0.80<`puzzle-diff \"$1\" \"$2\"`" | bc -l) )) ; then
   exit 0
fi
exit 1

es wird so aufgerufen:

find . -regex ".*jpg\|.*gif\|.*png" -exec ./simple-pd.sh MYIMAGE {} \; -print

wo Sie MYIMAGE durch das Bild ersetzen, auf dem Sie den Vergleich haben möchten. Das Skript benötigt Ausführungsrechte ( chmod +x simple-pd.sh)

Das Tool (zusammen mit den Skripten hier) wird die meiste Zeit tun, was Sie wollen.

Obwohl ich das Tool mag, hat es seine Nachteile. Es kann nicht alle Dateien lesen (ich hatte manchmal Probleme mit jpgs) und ist irritierend, wenn es fehlschlägt.

Die Parameter dafür puzzle-diffsind kaum dokumentiert, Sie müssen einige Bilder testen, die Sie haben möchten, und einige, die Sie nicht haben, um zu sehen, welche für Ihre Aufgabe am besten geeignet sind.

Mein Skript geht davon aus, dass ein sehr ähnliches Bild (0,80) als JA und der Rest als NEIN gemeldet werden soll. Möglicherweise möchten Sie diese Anzahl reduzieren, um sie Ihren Anforderungen anzupassen.

Okay, also habe ich libpuzzle-php auf Kali installiert und Ihr Skript in einer sh-Datei in meinem Stammverzeichnis abgelegt und den Befehl zum Aufrufen eingegeben, aber ich bekomme nur " find: `./puzzle.sh': Permission denied "
hast du chmod +x puzzle.sh?
Ich habe vergessen, jetzt sagt es mir, dass "./puzzle.sh line 2: puzzle-diff: command not found"
@Saeed Okay, mir ist gerade aufgefallen, dass ich intuitiv das richtige Paket ausgewählt und vergessen habe, darüber zu schreiben. Das benötigte Paket ist 'libpuzzle-bin'. Das enthält die ausführbare Puzzle-Diff-Datei.
Ich denke, es funktioniert jetzt, aber sollte die Ausgabe in etwa so aussehen? (ich habe ein Bild aus dem Web in 2 verschiedene Verzeichnisse mit unterschiedlichen Namen kopiert) BUG -Datei: [dvec.c] Zeile: [341] (standard_in) 2: Syntaxfehler BUG -Datei: [dvec.c] Zeile: [341] ( standard_in) 2: Syntaxfehler ./.cache/mozilla/firefox/c0mqsksl.default/thumbnails/b2da5854129787420780d6c3c34ee1c3.png
@Saeed Nein, sollte es nicht. Könnten Sie mir die Datei (oder ihren Speicherort) per E-Mail senden? Dann schaue ich heute Abend mal nach.
Okay, ich habe sie gerade an die E-Mail-Adresse gesendet, die Sie in Ihrem Profil angegeben haben. Danke
@Saeed: Ich konnte es nicht mehr zum Laufen bringen und ich habe den Fehler in libpuzzle nicht gefunden, der dies verursacht. Ich verzichte jetzt darauf.
Kein Problem, vielleicht stimmt woanders etwas nicht. Danke :)

dupeGuru PE . Außerdem ist es Open Source. :)

dupeGuru Picture Edition (kurz PE) ist ein Tool, um doppelte Bilder auf Ihrem Computer zu finden. dupeGuru PE ist ein großer Bruder von dupeGuru. Es funktioniert wie dupeGuru, ist aber auf den Abgleich doppelter Bilder spezialisiert. dupeGuru PE läuft auf Windows, Mac OS X und Linux.

dupeGuru PE ist effizient. dupeGuru PE kann nicht nur exakte Übereinstimmungen finden, sondern auch Duplikate zwischen Bildern unterschiedlicher Art (PNG, JPG, GIF usw.) und Qualität finden. Unter Mac OS X kann dupeGuru PE Ihre iPhoto-Bibliothek scannen.

dupeGuru PE ist anpassbar. Sie können die Matching-Engine optimieren, um genau die Art von Duplikaten zu finden, die Sie finden möchten. Auf der Einstellungsseite der Hilfedatei sind alle Scan-Engine-Einstellungen aufgelistet, die Sie ändern können.

dupeGuru PE ist sicher. Sein Motor wurde speziell auf Sicherheit ausgelegt. Sein Referenzverzeichnissystem sowie sein Gruppierungssystem verhindern, dass Sie Bilder löschen, die Sie nicht löschen wollten.

Vergleichen Sie beliebige Bildformate. dupeGuru PE unterstützt die Formate JPG, PNG, TIFF, GIF und BMP. Alle diese Formate können miteinander verglichen werden. Die Mac OS X-Version von dupeGuru PE unterstützt auch die Formate PSD und RAW (CR2 und NEF).

Ihre iPhoto- und Aperture-Bibliotheken werden unterstützt.

Machen Sie mit Ihren Duplikaten, was Sie wollen. Sie können doppelte Dateien, die dupeGuru findet, nicht nur löschen, sondern sie auch an einen anderen Ort verschieben oder kopieren. Es gibt auch mehrere Möglichkeiten, Ihre Ergebnisse zu filtern und zu sortieren, um falsche Duplikate einfach auszusortieren (für Scans mit niedriger Schwelle).

(Antwort ist kopiert von https://superuser.com/questions/311633/free-visual-similarity-image-for-a-local-hard-drive-search/453251#453251 – alle Kredite an Pat auf SuperUser )

Versuchen Sie es mit der Bildsuche auf der Festplatte . Es ist ein browserbasiertes (Linux, Windows, Mac usw.) Programm, das ich entwickelt habe. Funktioniert am besten mit Chrome und Firefox, da andere Browser die Ordnerauswahl möglicherweise nicht unterstützen. Sie können das Programm offline verwenden, indem Sie die Webseite herunterladen und auf Port 8080 hosten, da es keine Serververarbeitung der Bilder beinhaltet.

Bitte geben Sie explizit an, ob es unter Linux funktioniert (da jede Frage einzigartig sein soll, muss jede Antwort anders sein und die einzigartigen Anforderungen der Frage berücksichtigen). Bitte wenden Sie auch die gleichen Hinweise wie auf der anderen Seite an. Vielen Dank!