Pregunta

Tengo una tabla A que tiene una columna 'Template_PHASH'.Guardo el phash generado de las imágenes de 400k.

Ahora tomo una imagen al azar y genera un phash de esa imagen.

Ahora, ¿cómo puedo consultar para que pueda obtener el registro de la Tabla A a la que la diferencia de distancia de la hamming es menor que un valor de umbral, digamos 20.

He visto Hamming Distancia en cadenas binarias en SQL ,pero no pude resolverlo.

Creo que me di cuenta de que necesito hacer una función para lograr esto, pero ¿cómo?

Ambos de mi phash están en BIGINT, por ejemplo: 7641692061273169067

Por favor, ayúdame a hacer la función para que pueda consultar como

SELECT product_id, HAMMING_DISTANCE(phash1,  phash2) as hd 
FROM A 
WHERE hd < 20 ORDER BY hd ASC;

¿Fue útil?

Solución

Me di cuenta de que la distancia de la hamaming es solo la cuenta de diferentes bits entre los dos hashes.Primero XOR los dos hashes luego obtienen la cuenta de los binarios:

SELECT product_id, BIT_COUNT(phash1 ^ phash2) as hd from A ORDER BY hd ASC;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top