Dies ist eine Anleitung zum Erkennen ähnlicher Bilder und Fotos mit imagededup, einer Python Machine Learning, Deep Learning und KI-Bibliothek. Sie kann zum Beispiel Ähnlichkeiten finden, die einfache Hash-Algorithmen nicht erkennen können, wie Bilder mit gleichem Inhalt aber unterschiedlicher Qualität oder Auflösung, leicht unterschiedlichen Winkeln oder Beschneidungen. Es scheint Standard zu sein, sie als Bildfilter für Machine Learning zu verwenden, aber sie kann auch für allgemeine Zwecke verwendet werden.
Erstellen Sie eine virtuelle Umgebung mit virtualenv.
virtualenv imagededup_dev
. .\imagededup_dev\Scripts\activate
Installieren Sie das imagededup-Paket.
pip install imagededup
Falls virtualenv nicht installiert ist, installieren Sie es.
pip install virtualenv
Falls Python und pip nicht installiert sind, installieren Sie sie. Wenn Sie unter Windows mit choco installiert haben, starten Sie die Konsole neu. Stellen Sie außerdem sicher, dass der Pfad gesetzt ist.
(Linux)
sudo apt update
sudo apt install python3-pip python3-dev
(Windows)
choco install python3 --version=3.7.6.20200110
(PowerShell, Pfad überprüfen)
Start C:\Windows\system32\rundll32.exe sysdm.cpl, EditEnvironmentVariables
Falls Choco unter Windows nicht installiert ist, installieren Sie es.
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
refreshenv
TensorFlow ist erforderlich, um Imagededup auszuführen. Falls es nicht installiert ist, installieren Sie es.
Unten ist Beispielcode.
Dies speichert ein Objekt mit Zuordnungen erkannter duplizierter Bilddateien in der duplicates-Variable.
if __name__ == '__main__':
from imagededup.methods import PHash
phasher = PHash()
encodings = phasher.encode_images(image_dir='C:/images/anime')
duplicates = phasher.find_duplicates(encoding_map=encodings)
Unten ist Kommandozeilen-Software, die ich für imagededup geschrieben habe. Es ist keine Lizenz angegeben, also bitte unterlassen Sie unbefugtes Posten in Blogs, GitHub oder anderen Online-Plattformen.
if __name__ == '__main__':
from imagededup.methods import PHash
import json
from pathlib import Path
from imagededup.utils import plot_duplicates
import fire
def main (type = "get_json", path = "C:\pg\ml\_images\hent") :
if ( type == "get_json" ) :
phasher = PHash()
encodings = phasher.encode_images(image_dir=path)
duplicates = phasher.find_duplicates(encoding_map=encodings)
Path('./tmp.json').write_text(json.dumps(duplicates))
if ( type == "test" ) :
duplicates = json.loads(Path('./tmp.json').read_text())
for key, value in duplicates.items() :
if ( value ) :
plot_duplicates(image_dir=path,
duplicate_map=duplicates,
filename=key)
if ( type == "get_txt" ) :
duplicates = json.loads(Path('./tmp.json').read_text())
content = ""
delete_values = []
for key, value in duplicates.items() :
if ( value and not key in delete_values ) :
for v in value:
content = content + v + "\n"
delete_values.append(v)
Path('./duplicates.txt').write_text(content)
print(fire.Fire(main))
Das obige Programm verwendet die folgenden Pakete. Installieren Sie mit folgendem Befehl.
pip install fire
Unten sind Verwendungsbeispiele für das obige Programm.
Bitte führen Sie die folgenden Befehle der Reihe nach aus.
Geben Sie --path als Pfad zu Ihrem Bildordner an.
python imagededup_dev.py --type get_json --path "B:\_images\animeimages" generiert eine JSON-Datei.
python imagededup_dev.py --type test --path "B:\_images\animeimages" führt einen Test basierend auf der JSON-Datei durch. Dies zeigt duplizierte Bilder an. Wenn es keine duplizierten Bilder gibt, wird nichts angezeigt.
python imagededup_dev.py --type get_txt --path "B:\_images\animeimages" erstellt eine Textdatei duplicates.txt, die Pfade zu duplizierten Dateien basierend auf der JSON-Datei auflistet.
Sie können Bilddateien basierend auf der erstellten Textdatei manuell löschen, aber Sie können sie auch als Batch mit Linux-Befehlen wie folgt löschen. (Hinweis: Der folgende Befehl löscht Dateien im aktuellen Verzeichnis/Ordner. Bitte recherchieren Sie die Verwendung sorgfältig vor der Nutzung.)
rm $( cat "/path/to/duplicates.txt" )
Wie man Linux unter Windows verwendet, finden Sie in unserem Blog. Suchen Sie in unserem Blog nach “wsl” oder “bash on windows”, um Anleitungen zu finden.