65.9K
CodeProject 正在变化。 阅读更多。
Home

如何:使用 C# 使用 Office 2007 OCR

starIconstarIconstarIconstarIconstarIcon

5.00/5 (35投票s)

2009年8月24日

CPOL

3分钟阅读

viewsIcon

349413

downloadIcon

23310

使用 Microsoft Office 2007 OCR 从任何图像读取文本。

引言

示例应用程序会检查指定目录中的图像,并在其中找到任何图像时从中读取文本。它会自动将每个图像中的文本保存到与图像同名的文本文件中。它可以处理图像中的问题或异常。

如果您安装了 Office 2007,则 OCR 组件可供您使用。添加到代码中的唯一依赖项是 Office 2007。要求安装 Office(2007 或 2003)才能使代码正常工作,这可能符合也可能不符合您的具体情况。但如果您的客户可以保证运行您代码的机器上安装了 Office(2007 或 2003),那么此解决方案非常适合您。

什么是 OCR?

OCR(光学字符识别)是指计算机识别印刷或手写文本字符。这涉及逐个字符地对文本进行照片扫描、对扫描的图像进行分析,然后将字符图像翻译成数据处理中常用的字符编码,如 ASCII。

或者,我们可以说...光学字符识别(OCR)将文本图像(如扫描的文档)转换为实际的文本字符。OCR 也称为文本识别,它使得编辑和重用通常被锁定在扫描图像中的文本成为可能。OCR 使用一种称为模式识别的人工智能形式来识别页面上的单个文本字符,包括标点符号、空格和行尾。

什么是文档成像?

文档成像是指扫描纸质文档并将其转换为数字图像的过程,这些数字图像随后存储在 CD、DVD 或其他磁性存储设备上。通过 Microsoft Office 文档成像,您可以扫描纸质文档并将其转换为数字图像,然后您可以将其保存为

  • 标记图像文件格式 (TIFF):一种基于标记的高分辨率图形格式。TIFF 用于数字图形的通用交换。
  • Microsoft 文档成像格式 (MDI):一种基于标记的高分辨率图形格式,基于用于数字图形的标记图像文件格式 (TIFF)。

保存到您计算机的硬盘、网络服务器、CD 或 DVD。Microsoft Office 文档成像还使您能够执行光学字符识别(OCR),无论是作为扫描文档的一部分,还是在处理 TIFF 或 MDI 文件时。通过执行 OCR,您可以将识别出的文本从扫描图像或传真复制到 Microsoft Word 文档或其他 Office 程序文件中。

劣势

要运行使用 OCR 的应用程序,您的计算机上必须安装 Office OCR 组件。这意味着,没有 Office OCR 组件,您的应用程序将无法正常工作。

优势

这是一个免费的组件,随 Office 一起提供,您可以免费在代码中使用它。它易于使用,因为 Microsoft 提供了许多关于如何使用此组件的示例代码。

命名空间

using System.Collections;
using System.IO;
using System.Drawing.Imaging;

Using the Code

您需要添加为引用的 COM 对象的名称是Microsoft Office Document Imaging 12.0 Type Library。默认情况下,Office 2007 不会安装它。您需要通过 Office 2007 安装程序确保已添加。只需运行安装程序,单击“继续”按钮,选择“添加或删除功能”,然后确保已安装成像组件。

OCR 引擎始终默认为用户的区域设置作为 LangID 参数,除非您在调用 OCR 方法时明确指定语言;它不会保留之前使用的设置。在混合语言环境中,在每次调用 OCR 方法时显式指定 LangID 参数是一个好习惯。

因此,使用 C# 创建一个 Windows 应用程序。在 Visual Studio 的解决方案资源管理器中,右键单击“引用”,选择“COM”选项卡,然后选择“Microsoft Office Document Imaging 12.0 Type Library”。

/// <summary>
/// Check for Images
/// read text from these images.
/// save text from each image in text file automatically.
/// handle problems with images
/// </summary>
/// <param name="directoryPath">Set Directory Path to check for Images in it</param>
public void CheckFileType(string directoryPath) 
{ 
    IEnumerator files = Directory.GetFiles(directoryPath).GetEnumerator(); 
    while (files.MoveNext()) 
    { 
        //get file extension 
        string fileExtension = Path.GetExtension(Convert.ToString(files.Current));

        //get file name without extension 
        string fileName=
          Convert.ToString(files.Current).Replace(fileExtension,string.Empty);

        //Check for JPG File Format 
        if (fileExtension == ".jpg" || fileExtension == ".JPG")
        // or // ImageFormat.Jpeg.ToString()
        {
            try 
            { 
                //OCR Operations ... 
                MODI.Document md = new MODI.Document(); 
                md.Create(Convert.ToString(files.Current)); 
                md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true); 
                MODI.Image image = (MODI.Image)md.Images[0];

                //create text file with the same Image file name 
                FileStream createFile = 
                  new FileStream(fileName + ".txt",FileMode.CreateNew);
                //save the image text in the text file 
                StreamWriter writeFile = new StreamWriter(createFile); 
                writeFile.Write(image.Layout.Text); 
                writeFile.Close(); 
            } 
            catch (Exception exc) 
            { 
                //uncomment the below code to see the expected errors
                //MessageBox.Show(exc.Message,
                //"OCR Exception",
                //MessageBoxButtons.OK, MessageBoxIcon.Information); 
            } 
        } 
    } 
}

关注点

我做了一个关于 Office OCR 的大型示例应用程序,并将在不久后发布。

备注

许多人使用 OCR 来进行 Internet 爬虫以获取数据。

我的博客

参考文献

历史

  • 2009 年 8 月 24 日:发布
© . All rights reserved.