Similar Images - Bildduplikate finden und bearbeiten

 

Bildersammlung zu groß? In diesem Projekt war die Zielsetzung, in einem großen Bildverzeichnis (ca. 800.000 Bilder) alle möglichen Duplikate zu finden und diese möglichen Duplikate manuell zu vergleichen und ggf. zu löschen. Das Projekt besteht dabei aus drei Teilen: Zuerst ein Python Script, mit dem die möglichen Duplikate gefunden werden. Diese können in ein CSV-Datei exportiert werden, oder in einer Datenbank gespeichert werden. Weiters wurde noch eine API in PHP geschrieben, welche diese möglichen Duplikate in einer Datenbank verarbeitet. Der dritte und nicht weniger wichtige Teil ist eine Windows Forms App, welche die Bearbeitung der Duplikate ermöglicht. Dabei können sowohl CSV-Dateien importiert werden, als auch die API benutzt werden. Bei Fragen bitte mich einfach kontaktieren, ansonsten viel Spaß beim Nachbauen! Wer Tippfehler findet, darf sie behalten - Inhaltliche Fehler oder Verbesserungsanregungen können jederzeit an mich gemailt werden.

Inhaltsverzeichnis:

Schritt 1 - SimilarImages Python Script:

Lade dir das Python-Skript vom Git (https://git.kmpr.at/kamp/SimilarImages) runter und befolge die Installationsanleitung auf Git.

mkdir /opt/similarimages/

cd /opt/similarimages/

git clone https://git.kmpr.at/kamp/SimilarImages.git

cd Duplicate-Remover-master/

pip install -r requirements.txt

Schritt 2 - Bildduplikate als CSV exportieren:

In der "DuplicateRemover.py" Datei in Zeile 19, setze "verbose=True", "exportCSV=True" und "exportAPI=False".

nano DuplicateRemover.py

In der "main.py" Datei in Zeile 3, setze den Verzeichnisnamen, in dem sich deine Bildsammlung befindet, welche du nach möglichen Duplikaten durchsuchen möchtest.

nano main.py

Nun wird es Zeit, das Skript zum finden möglicher Duplikate auszuführen. Die möglichen Duplikate werden nun in die Datei "duplicates.csv" geschrieben. Achtung: Je nach Anzahl der Bilder, kann ein kompletter Durchlauf des Skriptes mehrere Stunden dauern.

python3 main.py

Schritt 3 - DuplicateAPI:

Die DuplicateAPI erfüllt mehrere Zwecke. Zum einen werden mögliche Duplikate vom Skript direkt via API in eine Datenbank geschrieben. Zum anderen können mögliche Duplikate via Windows Forms App bearbeitet werden (wie auch bei der Verwendung einer CSV-Datei). Bei der Verwendung einer CSV-Datei, muss man aber bei jedem erneuten Durchlauf des Skriptes alle möglichen Duplikate prüfen. Bei der API werden Bildpaare, die keine Duplikate sind, als solche markiert und müssen bei erneuten Durchläufen nicht erneut bearbeitet werden.

Die DuplicateAPI findest du ebenfalls auf Git: https://git.kmpr.at/kamp/DuplicateAPI - lade die Dateien herunter und befolge die Installationsanleitung auf Git. Du benötigst eine MySQL-Datenbank sowie einen Webserver mit PHP 8+-Unterstützung.

Wenn du die Datenbank eingerichtet und die Verbindungsdaten in die duplicate_api.php eingetragen hast, rufe in einem Browser die API-Testseite auf, um zu prüfen, dass die API korrekt funktioniert (wenn du eine Fehlermeldung im JSON-Format erhältst, funktioniert sie).

http://localhost/duplicate_api.php?test

Schritt 4 - Bildduplikate via DuplicateAPI exportieren:

In der "DuplicateRemover.py" Datei in Zeile 19, setze "verbose=True", "exportCSV=False" und "exportAPI=True".

Weiters trage die URL zu deinem Webserver, auf dem die API läuft, in Zeile 41 ein.

nano DuplicateRemover.py

Starte nun wieder das Skript, um Duplikate zu finden und diese via API in die Datenban zu speichern. Auch hier kann ein Durchlauf mehrere Stunden dauern, wenn viele Bilder vorhanden sind. Ich empfehle daher, "nohup" zu verwenden.

nohup python3 main.py

Schritt 5 - Bildduplikate von CSV bearbeiten:

Die möglichen Bildduplikate vom Skript, welche in einer CSV-Datei vorliegen, müssen auch bearbeitet werden. Dazu kann das Tool "Bildduplikate" verwendet werden, welches auf Git verfügbar ist: https://git.kmpr.at/kamp/Mk0.Software.Bildduplikate/releases.

Entpacke und installiere das Tool "Bildduplikate". Alternativ kannst du das Projekt in Visual Studio auch selbst kompilieren.

Klicke im Tool auf den Button "CSV", um die CSV-Datei zu laden. Nun kannst du alle möglichen Duplikate bearbeiten. Wähle "KEIN DUPLIKAT", wenn die Bilder nicht identisch sind - es wird keines der beiden Bilder gelöscht und dir werden die nächsten möglichen Bildduplikate angezeigt. Handelt es sich aber um ein Duplikat, kannst du eines der beiden Bilder löschen. Ein Algorithmus errechnet, welches das möglicherweise schlechtere Duplikat ist und dieser Button ist in fetter Schrift gehalten. Du kannst dich aber anders entscheiden. Speicherpfad, Dateinamen, Dateigrößen, Datei-Datum sowie die Bildauflösungen werden dir auch angezeigt.

Schritt 6 - Bildduplikate von API bearbeiten:

Die Bearbeitung der möglichen Bildduplikate via API ist im Tool "Bildduplikate" identisch zu der von möglichen Duplikaten aus einer CSV-Datei. Die API bietet jedoch den Vorteil, dass man Bilder, die keine Duplikate sind, bei erneuten Durchläufen des Skriptes nicht wieder als solche markieren muss, da sich die API dies merkt.

Um mögliche Bildduplikate von der API zu laden, klicke im Tool "Bildduplikate" auf den Button "API Setting". Gib dort die URL zu deiner API ein. Optional kannst du auch noch den Bildpfad ersetzen lassen, wenn z.B. der Pfad zu den Bildern auf dem Gerät, auf dem das Skript lief, anders ist als der auf dem Gerät, auf dem du das Tool verwendest.