The Wikipedia article on TinEye mówi, że Perceptual Hashing przyniesie wyniki podobne do TinEye. Podają this detailed description of the algorithm. Ale TinEye refuses to comment.
Największym problemem z podejściem Postrzegana mieszaja jest to, że podczas, gdy jest skuteczny do identyfikacji samego obrazu (z zastrzeżeniem zniekształca, kontrast zmiany itd), to nie jest wielki w identyfikacji zupełnie inny obraz z ten sam przedmiot (np. przód samochodu a strona samochodu).
TensorFlow ma doskonałe wsparcie dla głębokich sieci neuronowych, które mogą dać lepsze wyniki. Oto opis wysokiego poziomu tego, jak można użyć głębokiej sieci neuronowej w TensorFlow, aby rozwiązać ten problem:
Zacznij od wcześniej wyszkolonego NN (takiego jak GoogLeNet) lub samodzielnie trenuj na zbiorze danych, takim jak ImageNet. Teraz mamy nowe zdjęcie, które próbujemy zidentyfikować. Nakarm go w NN. Popatrz na aktywacje dość głębokiej warstwy w NN. Ten wektor aktywacji jest jak "odcisk palca" dla obrazu. Znajdź zdjęcie w bazie danych z najbliższym odciskiem palca. Jeśli jest wystarczająco blisko, to prawdopodobnie ten sam obiekt.
Intuicją tego podejścia jest to, że w odróżnieniu od Hetingu Percepcyjnego, NN buduje reprezentację obrazu na wysokim poziomie, w tym identyfikuje krawędzie, kształty i ważne kolory. Na przykład odcisk palca jabłka może zawierać informacje na temat jego okrągłego kształtu, czerwonego koloru, a nawet małego pnia.
Można również spróbować czegoś podobnego this 2012 paper on image retrieval który wykorzystuje mnóstwo przebrane funkcji, takich jak SIFT, regionalnych chwilach kolorów i fragmentów konturu obiektu. To prawdopodobnie dużo więcej pracy i nie jest to najlepsze z TensorFlow.
UPDATE
OP dostarczył przykładową parę zdjęć ze swojej aplikacji:
Oto wyniki stosując the demo on the pHash.org website na tej pary podobnych zdjęć jak również na parze zupełnie różnych obrazów.
Porównując dwóch obrazów przedstawionych przez OP:
rzodkiewka (promieniowe hash): pHash determined your images are not similar with PCC = 0.518013
DCT mieszania: pHash determined your images are not similar with hamming distance = 32.000000.
Marr/Mexican Hat fali elementarnej: pHash determined your images are not similar with normalized hamming distance = 0.480903.
Porównywanie jednego z jego obrazów z losowym obrazem z mojej maszyny:
RZODKWI (hash promieniowy): pHash determined your images are not similar with PCC = 0.690619.
DCT hash: pHash determined your images are not similar with hamming distance = 27.000000.
Marr/meksykański kapelusz falki: pHash determined your images are not similar with normalized hamming distance = 0.519097.
Wnioski
Musimy przetestować więcej obrazów do Naprawdę wiem. Ale jak dotąd nie wydaje się, by pHash działało bardzo dobrze. Przy domyślnych progach nie uważa podobnych obrazów za podobne. I dla jednego algorytmu, faktycznie uważa on całkowicie losowy obraz za bardziej podobny.
Dlaczego warto używać TensorFlow? Podczas gdy głębokie uczenie się jest świetnym narzędziem dla wielu problemów z widzeniem komputera, prawdopodobnie nie jest to właściwe rozwiązanie do wyszukiwania obrazów. –
Jestem otwarty na sugestie :) – reflog
Standardowe podejście to: wyodrębnianie funkcji lokalnych (SIFT lub SIFT) -> oblicz wizualne słowa -> wyszukiwanie obrazów o podobnych wizualnych słowach (podobne do wyszukiwania dokumentów). opcjonalnie sprawdź dopasowanie za pomocą homografii (lub innego modelu geometrycznego). Możesz szukać w Internecie szukania obrazka worka słów. –