I wanna get the image hash based on pixels value. I reached this article: https://fullstackml.com/wavelet-image-hash-in-python-3504fdd282b5
Then I give a try:
1. Directly translate the code from python to C#. Failed because pywt.wavedec2 is too complicated and the search result are all about Matlab -_- see csharp/Vision/Tools/ImageHelper.cs 2. Use IronPython. Failed because PIL library has many .pyd files (_imaging) which are not supported by IronPython. see csharp/Vision/Runtime/Python.cs 3. Use Process and commandline, redirect the output. Worked. see csharp/Vision/Runtime/PythonCommand.cs 4. If considering deployment, ImageHash can be a service with python backend. The simplest way. e.g. The media node has a copy: [Get hash of an image](http://nodes.chuci.info/media.html)
Following is the original Readme -------------A image hashing library written in Python. ImageHash supports:
- average hashing (aHash)
- perception hashing (pHash)
- difference hashing (dHash)
- wavelet hashing (wHash)
Based on PIL/Pillow Image, numpy and scipy.fftpack (for pHash) Easy installation through pypi.
>>> from PIL import Image
>>> import imagehash
>>> hash = imagehash.average_hash(Image.open('test.png'))
>>> print(hash)
d879f8f89b1bbf
>>> otherhash = imagehash.average_hash(Image.open('other.bmp'))
>>> print(otherhash)
ffff3720200ffff
>>> print(hash == otherhash)
False
>>> print(hash - otherhash)
36
The demo script find_similar_images illustrates how to find similar images in a directory.
Source hosted at github: https://github.com/JohannesBuchner/imagehash
- 3.0: dhash had a bug: It computed pixel differences vertically, not horizontally.
I modified it to follow dHash. The old function is available as dhash_vertical.
- 2.0: added whash
- 1.0: initial ahash, dhash, phash implementations.