Быстрое хэширование 1000 файлов изображений (разрешение 2000x2000 плюс) (Python) - PullRequest
0 голосов
/ 02 января 2019

У меня есть папка с несколькими тысячами RGB-файлов с 8-битовым каналом на моем компьютере, разрешение которых варьируется от 2000x2000 до 8000x8000 (поэтому большинство из них очень большие).

Я хотел бы сохранить небольшое значение, такое как хэш, для каждого изображения, чтобы в будущем у меня было значение, с которым можно легко сравнить, чтобы увидеть, не изменились ли какие-либо файлы изображений. Существует три основных требования ввычисление этого значения:

  1. Расчет этого значения должен быть быстрым
  2. Результат должен отличаться, если ЛЮБАЯ часть файла изображения изменяется, даже в малейшей степени, даже если меняется только один пиксель.(Хеш не должен принимать во внимание имя файла).
  3. Столкновения в принципе никогда не должны происходить.

Есть много способов, которыми я мог бы воспользоваться, например, sha1, md5,и т. д., но настоящая цель здесь - это скорость, а на самом деле просто очень быстрый способ определить, было ли какое-либо изменение в изображении.

Как бы вы достигли этого в Python?Какой конкретный алгоритм хеширования вы рекомендуете для скорости?Или вы можете придумать другой способ для достижения моих трех целей в целом?

1 Ответ

0 голосов
/ 02 января 2019
  1. Расчет этого значения должен быть быстрым
  2. Результат должен отличаться, если ЛЮБАЯ часть файла изображения изменяется, даже в малейшей степени, даже если всего один пиксельизменения.(Хеш не должен учитывать имя файла).
  3. Коллизии в принципе никогда не должны происходить.
  1. Расчет хеша (может отличаться в зависимости от алгоритма хеширования)большие файлы занимают время, если это нужно быстро, попробуйте выбрать эффективный алгоритм хеширования для вашей задачи.Вы можете найти информацию о том, как они сравниваются друг с другом.Но, прежде чем проверять хеш, вы можете оптимизировать свой алгоритм, проверяя что-то еще.
  2. Если вы решили использовать хеширование, это именно тот случай.Значение хеш-функции будет изменено, даже если изменилась небольшая часть изображения.
  3. Могут происходить коллизии (очень редко, но не never).Такова природа hash algorithms

Пример 1-го (алгоритм оптимизации),

  • Проверьте размер файла.
  • Если размеры равны, проверьтеCRC
  • Если CRC равны, рассчитайте и проверьте хеш.(оба требуют передачи файла)

По желанию, перед проверкой хэшей вы можете частично вычислять и сравнивать хэши вместо всех файлов.

Если большинство ваших файлов будет большескорее всего, другой, тогда проверка других вещей перед вычислением хеша, вероятно, будет быстрее.

Но если большинство ваших файлов будут идентичны, то шаги до хеширования просто потребуют больше времени.Потому что вам уже придется вычислять хеш для большинства файлов.

Поэтому постарайтесь реализовать наиболее эффективный алгоритм в соответствии с вашим контекстом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...