簡體   English   中英

與Django的自定義比較(漢明距離)

[英]Custom comparisons with Django (hamming distance)

我有以下代碼,允許我查找具有相等(相等)的圖像,但是說我只想查找漢明距離小於一定數量的圖像,是否可以將其合並到Django查詢集或原始sql中? 我不想獲取所有內容並與python進行比較,因為這非常非常慢,並且我有很多圖像。

當前代碼:

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

這是使用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

不,您可以使用自定義“ WHERE”子句來制作Django查詢集,以使用hamming_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表示相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM