문제

C 럼 'template_phash'가있는 테이블 A가 있습니다.나는 400k의 이미지에서 생성 된 판을 저장합니다.

이제는 임의의 이미지를 가져 와서 해당 이미지에서 샤시를 생성합니다.

지금은 테이블 A에서 레코드를 얻을 수 있도록 쿼리 할 수있는 방법은 20입니다.

나는 SQL의 바이너리 문자열에서 해밍 거리,그러나 그것을 알아낼 수는 없었습니다.

나는 이것을 달성하기 위해 함수를 만들어야한다는 것을 알아 냈지만 어떻게?

내 샤시 모두 Bigint에 있습니다. 예 : 7641692061273169067

처럼 쿼리 할 수 있도록 기능을 만들 수 있도록 도와주세요.
SELECT product_id, HAMMING_DISTANCE(phash1,  phash2) as hd 
FROM A 
WHERE hd < 20 ORDER BY hd ASC;
.

도움이 되었습니까?

해결책

Hamming 거리가 두 해시 사이의 다른 비트의 카운트 일뿐입니다.첫 번째 XOR 두 해시는 이진 수의 수를 얻습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top