1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
# 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](http://blockhash.io).
This crate can operate directly on buffers from the [PistonDevelopers/image][1] crate.
[1]: https://github.com/PistonDevelopers/image
This is fork of [img_hash](https://github.com/abonander/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](https://docs.rs/img_hash)
Add `image_hasher` to your `Cargo.toml`:
```
image_hasher = "2.0.0"
```
Example program:
```rust
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
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
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.
|