ForHosting KIT · Imágenes

Detectar imágenes duplicadas por hash perceptual (pHash)

Si usted ya calcula hashes perceptuales para sus imágenes, este endpoint convierte esa lista plana en grupos de duplicados.

● BetaGratis · en su navegador
Úselo desde WebAPIEmailTelegramApp pronto

Envíe una entrada por imagen — un nombre y su hash, como cadena hexadecimal o como cadena de bits 0/1 — junto con una distancia de Hamming máxima en bits. Cada par de hashes dentro de esa distancia queda vinculado, y los pares vinculados se fusionan en grupos conexos, de modo que una cadena de casi duplicados colapsa en un solo clúster en lugar de pares solapados. El resultado enumera cada grupo con sus miembros, las distancias internas entre pares y la distancia máxima dentro del grupo, además de los totales: cuántas imágenes son duplicadas y cuántas permanecen únicas. No se sube nada: los hashes que usted ya tiene son toda la entrada que necesita.

De una lista de hashes a grupos de duplicados

Un hash perceptual, como un pHash de 64 bits, codifica el aspecto de una imagen, de modo que dos fotos que solo difieren en compresión, tamaño o una marca de agua producen hashes que difieren en apenas unos bits. Comparar esos hashes por pares es fácil; la parte molesta es lo que viene después. La imagen A coincide con B, y B coincide con C, pero A no llega a coincidir con C: ¿forman un solo conjunto de duplicados o dos? Esta capacidad resuelve esa cuestión de la forma estándar: trata cada imagen como un nodo, traza una arista entre dos hashes cualquiera cuya distancia de Hamming sea como máximo el umbral que usted elija, y reporta los componentes conexos como los grupos de duplicados. Usted obtiene una entrada por grupo con los nombres de los miembros, cada par dentro del umbral con su distancia exacta, y la distancia máxima dentro del grupo, de modo que pueda auditar por qué dos imágenes terminaron juntas. Como el agrupamiento es por transitividad, una cadena de regrabaciones que deriva un bit cada vez sigue cayendo en un único clúster, que es exactamente como se espera que se comporte la detección de casi duplicados en bibliotecas de fotos reales.

Cómo elegir el umbral y el formato del hash

El umbral es una distancia de Hamming máxima en bits y su valor predeterminado es 5, un punto de partida habitual para hashes de 64 bits: las imágenes idénticas puntúan 0, y las recodificaciones visualmente indistinguibles suelen quedar por debajo de 5. Bájelo hacia 0 cuando solo quiera coincidencias exactas o casi exactas, y súbalo con cautela cuando su pipeline redimensione de forma agresiva o recorte bordes, porque cada bit adicional de tolerancia multiplica la probabilidad de falsos positivos en colecciones grandes. Los hashes se aceptan en dos formatos: cadenas hexadecimales, decodificadas a cuatro bits por carácter, o cadenas literales de bits 0/1. La única regla estricta es la coherencia: todos los hashes de una solicitud deben usar el mismo formato y decodificar a la misma longitud en bits; de lo contrario, una distancia entre ellos carecería de sentido y la solicitud se rechaza con un error claro. Un umbral negativo también se rechaza como entrada no válida. Puede calcular los hashes con la capacidad hermana image.phash, que produce exactamente las cadenas hexadecimales de 16 caracteres que este endpoint espera.

Salida determinista que puede comparar y almacenar

La respuesta está diseñada para guardarse junto a su catálogo y compararse a lo largo del tiempo. Los grupos se ordenan según la posición de su primer miembro en su lista de entrada, los miembros conservan el orden de entrada y los pares internos se listan con ambos nombres y la distancia exacta, de modo que dos ejecuciones sobre la misma lista producen una salida idéntica byte a byte y las regresiones aparecen como diffs limpios. Junto a los grupos obtiene los conteos que necesitan los paneles: total de imágenes procesadas, longitud en bits de los hashes, número de grupos de duplicados, cuántas imágenes caen dentro de algún grupo y cuántas permanecen únicas. No intervienen ni azar, ni reloj ni red: la misma entrada siempre produce la misma respuesta, en la API y en el ejecutor gratuito del navegador de esta página, que ejecuta exactamente el mismo código. Esto hace que sea seguro usarlo en pipelines de CI que hacen fallar una compilación cuando se cuelan nuevos duplicados en un repositorio de recursos, y en trabajos programados de limpieza que envían por correo un informe de deduplicación.

Deduplicar un catálogo de productos

Introduzca los pHashes de todas las fotos de producto y fusione los listados que reutilizan la misma imagen con nombres de archivo o tamaños distintos.

Auditar una biblioteca de fotos de stock

Encuentre tomas casi idénticas de la misma sesión para que los revisores conserven una sola representante en lugar de doce reexportaciones.

Proteger un pipeline de subidas

Rechace o marque una subida nueva cuando su hash cae dentro del umbral de una imagen que usted ya almacena.

¿Cuánto cuesta?

$0.002 por solicitud. También es gratis ejecutarlo en su navegador en esta página con el mismo código.

¿Tengo que subir las imágenes?

No. Usted solo envía los hashes perceptuales que ya calculó, más un nombre por imagen. Los archivos binarios nunca salen de su lado.

¿Qué formatos de hash se aceptan?

Cadenas hexadecimales (cuatro bits por carácter, sin distinción entre mayúsculas y minúsculas) y cadenas literales de bits 0/1. Todos los hashes de una solicitud deben compartir el mismo formato y la misma longitud en bits.

¿Qué umbral debería usar?

El valor predeterminado es 5 bits, un punto de partida razonable para pHashes de 64 bits. Use 0 si solo quiere coincidencias exactas y súbalo con cuidado: los valores más altos atrapan más regrabaciones, pero también más falsos positivos.

¿Cómo se forman los grupos cuando las coincidencias se solapan?

Por componentes conexos: si A coincide con B y B coincide con C dentro del umbral, las tres caen en un mismo grupo aunque A y C estén más separadas que el umbral. Las distancias exactas entre pares se listan para que usted pueda auditar cada enlace.

¿Qué ocurre con un umbral negativo?

La solicitud se rechaza como entrada no válida, ya que una distancia de Hamming no puede ser negativa, y no se le cobra nada.

Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.

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

¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.

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"
  }
}

La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.

Por solicitud$0.002

Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.

max_items5000
HTTPCódigoSignificado
401unauthorizedAPI key ausente o inválida.
402insufficient_balanceEl saldo no cubre el precio de la tarea.
404unknown_typeEl tipo de tarea no existe.
429rate_limitedDemasiadas peticiones. Use el webhook en vez de sondear.

Ver la documentación completa del KIT →