下载源文件 (TesseractDotnetExample.zip)

TesseractDotnet 的使用其实还是很方便的,只是能参考的资料比较少 (Tesseract 本身的参考资料就少)。例如把图像作为单行文本进行 OCR,只要有下面这些代码就可以了:
但有一点需要注意,TesseractProcessor.Init() 方法的第 1 个参数 dataPath 是 traineddata 文件所在路径,这个路径必须以斜杠 "/" 或反斜杠 "\" 结尾。否则初始化会失败,Init() 方法返回 false。
如果恰巧又没有对 Init() 的返回值进行处理,那么在进行到 Apply() 一步开始进行 OCR 时,会产生异常:

这个问题应该是由于 Tesseract 3 中初始化部分函数对 dataPath 的处理存在缺陷而造成的。
TesseractDotnet 的使用其实还是很方便的,只是能参考的资料比较少 (Tesseract 本身的参考资料就少)。例如把图像作为单行文本进行 OCR,只要有下面这些代码就可以了:
- using System;
- using System.Drawing;
- using tesseract;
- // ...
- TesseractProcessor processor = new TesseractProcessor();
- bool succeed = processor.Init(@"..\tessdata\", "eng", 3); // TesseractEngineMode: DEFAULT
- if (!succeed)
- {
- // Deal with error
- Application.Exit();
- }
- processor.SetVariable("tessedit_pageseg_mode", "3"); // TesseractPageSegMode: PSM_SINGLE_LINE
- Image image = Image.FromFile("...");
- processor.Clear();
- processor.ClearAdaptiveClassifier();
- string result = processor.Apply(image);
- // ...
但有一点需要注意,TesseractProcessor.Init() 方法的第 1 个参数 dataPath 是 traineddata 文件所在路径,这个路径必须以斜杠 "/" 或反斜杠 "\" 结尾。否则初始化会失败,Init() 方法返回 false。
如果恰巧又没有对 Init() 的返回值进行处理,那么在进行到 Apply() 一步开始进行 OCR 时,会产生异常:
AccessViolationException:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
这个问题应该是由于 Tesseract 3 中初始化部分函数对 dataPath 的处理存在缺陷而造成的。