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

bin+lib visual-hash

一个简单的库,提供图像的感知哈希和差异计算

1 个稳定版本

3.3.2 2022年10月31日

#7 in #perceptual


用于 2 个 crate (通过 egui-screenshot-testing)

MIT/Apache

48KB
838

visual-hash

img_hash 的分支

一个获取图像感知哈希值的库。

感谢 Dr. Neal Krawetz 提供了均值(aHash)、梯度(dHash)和 DCT(pHash)感知哈希算法的轮廓。
http://www.hackerfactor.com/blog/?/archives/432-Looks-Like-It.html (2014年8月访问)

还提供了 Blockhash.io 算法 的实现。

此 crate 可以直接操作来自 PistonDevelopers/image crate 的缓冲区。

用法

文档

visual-hash 添加到您的 Cargo.toml

[dependencies.visual-hash]
version = "3.0"

示例程序

use clap::Parser;
use visual_hash::HasherConfig;

#[derive(Clone, Debug, Parser)]
struct Args {
    left: String,
    right: String,
}

fn main() {
    let args = Args::parse();

    if let Err(e) = run(&args) {
        eprintln!("{e}");
        std::process::exit(1);
    }
}

fn run(args: &Args) -> anyhow::Result<()> {
    let image1 = image::open(&args.left)?;
    let image2 = image::open(&args.right)?;

    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));

    Ok(())
}

基准测试

为了在 Rust 稳定版上构建和测试,基准测试必须放在功能门后面。如果您已安装 Rust 夜间版并想运行基准测试,请使用以下命令

cargo bench --features bench

许可证

根据以下任一许可证授权:

由您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在您的工作中的贡献,都将根据上述双许可方式授权,没有任何附加条款或条件。

依赖项

~14MB
~112K SLoC