我一直在阅读一些帖子和来自Tesseract .Net包装器的各种图像“类型”的错误输出,但我无法找到解决我的错误输出。
如您所见,有不同的字体,大小,前景和背景。我尝试对其进行灰度级渲染并按不同的数量进行升级,但没有任何内容可以正确解析整个图像。
TesseractEngine ocr = new TesseractEngine(Path.Combine(Environment.CurrentDirectory, "tessdata"), "fra", EngineMode.Default);
ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZÉÈ0123456789:'");
Page pg = ocr.Process(image.ToGrayscale().ScaleByPercent(200));
MessageBox.Show(pg.GetText());
使用此代码(让我知道ToGrayScale()
和ScaleByPercent(...)
的细节是否有帮助),这是我得到的输出:
8300QÉMQI09'0'9I
PIOII':
这似乎对应于Bacc. génie logiciel
和Profil :
。
话虽如此,我对图像转换知之甚少,所以示例或提示会有很大帮助,但我完全愿意在必要时深入研究链接的东西/文档。我该如何处理这样的图像?
编辑:有一些manips(由@Yves Daoust建议)我设法达到了这一点:
然而,输出(右侧)还不是很完美。我一直在努力为Tesseract提供配置,以便它只接受某个列表中的单词。这是我的尝试:
var initVars = new Dictionary<string, object>() {
{ "load_system_dawg", false },
{ "user_words_suffix", "fra.user-words" },
{ "language_model_penalty_non_freq_dict_word", 1 },
{ "language_model_penalty_non_dict_word", 1 }
};
TesseractEngine ocr = new TesseractEngine(Path.Combine(Environment.CurrentDirectory, "tessdata"), "fra", EngineMode.Default,
Enumerable.Empty<string>(), initVars, false);
我一直在寻找如何提供这种配置的例子,但我只发现了简短,无详细的文本解释。
你可以通过自己提取角色来在很大程度上帮助Tesseract,这在这里非常简单:只保留白色像素(以及其他颜色的形式)。
顺便说一句,角色是如此可预测,你可以自己做识别(通过简单的像素比较),没有Tesseract的帮助。