mysql расстояние Хэмминга между двумя phash
У меня есть таблица A, которая имеет столбец 'template_phash'. Я храню phash, созданный из 400K изображений.
теперь я беру случайное изображение и генерирую phash из этого изображения.
теперь, как мне запросить, чтобы я мог получить запись из таблицы A, разница в расстоянии Хэмминга меньше порогового значения, скажем, 20.
Я видел расстояние Хэмминга на двоичных строках в SQL, но не мог понять.
Я думаю, что я понял из того, что мне нужно сделать функцию для достижения этого, но как?
оба моих phash находятся в BigInt, например: 7641692061273169067
пожалуйста, помогите мне сделать функцию, чтобы я мог запросить как
SELECT product_id, HAMMING_DISTANCE(phash1, phash2) as hd
FROM A
WHERE hd < 20 ORDER BY hd ASC;
1 ответов
Я понял, что расстояние Хэмминга-это просто количество разных битов между двумя хэшами. Сначала xor два хэша, а затем получить количество двоичных:
SELECT product_id, BIT_COUNT(phash1 ^ phash2) as hd from A ORDER BY hd ASC;