imeq-rs aims to quickly compare two images to see if they are the same image.
cargo install imeq
USAGE:
imeq <IMAGE_1> <IMAGE_2>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
ARGS:
<IMAGE_1> Sets the first image to use
<IMAGE_2> Sets the second image to use
The below benchmarks have been done on a 2020 M1 Mac Mini with 16gb of ram and 256gb ssd, hyperfine -w 3
is used and that command is then ran 3 times (outside of -w 3) and the result of the third run has been noted.
baseline.jpeg
and baseline_by_another_name.jpeg
should be identical, apart from the name.
flipped.jpeg
has been flipped horizontally.
modified.jpeg
has been modified so that the very last (bottom right) pixel is red.
Time (mean ± σ): 1.1 ms ± 0.3 ms [User: 0.6 ms, System: 0.3 ms]
Range (min … max): 0.8 ms … 2.6 ms 857 runs
Time (mean ± σ): 5.5 ms ± 0.4 ms [User: 7.4 ms, System: 2.3 ms]
Range (min … max): 5.1 ms … 7.5 ms 308 runs
Time (mean ± σ): 93.7 ms ± 3.4 ms [User: 443.6 ms, System: 54.2 ms]
Range (min … max): 90.4 ms … 102.8 ms 31 runs
Time (mean ± σ): 113.1 ms ± 0.9 ms [User: 471.1 ms, System: 53.4 ms]
Range (min … max): 111.4 ms … 115.5 ms 26 runs
Add the following line to your Cargo.toml file:
imeq = "0.1.0"
or if you have cargo edit
installed.
cargo add imeq
let image_1 = "images/baseline.jpeg".to_string();
let image_2 = "images/modified.jpeg".to_string();
let images_match = imeq::Compare::new(image_1, image_2)
.enable_check_images_have_same_path()
.enable_check_image_hashes_match()
.enable_check_images_dimensions_match()
.enable_check_images_pixels_match()
.are_match();
if images_match {
println!("Images are a match");
} else {
println!("Images are not a match");
}
Goat Image by Florian van Duyn
The MIT License (MIT). Please see License File for more information.