@maryaTurova

Как можно быстро произвести вычисления?

имеется база хешей (imagehash) картинок в файле json.
Преобразую их из txt в hex.
import imagehash
import json

with open('imagehash.json') as json_file:
    img_by_hash = json.load(json_file)

data_hash = dict()
for key in img_by_hash:
    data_hash[key]=[]
    for hashs in img_by_hash[key]:
        data_hash[key].append(imagehash.hex_to_hash(hex(int(hashs, 16))))

Далее в цикле ищу минимальную разницу хеша картинки.
h_img = imagehash.phash(Image.open('main.png'))
 count = 100

for key in data_hash:
    for hashs in data_hash[key]:
        score = h_img - hashs
        if score < count:
            count = score

По времени процедура очень затяжная, т.к. хешей в базе немало.
Существуют ли способы ускорить вычисления в цикле?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
1. быстрое, тупое и неэффективное решение
Посмотри в сторону multiprocessing, запусти дочерних процессов по числу ядер.
Обычный threading может не сработать из-за проблемы GIL (Global Interpreter Lock).

2. умное но сложное решение.
Imagehash, насколько я понимаю, вычисляет разность хэшей как расстояние Хэмминга.
Ответ на вот этот вопрос на stackoverflow даёт ряд ссылок на алгоритмы, занимающиеся похожей проблемой. Но придётся пошевелить мозгами, чтобы понять какой из них применим, и как его применить. Тут я уже не помощник.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы