由于欧氏距离,许多图像被错误地识别为相同
As a result of the Euclidean distance many images are mistakenly identified as identical
抱歉我的英语不好,我有一个包含照片散列的小型数据库,
当我尝试查找与以下相似的照片时:
为其计算了以下哈希值:“0f3f2764ecc482c2”,使用方法 average_hash()
imagehash.average_hash(Image.open(imagePath))
系统发现大量碰撞,以下是被识别为完全相同的照片示例:
我存储照片哈希的 table:
CREATE TABLE IF NOT EXISTS photos(id_photo BIGINT PRIMARY KEY, photo_hash TEXT, FOREIGN KEY (id_photo) REFERENCES users (id));
添加哈希:
cur.execute('''INSERT INTO photos(id_photo, photo_hash) VALUES(%s, %s)''', id, str(result_image_recognition['photo_hash'])])
SQL 计算我的散列和存储的散列之间的欧氏距离的查询:
SELECT id_photo, BIT_COUNT(photo_hash ^ '0f3f2764ecc482c2') FROM photos;
照片table包含7889张照片,其中959张被本次查询错误判定为完全相同(欧氏距离为0)。大约一个星期我无法解决这个问题请有人帮助我。
在进行异或运算之前,您需要将十六进制字符串转换为整数
SELECT id_photo, BIT_COUNT(CONV(photo_hash, 16, 10) ^ CONV('0f3f2764ecc482c2', 16, 10)) FROM photos;
因为所有第一个字符不是1-9的字符串都被转换为0。
mysql> select 'abc' ^ 'def'; # -> 0
mysql> select CONV('abc', 16, 10) ^ CONV('def', 16, 10); # -> 1875
抱歉我的英语不好,我有一个包含照片散列的小型数据库, 当我尝试查找与以下相似的照片时:
为其计算了以下哈希值:“0f3f2764ecc482c2”,使用方法 average_hash()
imagehash.average_hash(Image.open(imagePath))
系统发现大量碰撞,以下是被识别为完全相同的照片示例:
我存储照片哈希的 table:
CREATE TABLE IF NOT EXISTS photos(id_photo BIGINT PRIMARY KEY, photo_hash TEXT, FOREIGN KEY (id_photo) REFERENCES users (id));
添加哈希:
cur.execute('''INSERT INTO photos(id_photo, photo_hash) VALUES(%s, %s)''', id, str(result_image_recognition['photo_hash'])])
SQL 计算我的散列和存储的散列之间的欧氏距离的查询:
SELECT id_photo, BIT_COUNT(photo_hash ^ '0f3f2764ecc482c2') FROM photos;
照片table包含7889张照片,其中959张被本次查询错误判定为完全相同(欧氏距离为0)。大约一个星期我无法解决这个问题请有人帮助我。
在进行异或运算之前,您需要将十六进制字符串转换为整数
SELECT id_photo, BIT_COUNT(CONV(photo_hash, 16, 10) ^ CONV('0f3f2764ecc482c2', 16, 10)) FROM photos;
因为所有第一个字符不是1-9的字符串都被转换为0。
mysql> select 'abc' ^ 'def'; # -> 0
mysql> select CONV('abc', 16, 10) ^ CONV('def', 16, 10); # -> 1875