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
+
+[![CodeFactor](https://www.codefactor.io/repository/github/simon987/fastimagehash/badge/master)](https://www.codefactor.io/repository/github/simon987/fastimagehash/overview/master)
+[![GitHub license](https://img.shields.io/github/license/simon987/fastimagehash)](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**
+![phash_s](results/phash_small.png)
+![phash_l](results/phash_large.png)
+
+**dhash**
+![dhash_s](results/dhash_small.png)
+![dhash_l](results/dhash_large.png)
+
+**whash**
+![whash_s](results/whash_small.png)
+![whash_l](results/whash_large.png)
+
+**ahash**
+![ahash_s](results/ahash_small.png)
+![ahash_l](results/ahash_large.png)
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