From cf309f71aed3301274c95029cb0e81e37218e560 Mon Sep 17 00:00:00 2001 From: simon987 <me@simon987.net> Date: Wed, 25 Dec 2019 11:09:02 -0500 Subject: [PATCH] add readme --- README.md | 41 ++++++++++++++++++++++++++++++++++ bench/README.md | 31 +++++++++++++++++++++++++ bench/results/ahash_large.png | Bin 0 -> 12549 bytes bench/results/ahash_small.png | Bin 0 -> 14175 bytes bench/results/dhash_large.png | Bin 0 -> 14393 bytes bench/results/dhash_small.png | Bin 0 -> 11138 bytes bench/results/phash_large.png | Bin 0 -> 14817 bytes bench/results/phash_small.png | Bin 0 -> 12191 bytes bench/results/whash_large.png | Bin 0 -> 15534 bytes bench/results/whash_small.png | Bin 0 -> 12881 bytes 10 files changed, 72 insertions(+) create mode 100644 bench/README.md create mode 100644 bench/results/ahash_large.png create mode 100644 bench/results/ahash_small.png create mode 100644 bench/results/dhash_large.png create mode 100644 bench/results/dhash_small.png create mode 100644 bench/results/phash_large.png create mode 100644 bench/results/phash_small.png create mode 100644 bench/results/whash_large.png create mode 100644 bench/results/whash_small.png diff --git a/README.md b/README.md index e69de29..52450ae 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,41 @@ +## libfastimagehash + +[](https://www.codefactor.io/repository/github/simon987/fastimagehash/overview/master) +[](https://github.com/simon987/fastimagehash/blob/master/LICENSE) + +*WIP: Not ready for production use!* + +`libfastimagehash` is a [imagehash](https://github.com/JohannesBuchner/imagehash/) +replacement for C/C++. + + +<p align="center"> + <img src="bench/results/phash_large.png"/> +</p> + +*[\*benchmarks](bench/)* + +### Example usage + +```C++ +#include "fastimagehash.h" + +int main() { + // TODO +} +``` + +### Build from source + +// TODO + +**Built with** +* [opencv](https://github.com/opencv) for image decoding & resizing +* [wavelib](https://github.com/rafat/wavelib) for wavelet decomposition in `whash` (With [additional CFLAGS](https://github.com/simon987/wavelib/commit/8d05b0b7321271b05365d3e89bfb0fd5a26d68a6)) +* [fftw3](http://fftw.org/) for DCT in `phash` +* [google/benchmark](https://github.com/google/benchmark) to measure performance + +**Disclaimer**: The methods used to compute the image hashes +are identical to the `imagehash` python library, however, due to +some slight differences in the way OpenCV vs Pillow images are resized, +the final image hashes are not always exactly the same. diff --git a/bench/README.md b/bench/README.md new file mode 100644 index 0000000..52e78ad --- /dev/null +++ b/bench/README.md @@ -0,0 +1,31 @@ + +To run the benchmarks: +```bash +python run.py +``` + +All benchmarks were ran with +``` +i7-7500U CPU @ 2.70GHz x 4 +gcc version 9.2.0 +Python 3.8.0 +imagehash 4.0 +fastimagehash v0.1 +``` + +### Results +**phash** + + + +**dhash** + + + +**whash** + + + +**ahash** + + diff --git a/bench/results/ahash_large.png b/bench/results/ahash_large.png new file mode 100644 index 0000000000000000000000000000000000000000..7265a02b275d42bacd46de1894622e184b11ae8a GIT binary patch literal 12549 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 literal 0 HcmV?d00001 diff --git a/bench/results/ahash_small.png b/bench/results/ahash_small.png new file mode 100644 index 0000000000000000000000000000000000000000..2799c31657f312f72db2bcd1bae7ed5ac3773d7a GIT binary patch literal 14175 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%0A)er!hg37v@l(Nm<*cYPGkNcCji#lSW%hYZkOAx z{Wzg%zK<TI(=8MYJE--Kxn_=6EC9bG^O@w%pPlhftNDV!e7?oV{&)jATjxg1h#Cz2 zCfR!S@i4G8+Oy#{`;ZdOql{-o3V0joFMfcw&wBMx@pHuGuO<MifizTg?qHQ4y!d~@ C`<KoD literal 0 HcmV?d00001 diff --git a/bench/results/dhash_large.png b/bench/results/dhash_large.png new file mode 100644 index 0000000000000000000000000000000000000000..2bacd25f976661065d679c27247d6864f91818ce GIT binary patch literal 14393 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 HLCF6DC~4Yq literal 0 HcmV?d00001 diff --git a/bench/results/dhash_small.png b/bench/results/dhash_small.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1b1739202ae9a3360382e0f6340480e3cfdded GIT binary patch literal 11138 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 literal 0 HcmV?d00001 diff --git a/bench/results/phash_large.png b/bench/results/phash_large.png new file mode 100644 index 0000000000000000000000000000000000000000..6b546d8768c58fd83ad44c1eb94492ca549c068f GIT binary patch literal 14817 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 G7yk=Ysl-|U literal 0 HcmV?d00001 diff --git a/bench/results/phash_small.png b/bench/results/phash_small.png new file mode 100644 index 0000000000000000000000000000000000000000..ec02dabf5c275280985f3c06fd41e01682f4b617 GIT binary patch literal 12191 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 literal 0 HcmV?d00001 diff --git a/bench/results/whash_large.png b/bench/results/whash_large.png new file mode 100644 index 0000000000000000000000000000000000000000..9e184df3cfae910aad52dd5ecb8e411991cd15aa GIT binary patch literal 15534 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 PB#pX?_8qj+gJ=H-F>)WN literal 0 HcmV?d00001 diff --git a/bench/results/whash_small.png b/bench/results/whash_small.png new file mode 100644 index 0000000000000000000000000000000000000000..f1eabc525111d5b002c02db48286655f6c2154a0 GIT binary patch literal 12881 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 GfBYZSW6$CM literal 0 HcmV?d00001