ForHosting KIT · Bilder bearbeiten & analysieren

Doppelte Bilder per Hash erkennen – Duplikatgruppen per Hamming-Distanz

Wenn Sie bereits perceptual hashes für Ihre Bilder berechnen, verwandelt dieser Endpunkt diese flache Liste in Duplikatgruppen.

● BetaKostenlos · im Browser
Nutzen Sie es über WebAPIE-MailTelegramApp bald

Sie senden einen Eintrag pro Bild – einen Namen und dessen Hash, als Hexadezimalzeichenkette oder als 0/1-Bitstring – sowie eine maximale Hamming-Distanz in Bits. Jedes Hash-Paar innerhalb dieser Distanz wird verknüpft, und die verknüpften Paare werden zu zusammenhängenden Gruppen zusammengeführt, sodass eine Kette nahezu identischer Bilder zu einem einzigen Cluster zusammenfällt statt zu überlappenden Paaren. Das Ergebnis listet jede Gruppe mit ihren Mitgliedern, den internen paarweisen Distanzen und der größten Distanz innerhalb der Gruppe, zusammen mit Gesamtwerten: wie viele Bilder Duplikate sind und wie viele einzigartig bleiben. Es wird nichts hochgeladen: Die Hashes, die Sie bereits haben, sind die gesamte Eingabe, die benötigt wird.

Von einer Hash-Liste zu Duplikatgruppen

Ein perceptual hash wie ein 64-Bit-pHash kodiert, wie ein Bild aussieht, sodass zwei Fotos, die sich nur in Kompression, Größe oder einem Wasserzeichen unterscheiden, Hashes erzeugen, die sich nur in wenigen Bits unterscheiden. Diese Hashes paarweise zu vergleichen ist einfach; der lästige Teil ist das, was danach kommt. Bild A passt zu B, und B passt zu C, aber A passt nicht ganz zu C – ist das ein Duplikat-Set oder zwei? Diese Fähigkeit beantwortet diese Frage auf die übliche Weise: Sie behandelt jedes Bild als Knoten, zieht eine Kante zwischen zwei Hashes, deren Hamming-Distanz höchstens dem von Ihnen gewählten Schwellenwert entspricht, und meldet die zusammenhängenden Komponenten als Duplikatgruppen. Sie erhalten einen Eintrag pro Gruppe mit den Mitgliedsnamen, jedem Paar innerhalb des Schwellenwerts samt exakter Distanz und der größten Distanz innerhalb der Gruppe, sodass Sie nachvollziehen können, warum zwei Bilder zusammengehören. Da die Gruppierung transitiv erfolgt, landet eine Speicherkette, die sich Bit für Bit verändert, dennoch in einem einzigen Cluster – genau so, wie sich die Erkennung nahezu identischer Duplikate in echten Fotobibliotheken verhalten soll.

Schwellenwert und Hash-Format wählen

Der Schwellenwert ist eine maximale Hamming-Distanz in Bits und liegt standardmäßig bei 5, ein gängiger Ausgangspunkt für 64-Bit-Hashes: Identische Bilder erzielen 0, und visuell nicht unterscheidbare Neukodierungen bleiben meist unter 5. Senken Sie ihn Richtung 0, wenn Sie nur exakte oder nahezu exakte Treffer wünschen, und erhöhen Sie ihn vorsichtig, wenn Ihre Pipeline stark skaliert oder Ränder beschneidet, denn jedes zusätzliche Bit Toleranz vervielfacht das Risiko falscher Treffer in großen Sammlungen. Hashes werden in zwei Formaten akzeptiert: als Hexadezimalzeichenketten, die mit vier Bits pro Zeichen dekodiert werden, oder als wörtliche 0/1-Bitstrings. Die einzige harte Regel ist Konsistenz – jeder Hash in einer Anfrage muss dasselbe Format verwenden und auf dieselbe Bitlänge dekodieren, andernfalls wäre eine Distanz zwischen ihnen bedeutungslos und die Anfrage wird mit einer klaren Fehlermeldung abgelehnt. Ein negativer Schwellenwert wird ebenfalls als ungültige Eingabe abgelehnt. Die Hashes selbst können Sie mit der Schwester-Fähigkeit image.phash berechnen, die genau die 16-stelligen Hexadezimalzeichenketten erzeugt, die dieser Endpunkt erwartet.

Deterministische Ausgabe, die Sie vergleichen und speichern können

Die Antwort ist darauf ausgelegt, neben Ihrem Katalog gespeichert und über die Zeit verglichen zu werden. Gruppen sind nach der Position ihres frühesten Mitglieds in Ihrer Eingabeliste sortiert, Mitglieder behalten die Eingabereihenfolge, und die internen Paare werden mit beiden Namen und der exakten Distanz aufgeführt, sodass zwei Durchläufe über dieselbe Liste eine byteidentische Ausgabe erzeugen und Regressionen als saubere Diffs erscheinen. Neben den Gruppen erhalten Sie die Zähler, die Dashboards benötigen: insgesamt verarbeitete Bilder, die Bitlänge der Hashes, die Anzahl der Duplikatgruppen, wie viele Bilder in einer Gruppe liegen und wie viele einzigartig bleiben. Es gibt keinen Zufall, keine Uhr und kein Netzwerk: Dieselbe Eingabe liefert stets dieselbe Antwort, in der API und im kostenlosen Browser-Runner auf dieser Seite, der exakt denselben Code ausführt. Damit eignet sie sich sicher für CI-Pipelines, die einen Build scheitern lassen, wenn neue Duplikate in ein Asset-Repository rutschen, und für geplante Bereinigungsjobs, die einen Deduplizierungsbericht per E-Mail versenden.

Einen Produktkatalog deduplizieren

Geben Sie die pHashes jedes Produktfotos ein und führen Sie Einträge zusammen, die dasselbe Bild unter verschiedenen Dateinamen oder Größen verwenden.

Eine Stockfoto-Bibliothek prüfen

Finden Sie nahezu identische Aufnahmen aus derselben Session, damit Prüfer einen Vertreter behalten statt zwölf Neu-Exporte.

Eine Upload-Pipeline absichern

Weisen Sie einen neuen Upload zurück oder markieren Sie ihn, wenn sein Hash innerhalb des Schwellenwerts eines bereits gespeicherten Bildes liegt.

Was kostet das?

$0.002 pro Anfrage. Auf dieser Seite können Sie es außerdem kostenlos in Ihrem Browser mit demselben Code ausführen.

Lade ich die Bilder selbst hoch?

Nein. Sie senden nur die perceptual hashes, die Sie bereits berechnet haben, plus einen Namen pro Bild. Die Binärdateien verlassen Ihre Seite nie.

Welche Hash-Formate werden akzeptiert?

Hexadezimalzeichenketten (vier Bits pro Zeichen, Groß- und Kleinschreibung egal) und wörtliche 0/1-Bitstrings. Alle Hashes in einer Anfrage müssen dasselbe Format und dieselbe Bitlänge haben.

Welchen Schwellenwert sollte ich verwenden?

Der Standardwert ist 5 Bits, ein sinnvoller Ausgangspunkt für 64-Bit-pHashes. Verwenden Sie 0 nur für exakte Treffer und erhöhen Sie den Wert vorsichtig: Höhere Werte finden mehr Neu-Speicherungen, aber auch mehr falsche Treffer.

Wie entstehen Gruppen, wenn sich Treffer überschneiden?

Über zusammenhängende Komponenten: Passt A zu B und B zu C innerhalb des Schwellenwerts, landen alle drei in einer Gruppe, selbst wenn A und C weiter auseinanderliegen als der Schwellenwert. Die exakten paarweisen Distanzen werden aufgelistet, damit Sie jede Verknüpfung nachvollziehen können.

Was passiert bei einem negativen Schwellenwert?

Die Anfrage wird als ungültige Eingabe abgelehnt, da eine Hamming-Distanz nicht negativ sein kann, und es wird Ihnen nichts berechnet.

Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.

POSThttps://api.kit.forhosting.com/image/duplicate-detect-hash

Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.

curl -X POST https://api.kit.forhosting.com/image/duplicate-detect-hash \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"images":[{"name":"hero-a.jpg","hash":"ff8f8383c3c3c3ff"},{"name":"hero-b.jpg","hash":"ff8f8383c3c3c3f7"},{"name":"hero-c.jpg","hash":"ff8f8383c3c3c3f3"},{"name":"logo.png","hash":"007c7c7c7c7c7c00"}]}'
{
  "images": [
    {
      "name": "hero-a.jpg",
      "hash": "ff8f8383c3c3c3ff"
    },
    {
      "name": "hero-b.jpg",
      "hash": "ff8f8383c3c3c3f7"
    },
    {
      "name": "hero-c.jpg",
      "hash": "ff8f8383c3c3c3f3"
    },
    {
      "name": "logo.png",
      "hash": "007c7c7c7c7c7c00"
    }
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "image.duplicate_detect_hash",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.

pro Anfrage$0.002

Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.

max_items5000
HTTPCodeBedeutung
401unauthorizedDer API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer).
402insufficient_balanceIhr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht.
404unknown_typeUnbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog.
429rate_limitedZu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt.

Vollständige KIT-Dokumentation lesen →