Can I limit the possible choices for a computer vision framework to recognize?
I would recommend using a convolutional neural network. CNNs are the bleeding edge for image recognition currently. They should be able to solve your problem with a high accuracy, just maybe without the sort of dialogue that you provided in your question. In order to train a convolutional neural network, you would have to use a different computer than your desktop and "deploy" it to your raspberry pi. This means that your desktop computer would find the optimal wight configurations for your neural network and the images you want to detect, and then you would be able to send the neural network to your raspberry pi in order to be used. If you want to, you could train your entire convolutional neural network from scratch, using random weights to begin, or you could use a process known as transfer learning where you take an existing neural network, usually deep, and train it a little bit further according to your existing data set. In order to train your neural network from scratch, you will need a very large volume of sample images to train it. In order to do transfer learning, you will only need about 1000 images for each of your classes in order to achieve very accurate results for your specific task. For specific libraries that you can use, I would recommend using Matlab if you have access to it as it is extremely easy to train and run deep neural networks, and it is easy to deploy the model to your raspberry pi. You can implement transfer learning in Matlab with 10 lines of code. Next, if you do not have access to Matlab, I would recommend if you have some python experience, using tensorflow. Tensorflow supports a lot of deep learning algorithms and should be able to for your problem although it will not be as easy as using MATLAB. Finally, Microsoft has a toolkit called CNTK which is fairly similar to tensorflow, but instead you can use it in C# or other .net languages.