#perceptual #difference #hash-values #hash #image

bin+lib image_hasher

A simple library that provides perceptual hashing and difference calculation for images

5 stable releases

2.0.0 Mar 11, 2024
1.2.0 Jun 2, 2023
1.1.2 Nov 26, 2022
1.1.0 Oct 20, 2022
1.0.0 Apr 2, 2022

#63 in Images

Download history 2604/week @ 2024-08-18 2302/week @ 2024-08-25 2504/week @ 2024-09-01 2288/week @ 2024-09-08 2533/week @ 2024-09-15 3049/week @ 2024-09-22 3000/week @ 2024-09-29 3520/week @ 2024-10-06 3515/week @ 2024-10-13 3240/week @ 2024-10-20 3563/week @ 2024-10-27 2566/week @ 2024-11-03 3160/week @ 2024-11-10 2993/week @ 2024-11-17 2993/week @ 2024-11-24 3178/week @ 2024-12-01

12,525 downloads per month
Used in 8 crates

MIT/Apache

59KB
1K SLoC

Image Hasher

A library for getting perceptual hash values of images.

Thanks to Dr. Neal Krawetz for the outlines of the Mean (aHash), Gradient (dHash), and DCT (pHash) perceptual hash algorithms:
http://www.hackerfactor.com/blog/?/archives/432-Looks-Like-It.html (Accessed August 2014)

Also provides an implementation of the Blockhash.io algorithm.

This crate can operate directly on buffers from the PistonDevelopers/image crate.

This is fork of img_hash library, but with updated dependencies.

I am not familiar with this library, so if you have a need/willingness to develop it, I can add you as a co-maintainer.

Usage

Documentation

Add image_hasher to your Cargo.toml:

image_hasher = "2.0.0"

Example program:

 use image_hasher::{HasherConfig, HashAlg};

 fn main() {
     let image1 = image::open("image1.png").unwrap();
     let image2 = image::open("image2.png").unwrap();
     
     let hasher = HasherConfig::new().to_hasher();

     let hash1 = hasher.hash_image(&image1);
     let hash2 = hasher.hash_image(&image2);
     
     println!("Image1 hash: {}", hash1.to_base64());
     println!("Image2 hash: {}", hash2.to_base64());
     
     println!("Hamming Distance: {}", hash1.dist(&hash2));
 }

Benchmarking

In order to build and test on Rust stable, the benchmarks have to be placed behind a feature gate. If you have Rust nightly installed and want to run benchmarks, use the following command:

cargo +nightly bench

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~5.5MB
~112K SLoC