Der Dublettenfilter - Doppelte Bilder finden und vermeiden

Einstellen des Dublettenfilters

Standardmäßig ist der Dublettenfilter beim Erzeugen einer neuen Datenbank aktiv. Rechts im Screenshot sehen Sie die Einstellungen zum Dublettenfilter wie er beim Importvorgang angewendet wird. Beim Importieren haben Sie, bis auf eine Ausnahme, die Möglichkeit die Einstellungen zu ändern. Schauen wir uns mal an welche Optionen es gibt und was Sie bedeuten:

  • Hashwerte erzeugen
    Aktiviert den Dublettenfilter. Hashwerte sind die Grundlage der Erkennung der doppelten Bilder, dadurch löst sich Imabas von dem Dateinamen, der Größe und der Position im Dateisystem. Technisch nutzt Imabas für den Hash den SHA-256 Algorithmus, was eine sehr hohe Erkennungsrate bedeutet.
  • Dubletten nicht einlesen
    Im Importdialog haben Sie die Möglichkeit den Dublettenfilter ein- bzw. auszuschalten. Aktivieren Sie diese Option damit der Dublettenfilter immer Eingeschaltet ist und vom Benutzer beim Importieren nicht deaktiviert werden kann.
  • Keine Hashdateien erzeugen
    Um die Performance enorm zu steigern, legt Imabas im einzulesenden Verzeichnis eine Datei ($hashes.log) ab, in der die erzeugten Hashes gespeichert werden. Damit kann beim nächsten Einlesen der Hash aus der Datei abgelesen und gegen die Datenbank geprüft werden. Soll Imabas diese Log-Datei nicht anlegen so aktivieren Sie diese Option.
  • Für den Hash einlesen (In Kilobyte)
    Die Menge der für den Hash einzulesenden Daten, sind entscheidend für den Erkennungsprozess und auch der Performance. Im Grunde gilt, je mehr desto genauer aber auch langsamer. Als Voreinstellung gibt Imabas 2048 KB (2 MB) vor, was bedeutet es liest maximal diese Menge an Byte aus der Datei. Imabas interessiert sich in diesem Augenblick nicht dafür ob die Datei ein Bild oder sonst irgendeine Datei ist. Wären zwei Bilder in den ersten 2MB 100% identisch, würde Imabas es nicht als Dublette erkennen, was aber wohl in der Praxis nicht vorkommt. Sollten Sie jemals das Problem haben das Imabas zwei unterschiedliche Bilder als Dublette erkennt, können Sie diesen Wert hochsetzen. (Eine Reorganisation die neue Hashwerte erzeugt, ist dann zwingend!)

Auswirkungen des Filters beim Importieren

Auswirkungen des Filters ergeben sich im Importdialog wenn neue Bilder eingelesen werden. Da man ja nicht immer kontrollieren möchte ob man ein Bild bereits eingelesen hat, sei es weil das Bild auch in einem anderen Order liegt, bzw man einen Ordner erneut einliest um die neu abgelegten Bilder zu importieren. In beiden Fällen sorgt der Dublettenfilter dafür das nur wirklich neue Bilder importiert werden.



Vor dem ersten Importvorgang

Nach dem ersten Importvorgang

Das Verzeichnis nach dem Scannen

Der Inhalt der $hashes.log

Vor dem Importieren

Vor dem Einlesen der gewählten Ordnerstruktur können Sie folgende Optionen bzgl. des Dublettenfilters setzen:

  • Dublettenfilter aktivieren
    Aktiviert den Dublettenfilter. Ist das Kästchen angehakt und gesperrt wurde in den Importeinstellungen (siehe oben) der Dublettenfilter als Pflichtfeld gesetzt.
  • Hashdateien ignorieren
    Ist diese Option gesetzt ignoriert Imabas vorhandene $hashes.log und generiert immer den Hash aus der Bilddatei.
  • Hashdateien neu erzeugen
    Mit dieser Option veranlassen Sie Imabas dazu, eine vorhandene Hashdatei zu ignorieren, wie bei der vorherigen Option, allerdings werden die neu ermittelten Hashes in eine neue Hashdatei geschrieben. Entspricht im Grunde dem Verhalten als wenn der einzulesende Ordner noch nie gescannt wurde.

Haben Sie einen Suchvorgang gestartet, werden im unteren Teil die gefundenen Bilder aufgelistet. Im ersten Screenshot wurde der Ordner noch nie eingelesen und es ist keine Hashdatei vorhanden. Rechts in der Liste der gefundenen Bilder, stehen keine Bild-Id Werte, so das keines der Bilder als Dublette erkannt ist. Bei dem letzten Bild habe ich bewusst den Haken raus genommen, so das dieses nicht importiert wird. Schauen Sie jetzt in den Ordnern mit den Bildern, siehe dritter Screenshot, so befindet sich dort eine Hashdatei.


Wenn Sie jetzt den Import starten und anschließend wieder auf Bilder suchen klicken, werden die ersten beiden Bilder als Dublette erkannt! (Das waren die mit Häkchen..) Im zweiten Screenshot sehen Sie das die Dubletten nicht angehakt und durchgestrichen sind, des Weiteren steht Rechts in der Liste die Bild-Id jenes Bildes das sich mit dem identischen Hash bereits in der Datenbank befindet. Sind Sie sich nicht sicher um welches Bild es sich dabei handelt, können Sie anhand der Id das Bild in der Datenbank suchen. (Siehe rechter Screenshot)


Anhand dieses Prinzips können Sie jetzt eine Ordnerstruktur, mit z.B. 100 Bildern, einlesen. Ein paar Tage später starten Sie für den gleichen Ordner erneut einen Suchvorgang und Imabas findet nur die "neuen" Bilder, Sie müssen dann nur noch auf Importieren klicken...

Ein großes Archiv mit vielen Dubletten einlesen

Lesen Sie zum ersten mal ein neues Archiv ein, ist es, gerade in Firmen, oft so das die Benutzer die Bilder zur Verschlagwortung in verschiedene Ordner kopiert!! haben, was dann beim Einlesen zu sehr vielen Dubletten führen wird. In der Praxis es aber nun das keiner Zeit dafür jedes Bild zu kontrollieren und zu bereinigen, was dann aber dazu führt das Sie jede Menge Ballast im Dateisystem haben, den Sie im Grunde niemals loswerden.


Es auch nie sicher gestellt welches der doppelten Bilder eingelesen wird, das hängt von der Suchreihenfolge ab. An dieser Stelle möchte ich Ihnen Trick zeigen, wie man erstmal alles einliest und sich später um die Dubletten kümmert.


  1. Deaktivieren Sie in den Importeinstellungen dir Option Dubletten nicht einlesen. Die Hashwerte müssen weiterhin generiert werden!!
  2. Starten Sie den Import und deaktivieren Sie bei Bedarf auf den Dublettenfilter. Lesen Sie das Archiv ein, am besten komplett, und Imabas wird keine Dubletten finden.
  3. Starten Sie jetzt den Import. Dabei werden in die Datenbank die generierten Hashes geschrieben, diesen Umstand nutzen wir per SQL um die doppelten Bilder zu finden.
  4. Machen Sie Punkt Eins wieder rückgängig, das heißt aktivieren Sie die Option Dubletten nicht einlesen, damit der Dublettenfilter wieder Pflicht ist!
  5. Legen Sie eine Benutzerabfrage an die Bildpärchen anhand des generierten Hashwertes sucht und anzeigt. Verwenden Sie dazu den unten angegebenen SQL-Befehl und die Abfrage sollte bei Ihnen in etwa so wie auf dem rechten Screenshot unten aussehen.
  6. Nach dem Ausführen der Abfrage werden Sie alle Dubletten im Browser sehen. Durch geschicktes Sortieren, z.B. nach Größe, sollten die Pärchen dann nebeneinander zu sehen sein.
  7. Sie können ab jetzt jederzeit sich um die doppelten Bilder kümmern und bereinigen, bis das die Benutzerabfrage keine Bilder mehr liefert.

Führen Sie diesen Vorgang definitiv nur einmal aus, Sie haben sonst ihr gesamten Archiv doppelt in der Datenbank!


Code
  1. select * from bilder
  2. where hashtag <> '' and hashtag in (
  3. select hashtag from bilder group by hashtag having count(hashtag) >= 2
  4. )