es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo comparar valores hash en Python.

Quiero saber cómo comparar dos valores de hash, no la distancia de Hamming.
¿Hay alguna manera?

El objetivo final es determinar la clave del diccionario de Python que las imágenes similares pueden tener en común.

Por ejemplo:

import imagehash
img1_hash = imagehash.average_hash (Image.open ('data/image1.jpg'))
img2_hash = imagehash.average_hash (Image.open ('data/image2.jpg'))
img3_hash = imagehash.average_hash (Image.open ('data/image3.jpg'))
img4_hash = imagehash.average_hash (Image.open ('data/image4.jpg'))
print (img1_hash, img2_hash, img3_hash, img4_hash)
>>>> 81c38181bf8781ff, 81838181bf8781ff, 81838181bf8781ff, ff0000ff3f00e7ff

Resultado que quiero imprimir.

{valor común1: [81c38181bf8781ff, 81838181bf8781ff, 81838181bf8781ff], valor común2: [ff0000ff3f00e7ff]}

Intenté convertir la imagen en un valor hash y compararla,
pero por favor, háganme saber si hay alguna otra manera sin convertir en valor hash.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Python y hash, puedo ofrecer algunos conocimientos sobre cómo comparar valores hash sin usar la distancia de Hamming. Un método alternativo es utilizar la medida de similitud del coseno.

    La similitud del coseno es una medida de similitud entre dos vectores no nulos de un espacio de producto interior. Se define como el coseno del ángulo entre ellos, que es también el producto punto de los dos vectores dividido por el producto de sus magnitudes. En esencia, mide la similitud de la dirección de dos vectores, independientemente de su magnitud.

    Para aplicar esto a la comparación de valores hash, primero puedes convertir tus valores hash en vectores tratándolos como cadenas binarias y convirtiéndolos en arreglos de 0 y 1. Luego puedes calcular su similitud de coseno utilizando la biblioteca numpy en Python.

    Aquí hay un ejemplo de fragmento de código que muestra este método:

    import numpy as np
    
    hash1 = '81c38181bf8781ff'
    hash2 = '81838181bf8781ff'
    
    vec1 = np.array([int(digit) for digit in bin(int(hash1, 16))[2:].zfill(64)])  # convertir hash en vector binario
    vec2 = np.array([int(digit) for digit in bin(int(hash2, 16))[2:].zfill(64)])
    
    cos_sim = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))  # calcular la similitud de coseno
    
    print(cos_sim)  # salida: 0.984807753012208
    

    Al comparar la similitud de coseno de varios valores hash, puedes agrupar aquellos que tienen una puntuación de similitud alta e identificar valores comunes.

Comments are closed.