根据下面的步骤来创建和运行一个程序用来展示如何使用OCR扫描一个图片然后得到识别结果,最后将识别结果保存为可搜索的PDF文件。
1. 打开Visual Studio
2. 在菜单中选择文件->新建->项目
3. 在新建项目对话框中,模板选择"Visual C#",然后选择Windows窗体应用程序。
4. 在名称栏输入这个项目的名称:"OcrTutorial4",然后选择确定 ,当然如果需要的话可以重新指定一个目录来存放这个项目。
5. 在“解决方案资源管理器”窗口,右键点击“引用”,然后在弹出菜单中选择“添加引用”。在弹出的引用管理器对话框中,选择“框架”然后选择“浏览(B)”按钮,定位到LEADTOOLS安装目录:
"<安装目录>\Bin\DotNet4\Win32" 然后选择如下几个DLL:
Leadtools.dll
Leadtools.Codecs.dll
Leadtools.Twain.dll
Leadtools.ImageProcessing.Core.dll
Leadtools.Forms.dll
Leadtools.Forms.DocumentWriters.dll
Leadtools.Forms.Ocr.dll
Leadtools.Forms.Ocr.Advantage.dll
Leadtools.Codecs.Bmp.dll
Leadtools.Codecs.Cmp.dll
Leadtools.Codecs.Tif.dll
Leadtools.Codecs.Fax.dll
注意:Leadtools.Codecs.*.dll这种引用是根据支持的图像格式命名的,例如BMP、TIF、FAX、JPG等,请根据您的需要添加不同的格式支持。
6. 从工具箱中拖拽3个button到Form1中,button名称保持button1、2、3,然后修改button文字为如下内容:
button1:修改保存路径
button2:选择扫描设备
button3:扫描并识别
7. 切换到Form1的代码视图,然后添加如下代码到文件的最前面,如果已经有了using代码的话请添加到已有代码后:
using Leadtools;
using Leadtools.Twain;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.Forms;
using Leadtools.Forms.DocumentWriters;
using Leadtools.Forms.Ocr;
8. 在Form1的构造函数中添加如下代码:
// 请将这两个字段替换为你得到的License文件路径和Developer Key
string licenseFilePath = @"D:\Program Files\LEADTOOLS 19\Common\License\LEADTOOLS.LIC";string developerKey = "***";
9. 在Form1类中添加如下的私有变量:
// OCR引擎
private IOcrEngine _ocrEngine;
// OCR文档
private IOcrDocument _ocrDocument;
// TWAIN
private TwainSession _twainSession;
// 保存PDF的路径
private string _outputDirectory = @"D:\ScanImages";// 图像处理命令列表,我们使用这个功能来处理扫描的图片
private List<RasterCommand> _imageProcessingCommands;
private int _scanCount;
10. 重写Form1的 Onload事件,然后添加如下代码:
protected override void OnLoad(EventArgs e){// 初始化OCR引擎
_ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false);
// 启动引擎
_ocrEngine.Startup(null, null, null, @"D:\Program Files\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime");// 设置语言为中英
_ocrEngine.LanguageManager.EnableLanguages(new string[] { "zh-Hans", "en" });// 初始化TWAIN
_twainSession = new TwainSession();
_twainSession.Startup(this.Handle, "My Company", "My Product", "My Version", "My Application", TwainStartupFlags.None);// 订阅事件TwainSession.Acquire来获取扫描图像
_twainSession.AcquirePage += new EventHandler<TwainAcquirePageEventArgs>(_twainSession_AcquirePage);
// 初始化我们将要使用到的图像处理命令
// 您可以添加任意命令进行预处理, 这里我们只添加倾斜校正和去除噪点
_imageProcessingCommands = new List<RasterCommand>();
_imageProcessingCommands.Add(new DeskewCommand());
_imageProcessingCommands.Add(new DespeckleCommand());
base.OnLoad(e);
}
11. 重写Form1的OnFormClosed方法,然后添加如下代码:
protected override void OnFormClosed(FormClosedEventArgs e){// 释放引擎
_ocrEngine.Dispose();// 释放TWAIN
_twainSession.Shutdown();base.OnFormClosed(e);
}
12. 为button1(修改保存路径)添加如下代码:
private void button1_Click(object sender, EventArgs e){// 变更保存路径
using (FolderBrowserDialog dlg = new FolderBrowserDialog()){dlg.SelectedPath = _outputDirectory;dlg.ShowNewFolderButton = true;
if (dlg.ShowDialog(this) == DialogResult.OK)_outputDirectory = System.IO.Path.GetFullPath(dlg.SelectedPath);}}
13. 为button2(选择扫描设备)按钮添加如下代码:
private void button2_Click(object sender, EventArgs e){// 选择您想要使用的扫描仪
_twainSession.SelectSource(null);
}
14. 为button3(扫描并识别)按钮添加如下代码:
private void button3_Click(object sender, EventArgs e){// 如果输出路径不存在的话创建一个
if (!System.IO.Directory.Exists(_outputDirectory))
System.IO.Directory.CreateDirectory(_outputDirectory);// 建立PDF文件名称
string name = "Scanned" + _scanCount;_scanCount++;string pdfFileName = System.IO.Path.Combine(_outputDirectory, name + ".pdf");// 创建一个基于文件的OCR文档以便于将扫描的文档添加进来
_ocrDocument = _ocrEngine.DocumentManager.CreateDocument(null, OcrCreateDocumentOptions.AutoDeleteFile);
// 扫描
_twainSession.Acquire(TwainUserInterfaceFlags.Show);// 保存PDF
_ocrDocument.Save(pdfFileName, DocumentFormat.Pdf, null);
// 释放页面
_ocrDocument.Dispose();// 显示结果
System.Diagnostics.Process.Start(pdfFileName);}
15. 添加扫描事件:
private void _twainSession_AcquirePage(object sender, TwainAcquirePageEventArgs e){// 扫描进来的文档
RasterImage image = e.Image;// 进行预处理
foreach (RasterCommand command in _imageProcessingCommands){command.Run(image);}// 创建OCR页面
using (IOcrPage ocrPage = _ocrEngine.CreatePage(image, OcrImageSharingMode.AutoDispose))
{// 识别
ocrPage.Recognize(null);
_ocrDocument.Pages.Add(ocrPage);}}
16. 保存然后编译执行。