The simplest approach to this would be template matching via two-dimensional normalised cross correlation.
What this basically does is looking for a template: a small image representing the response letters, inside a (usually bigger) image. The result that is returned from this operation looks like an image but it essentially has peak values where the template matches the image.
This approach transferred to this problem means that one cross correlation would have to be carried out for each possible answer and each resulting image examined for "peaks".
Of course, this assumes that the letters appear at a single scale throughout the document. Otherwise, cross correlations would have to be applied (via an appropriate method) at different scales too.
There are two components to be carefully managed here:
Quality and scale of the image:
This can be roughly controlled by instructing users to align the top left corner of their camera's field of view with the paper. This will constrain the distance from the image but it still depends on the lens of the mobile phone.
Quality and scale of the template:
This depends on #1 and the hand-writing of the users. But on average, roughly equal size fonts can be used (as further below).
Here is an example based on Python, matplotlib and scikit-image:
from matplotlib import imshow, show
from skimage.io import imread
from skimage.feature import match_template
#Load the image
Q = imread("tst4.jpg")
#Load the template, here it is the letter A from the Sans font, approximately at the same size as the hand-written provided
A = imread("letter2.png")
U = match_template(Q, A, pad_input = True)
#Show the result
(Please note, a more elaborate version of that is available via this link)
U looks like this:
Q that looks like this:
A that looks like this:
U image, please note that the red colour corresponds to high peaks (very close to 1.0). Just putting a threshold on the pixel values of
U will return the centers of the 'A' symbols.
Of course, other formations seem to have high correlation as well in that image. These are "false-positives", that is, places where the algorithm THINKS there is an "A" but in reality there is not.
There are two ways by which these can be reduced (and increase the system's reliability):
Apply the template matching over a smaller area (this is now possible if the top left corner is roughly aligned with the edge of the paper)
Add more features to the classification operation than just the peak of the cross-correlation between the template and the image to make it more robust. This is probably the next level in complexity and more information can be provided if needed.
Hope this helps.