原創(chuàng)|使用教程|編輯:龔雪|2015-07-22 10:40:05.000|閱讀 886 次
概述:LEADTOOLS OCR文字識(shí)別教程:處理識(shí)別結(jié)果
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
根據(jù)下面的步驟來(lái)創(chuàng)建和運(yùn)行一個(gè)程序用來(lái)展示如何使用OCR識(shí)別一個(gè)圖片然后得到識(shí)別結(jié)果。
1. 打開(kāi)Visual Studio
2. 在菜單中選擇文件->新建->項(xiàng)目
3. 在新建項(xiàng)目對(duì)話框中,模板選擇"Visual C#",然后選擇Windows窗體應(yīng)用程序。
4. 在名稱欄輸入這個(gè)項(xiàng)目的名稱:"OcrTutorial3",然后選擇確定 ,當(dāng)然如果需要的話可以重新指定一個(gè)目錄來(lái)存放這個(gè)項(xiàng)目。
5. 在“解決方案資源管理器”窗口,右鍵點(diǎn)擊“引用”,然后在彈出菜單中選擇“添加引用”。在彈出的引用管理器對(duì)話框中,選擇“框架”然后選擇“瀏覽(B)”按鈕,定位到LEADTOOLS安裝目錄:
"<安裝目錄>\Bin\DotNet4\Win32" 然后選擇如下幾個(gè)DLL:
Leadtools.dll
Leadtools.Drawing.dll
Leadtools.Codecs.dll
Leadtools.Controls.WinForms.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這種引用是根據(jù)支持的圖像格式命名的,例如BMP、TIF、FAX、JPG等,請(qǐng)根據(jù)您的需要添加不同的格式支持。
6. 切換到Form1的代碼視圖,然后添加如下代碼到文件的最前面,如果已經(jīng)有了using代碼的話請(qǐng)?zhí)砑拥揭延写a后:
using Leadtools; using Leadtools.Codecs; using Leadtools.Drawing; using Leadtools.Controls; using Leadtools.Forms; using Leadtools.Forms.Ocr; using Leadtools.Forms.DocumentWriters;
7. 在Form1的構(gòu)造函數(shù)中添加如下代碼:
// 請(qǐng)將這兩個(gè)字段替換為你得到的License文件路徑和Developer Key string licenseFilePath = @"你的License文件路徑"; string developerKey = "你的DeveloperKey"; RasterSupport.SetLicense(licenseFilePath, developerKey);
8. 在Form1類中添加如下的私有變量:
// Image viewer private ImageViewer _imageViewer; // OCR 引擎 private IOcrEngine _ocrEngine; // OCR 頁(yè)面 private IOcrPage _ocrPage; // 識(shí)別結(jié)果 (帶有字符位置信息) private IOcrZoneCharacters _zoneCharacters;
9. 重寫Form1的 Onload事件,然后添加如下代碼:
protected override void OnLoad(EventArgs e) { // 將Image Viewer添加到Form1中 _imageViewer = new ImageViewer(); _imageViewer.Dock = DockStyle.Fill; Controls.Add(_imageViewer); _imageViewer.BringToFront(); // 顯示圖片原始大小 _imageViewer.UseDpi = true; // 添加鼠標(biāo)左鍵拖動(dòng)圖片 ImageViewerPanZoomInteractiveMode panZoomMode = new ImageViewerPanZoomInteractiveMode(); panZoomMode.MouseButtons = MouseButtons.Left; _imageViewer.InteractiveModes.Add(panZoomMode); // 為右鍵添加括選功能 ImageViewerRubberBandInteractiveMode rubbBandMode = new ImageViewerRubberBandInteractiveMode(); rubbBandMode.MouseButtons = MouseButtons.Right; // 追加一個(gè)事件到括選結(jié)束,這樣能夠在結(jié)束時(shí)識(shí)別括選內(nèi)容 rubbBandMode.RubberBandCompleted += rubbBandMode_RubberBandCompleted; _imageViewer.InteractiveModes.Add(rubbBandMode); // 初始化OCR引擎 _ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false); // 啟動(dòng)引擎 _ocrEngine.Startup(null, null, null, @"D:\Program Files\LEADTOOLS 19\Bin\Common\OcrAdvantageRuntime"); // 啟用中文、英文識(shí)別 _ocrEngine.LanguageManager.EnableLanguages(new string[] { "zh-Hans", "en" }); // 使用示例圖片創(chuàng)建一個(gè)頁(yè)面 string fileName = @"..\..\ocr1.jpg"; RasterImage rasterImage = _ocrEngine.RasterCodecsInstance.Load(fileName, 1); _ocrPage = _ocrEngine.CreatePage(rasterImage, OcrImageSharingMode.AutoDispose); // 在Viewer中顯示這個(gè)圖片 _imageViewer.Image = _ocrPage.GetRasterImage(); Text = "鼠標(biāo)左鍵拖拽圖片, CTRL+左鍵可以縮放, 右鍵選擇識(shí)別區(qū)域"; // 添加PostRender事件,用來(lái)繪制識(shí)別括選區(qū)域 _imageViewer.PostRender += _imageViewer_PostRender; base.OnLoad(e); }
10. 重寫Form1的OnFormClosed方法,然后添加如下代碼:
protected override void OnFormClosed(FormClosedEventArgs e) { // 銷毀頁(yè)面 _ocrPage.Dispose(); // 釋放引擎 _ocrEngine.Dispose(); base.OnFormClosed(e); }
11. 添加如下代碼實(shí)現(xiàn)括選區(qū)域識(shí)別功能:
private void rubbBandMode_RubberBandCompleted(object sender, ImageViewerRubberBandEventArgs e) { // 使用已經(jīng)繪制好的區(qū)域 // 先移除所有識(shí)別區(qū)域 _ocrPage.Zones.Clear(); // 添加一個(gè)新的區(qū)域, 繪制的矩形區(qū)域是控件的坐標(biāo),我們需要將這個(gè)坐標(biāo)轉(zhuǎn)換為圖片坐標(biāo) LeadRect bounds = LeadRect.FromLTRB(e.Points[0].X, e.Points[0].Y, e.Points[1].X, e.Points[1].Y); bounds = _imageViewer.ConvertRect(null, ImageViewerCoordinateType.Control, ImageViewerCoordinateType.Image, bounds); // 使用這個(gè)坐標(biāo)來(lái)創(chuàng)建一個(gè)識(shí)別區(qū)域 OcrZone ocrZone = new OcrZone(); ocrZone.ZoneType = OcrZoneType.Text; ocrZone.Bounds = new LogicalRectangle(bounds); _ocrPage.Zones.Add(ocrZone); // 進(jìn)行識(shí)別,獲取文字 _ocrPage.Recognize(null); // 取得識(shí)別結(jié)果 IOcrPageCharacters pageCharacters = _ocrPage.GetRecognizedCharacters(); _zoneCharacters = pageCharacters[0]; // 刷新Viewer來(lái)繪制識(shí)別字符 _imageViewer.Refresh(); // 使用Messagebox來(lái)顯示識(shí)別結(jié)果 string text = _ocrPage.GetText(0); if (string.IsNullOrEmpty(text)) text = "[無(wú)文字]"; MessageBox.Show(this, text); }
12. 最后,添加如下代碼,將識(shí)別的文字繪制在圖片上:
private void _imageViewer_PostRender(object sender, ImageViewerRenderEventArgs e) { // 繪制識(shí)別結(jié)果,如果有的話 if (_zoneCharacters == null) return; Graphics graphics = e.PaintEventArgs.Graphics; using (Brush characterBrush = new SolidBrush(Color.FromArgb(128, Color.Black))) { foreach (OcrCharacter character in _zoneCharacters) { // 取得字符位置 LogicalRectangle characterBounds = character.Bounds; // 字符位置是一個(gè)邏輯區(qū)域, 有可能在單位像素外,將它轉(zhuǎn)換為像素 LeadRect bounds = characterBounds.ToRectangle(_ocrPage.DpiX, _ocrPage.DpiY); // 轉(zhuǎn)換這個(gè)位置到Viewer上 // 注意,這個(gè)Demo并沒(méi)有旋轉(zhuǎn)圖片所以你需要使用四個(gè)點(diǎn)來(lái)定位 bounds = _imageViewer.ConvertRect(null, ImageViewerCoordinateType.Image, ImageViewerCoordinateType.Control, bounds); // 高亮字符區(qū)域 graphics.FillRectangle(characterBrush, bounds.X, bounds.Y, bounds.Width, bounds.Height); graphics.DrawRectangle(Pens.Black, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1); // 最后繪制字符 graphics.DrawString(new string(new char[] { character.Code }), this.Font, Brushes.White, bounds.X, bounds.Y); } } }
13. 保存然后編譯執(zhí)行。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn