2015-10-04 72 views
0

我有以下代碼,可以讓我找到相等的圖像(相同),但是說我只想找到具有特定數目的海明距離的圖像,是否可以合併到Django查詢集,或原始的SQL不知何故?我不想獲取所有內容並與python進行比較,因爲這非常慢,而且我有許多圖像。與Django(海明距離)的自定義比較

當前代碼:

def duplicates(request): 
    duplicate_images = [] 
    images = Image.objects.all() 
    for image in images: 
     duplicates = Image.objects.filter(hash=image.hash).exclude(pk=image.pk) 
     for duplicate in duplicates: 
      duplicate_images.append([image, duplicate]) 
     if len(duplicate_images) > 1000: 
      break 
+0

我已經在我的數據庫中有哈希值,並且實現一個比較漢明距離的函數很容易,這不是我的問題,而是謝謝。 – davegri

回答

0

這裏是如何實現這一點使用一個Postgres擴展:

https://github.com/eulerto/pg_similarity

安裝:

$ git clone https://github.com/eulerto/pg_similarity.git 
$ cd pg_similarity 
$ USE_PGXS=1 make 
$ USE_PGXS=1 make install 
$ psql mydb 
psql (9.3.5) 
Type "help" for help. 

mydb=# CREATE EXTENSION pg_similarity; 
CREATE EXTENSION 

不,你可以做一個Django的查詢集用自定義的「WHERE」子句來使用漢明_text功能

image = Image.objects.get(pk=1252) # the image you want to compare to 
similar = Image.objects.extra(where=['hamming_text(hash,%s)>=0.88'], 
           params=[image.hash]) 

和瞧,它的工作原理!

注意:此處的漢明距離會自動標準化,因此0表示完全不同,1表示完全相同。