3 ms·
Interesting read. Especially the lookup method based on partitioning. I tried to implement a similar reverse image search based on dHash as explained here http
by mxmlnkn 4y ago
Interesting read. Especially the lookup method based on partitioning.
I tried to implement a similar reverse image search based on dHash as explained here https://github.com/Rayraegah/dhash https://github.com/Rayraegah/dhash . However, I also had lookup performance problems. Exact matches are not a problem but the Hamming distance threshold matching is. Because my project was in Python, I tried to eke out more performance by writing a BK-tree backend module in C++ https://github.com/mxmlnkn/cppbktree https://github.com/mxmlnkn/cppbktree It was 2 to 10x faster than an existing similar module but still was too slow when trying to look up something in a database of millions of images. However, as lookup tended to depend on the exact Hamming-distance threshold value, my next step would have been to try and optimize the hash. E.g, make it shorter so that only a short Hamming distance is necessary to be looked up but the mentioned multi-indexing method looks much more promising and tested.
- starkd 4y agoThere's limits to how short you can make the perceptual hash. The more you compress it, the more information you lose. The ML image classification models can be used to extract a good descriptor that can be further reduced into a compact signature. https://github.com/starkdg/pyphashml https://github.com/starkdg/pyphashml For indexing, I've had some success with distance-based indexing. Here's a comparison of some structures I used: https://github.com/starkdg/hftrie#comparison https://github.com/starkdg/hftrie#comparison Feel free to contact me, if you want to discuss this further.