Since you state: "
because the point of the check is to validate the that the label has been printer correctly", it sounds like you have deeper control of the chain than what is usual in processes where OCR is selected as primary part of the solution:
Your line suggests that you at least know what's coming your way (a printed label with known text/content): "check" + "validate".
This immediately suggests another approach: get your proverbial claws on the label "image" as it is sent to the printer, i.e. hook into the label production / printing process and obtain a "sollwert" image for reference. (German: sollwert + istwert: nouns originating from control engineering; English is not my mother tongue but it's something like reference + observation; I like the German jargon better and think in those terms; anyway...)
Once you have a reference image, your validation problem, still not simple!, becomes a pattern matching and scoring comparison: take the sollwert/reference image obtained from the label producing software and find a decent convolution-or-similar pattern matching approach in opencv or like: the task is to find/locate the sollwert image in the istwert/observation, i.e. in your camera picture. With the picture A in picture B localization algorithm, you also get some sort of pattern match quality ranking (measure of fitness, ...) for the find. That is your first & main indicator for label production quality.
Once you have that locate A in B (with focus issues, lens & lighting issues), you can improve the quality of your observation process: fixed camera position/rig = kill variation in observation subprocess, tuning the lighting, etc, before the image even enters the computer.
Lastly you can do what you originally asked about: tuning your digital image preprocess: contrast, sharpness, etc.etc.
Tesseract OCR definitely can be a part of your label quality assurance process, but IMO it would be a second (inner) stage, where you use the tesseract hocr output to add additional statistical ranking numbers to your evaluation subprocess. (Tesseract hocr, CSV, ... can output some ranking statistics per character, if told to do so. Your issue sounds more like the challenge: "did we get what we expected?" rather than the usual OCR task: "can we read this, at all? Let's see what we have got (I don't know yet)!", so you might be interested in evaluating those tesseract-internal ranking numbers as well as the actual characters produced.
Since you are talking "validation" rather than the usual "recognition", you also have a text "sollwert" available: the "ground truth" text you wanted printed on that label. This allows you to add dedicated (= custom) text comparison ranking adjustments, which would be unavailable to folks using OCR to scan a new page image which does not originate from another computer/machine: in your case, recognizing 5 vs S or s is a very high similarity as your (modern) printing process can be assumed to not make mistakes like that (you have the reference text already, so you 'know' this must be the OCR engine slipping up, ie noise injected in the observation/feedback loop), so you can create adjustment tables or maybe a small neural net (to be trained) as you would be interested in symbol shapes, rather than the precise text, coming out of the OCR engine block: while (for example) S vs 5 would be ranked pretty bad in a *recognition* task, yours is a *validation* task with 100% quality ground truth text available straight out of the production process machinery, so in your case S ranks pretty darn close to 5, the way I'm looking at it.
Plenty more interesting challenges along the way, I'm sure. :-)
HTH,
Ger Hobbelt