Are there any very good APIs for matching similar images? I am working with Python. I have 3000 thousands images of front-faced watches like the following ones: Watch1, Watch2, Watch3.

I want to find an API which receives this collection of photos or even others taken under less ideal conditions (different background colour, darker lightning etc) and which finds/matches the most similar watches with one each other. 

By similarity I mean that I expect that a round in shape, brown watch with thin lace will be only matched with watches of round shape, of dark colour and with thin lace (from the same collection of photos).

I am aware of APIs of this kind from Google, Amazon, Microsoft, TinEye, Clarifai, Indico etc but I am not sure that they will perform so well in a so specialised application. For example, these APIs are useful for matching car images with car images and not with food images but matching among  the same kind of objects (e.g. watches) based on a very high level of detail (shape, colour, thickness etc) is significantly more demanding.

For instance, this is an application on a specific kind of objects like clothes with Indico: https://indico.io/blog/clothing-similarity-how-a-program-is-more-fashionable-than-me/. However, if you notice it, the results are not that good and essentially they could be retrieved to a great extent even by simply applying PCA and KNN to these images.

Therefore, my question is: Is there any API which can match similar images based on a high level of detail?
Never used this, but http://matelabs.in has something close... pretrained models on jewelry. You can probably extend those models. The new google dataset may also have labeled versions of the stuff you need. I cannot find the link I saw origionally, but it has bounding boxes for 20K classes down to 'teacup' 'teacup handle', 'tea', so I would not write google off before testing either.

Since this is DataScience SE, I will give the more DS answer as well. The thing you are looking for sounds like a multi-category classifier. You can probably find good resources and pretrained models here, and on the end, sklearn has apis for common classifiers.

The general idea is run your image through a Convnet, minus the classification part. You then have 1K-8K 'features' which a second algorithm set of classifiers, [decision forest](https://pdfs.semanticscholar.org/.../99dff11dcb3a48dee07a19052b07fdd2e7fe.pdf
), logical compisitional model, embedding, etc... gives a score for each binary attribute.