Escolar Documentos
Profissional Documentos
Cultura Documentos
um hash perceptivo baseado no algoritmo dHash de Neal Krawetz nesta entrada do blog "Hacker
Factor".
A biblioteca está no Python Package Index (PyPI) e funciona no Python 3 e no Python 2.7. Para
instalá-lo, inicie um prompt de comando, ative seu ambiente virtual se você estiver usando um e
digite:
O padrão da biblioteca é produzir um tamanho 8 dhash, mas você pode substituí-lo facilmente,
passando size = N como um argumento de palavra-chave para a maioria das funções. Por exemplo,
você pode produzir um dhash de 512 bits mais preciso (mas mais lento para trabalhar)
especificando size = 16.
Descobri que o dhash é ótimo para detectar perto de duplicatas (no Jetsetter, encontramos dupes
usando um dhash tamanho 8 com um delta máximo de 2 bits). Mas, devido à simplicidade do
algoritmo, não é bom encontrar imagens semelhantes ou imagens duplicadas, mas cortadas - você
precisará de uma impressão digital de imagem mais sofisticada, se quiser. No entanto, o dhash é
bom para encontrar duplicatas exatas e quase duplicatas, por exemplo, a mesma imagem com
iluminação ligeiramente alterada, alguns pixels de corte ou photoshopping muito leve.
Para usar a biblioteca dhash, você precisa da ligação do ImageMagick da varinha ou da biblioteca
Pillow (PIL) instalada. Escolha um e fique com ele - eles produzirão valores dhash ligeiramente
diferentes devido a diferenças nos algoritmos de conversão e redimensionamento da escala de cinza.
Se você tiver as duas bibliotecas instaladas, o dhash usará o wand por padrão. Para substituir isso e
forçar o uso do Pillow / PIL, chame dhash.force_pil () antes de usar a biblioteca.
import dhash
from wand.image import Image
import dhash
from PIL import Image
image = Image.open('dhash-test.jpg')
row, col = dhash.dhash_row_col(image)
print(dhash.format_hex(row, col))
Para produzir diretamente o valor do hash como um número inteiro de 128 bits, use
dhash_int (imagem, tamanho = N). Para formatar o valor do hash de várias maneiras, use as
funções format_ *:
Para calcular o número de bits diferente (distância de hamming) entre dois hashes, você pode
usar o get_num_bits_different(hash1, hash2) helper function:
You can also use dhash to generate the difference hash for a specific image from the command
line: