[C#]使用 Microsoft Office Document Imaging(MODI) 做光學字元辨識(OCR)

[C#]使用 Microsoft Office Document Imaging(MODI) 做光學字元辨識(OCR)

 

1. 簡介

Microsoft Office Document Imaging (MODI) 可以讓我們將影像文件,進行光學字元辨識 Optical Character Recognition(OCR),取得影像字元。

本文介紹如何撰寫程式使用 Microsoft Office Document Imaging(MODI) 做光學字元辨識(OCR)。

 

2. 方法

首先,我們要有 Office 2003 會更高的版本才有 Microsoft Office Document Imaging

確認版本後,再來就要安裝 Microsoft Office Document Imaging 元件,假如沒有安裝的話,可以放入 Office 安裝光碟,並且選擇安裝到電腦中。

image

 

接著,開啟 Visual Studio 2008,建立新的專案,新增專案後,將 Microsoft Office Document Imaging 11.0 Type Library 加入參考

image

 

在表單中加入 PictureBox 控制項

image

 

程式碼


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace OCR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // PictureBox Click 事件
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            // 宣告 OpenFileDialog 控制項,並且實例化
            OpenFileDialog OFD = new OpenFileDialog();
            // 加入檔案過濾條件
            OFD.Filter = "*.jpg;*.png;*.bmp|*.jpg;*.png;*.bmp";

            if (OFD.ShowDialog() == DialogResult.OK)
            {
                // 讓 pictureBox1.Image 為選擇的圖檔
                this.pictureBox1.Image = Image.FromFile(OFD.FileName);
                // 顯示辨識結果
                MessageBox.Show(this, Recognition(OFD.FileName), "OCR Result");
            }
        }

        private string Recognition(string strFileName)
        {
            string strResult = string.Empty;

            // 宣告 MODI.Document 物件 modiDocument,並且實例化
            MODI.Document modiDocument = new MODI.Document();

            // MODI.Document 創建
            modiDocument.Create(strFileName);

            // 宣告 MODI.Image 物件 modiImage,其內容值來自 MODI.Document 物件 modiDocument
            MODI.Image modiImage = (MODI.Image)modiDocument.Images[0];

            // OCR Method(Language, WithAutoRotation, WithStraightenImage)
            modiImage.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);

            // 組合 OCR 辨識後的 Word
            foreach (MODI.Word WordItem in modiImage.Layout.Words)
            {
                strResult += WordItem.Text + " ";
            }

            modiDocument.Close(false);

            // 回傳辨識結果
            return strResult;
        }
    }
}

 

3. 結果

首先,準備要做辨識的圖檔,以下為測試圖檔

新增點陣圖影像

 

使用滑鼠點選 PictureBox

image

 

出現 OpenFileDialog 控制項,選擇要辨識的圖檔

image

 

顯示辨識結果,而在辨識上,發現他把 Dotblogs 的 l 辨識成 i

image