0

У меня есть следующий код, который позволяет мне находить образы равных (одинаковых), но, говорят, я хотел просто найти изображения с расстоянием от помех под определенным номером, в django querysets или raw 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 

Нет, вы можете сделать Джанго QuerySet с обычным предложением WHERE, чтобы использовать помехи _text function

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 означает идентичность.

Смежные вопросы