哈希1000个图像文件尽可能快(2000x2000加分辨率)(Python)



我的电脑上有一个文件夹,里面有大约几千个RGB 8位每通道图像文件,分辨率在2000x2000到8000x8000之间(所以大多数都非常大)。

我想为每个图像存储一些小值,例如哈希,这样我就有了一个值,可以在将来轻松比较,看看是否有图像文件发生了更改此值的计算有三个主要要求:

  1. 此值的计算需要快速
  2. 如果图像文件的任何部分发生变化,即使是最少量的变化,即使只有一个像素发生变化,结果也需要有所不同。(散列不应考虑文件名)
  3. 冲突基本上不应该发生

我有很多方法可以做到这一点,比如sha1、md5等,但这里真正的目标是速度,实际上只是任何非常快速的方法来识别图像是否发生了任何更改。

您将如何在Python中实现这一点?你有没有推荐一种特定的哈希算法来提高速度?或者你能想出一种不同的方法来实现我的三个目标吗?

  1. 此值的计算需要快速
  2. 如果图像文件的任何部分发生变化,即使是最少量的变化,即使只有一个像素发生变化,结果也需要有所不同。(散列不应考虑文件名)
  3. 冲突基本上不应该发生
  1. 大文件的哈希计算(可能因哈希算法而异)需要时间,如果需要快速,请尝试为您的任务选择高效的哈希算法。你可以找到关于它们之间比较的信息。但是,在检查哈希之前,您可以通过检查其他内容来优化算法
  2. 如果您决定使用哈希,情况就是这样。即使图像的一小部分发生了更改,哈希值也会发生更改
  3. 碰撞可能(非常罕见,但不是never)发生。这就是hash algorithms的本质

示例到第1个(优化算法),

  • 检查文件大小
  • 如果大小相等,请检查CRC
  • 如果CRC相等,则计算并检查哈希。(两者都需要传递文件)

可选地,在检查哈希之前,您可以部分计算和比较哈希,而不是所有文件。

如果你的大多数文件更有可能不同,那么在计算哈希之前检查其他内容可能会更快。

但是,如果你的大多数文件都是相同的,那么哈希之前的步骤只会消耗更多的时间。因为您已经需要计算大多数文件的哈希了。

所以,试着根据您的上下文来实现最有效的算法。

最新更新