I've looked into Moodstocks, who seems to have perfected an image recognition system with a pay-per-month service. They have a great system (I've tested it for my own use and it's fantastic) BUT it's EXTREMELY expensive for me, which is why I am not using it. At the time of me writing this, the "up to 100,000" image service is about $12,000/year. For my project, I have nearly 4 million images I need to match against. YIKES.
So after many months of research on and off, I've come to the conclusion that if you're going to be comparing against 1000's of images or more (in my case 1 million+), you'll need to do the image comparison off of the device. Users mobile devices don't have the space, speed, and power to perform large amounts of computations to do this kind of work.
What that really means is that you need to set up an image recognition server on a high performance machine and make it public to your app. On the app, have the user take a picture of an object (or you can grab frames from the camera video), have it sent to your server for comparison, and then when a match is found report the results back to the app.
You can use a framework like Accord.NET or EmguCV to make a C# desktop application or service that runs on a Windows Server box to do this, for example.
What the Amazon iOS app does for image recognition from what I can guess is they appear to locate SURF points real-time and sends the data to the server while scanning instead of the entire image. My guess is that they use OpenCV on device to do this. But they still use server software to send back the matched product SKU.
Here's an awesome blog post by a guy who wanted to do image matching in .NET and he walks through every step including how it works, how to do it, and then give all his code in a sample application. Amazing post: https://sbrakl.wordpress.com/2015/01/30/love-affair-with-cbir-part-3/comment-page-1/
From what I've been able to learn is that the LoCATe algorithm performs the best and the quickest with large amounts of images, but also takes hours, days, and possibly weeks (depending on how many images you have) to create massive indexes for search. I think when it comes to image matching I've found the speed of creating a solid index is in relation to the speed of finding matches from queries.