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

SharePoint OCR 图像文件索引

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (25投票s)

2009年11月16日

CPOL

8分钟阅读

viewsIcon

99909

downloadIcon

3329

SharePoint OCR 图像文件索引。

引言

本文介绍如何使用 OCR 技术设置图像文件(包括 TIFF、PDF、JPEG、BMP 等)的索引。下面描述的索引利用了 Microsoft IFilter 技术,因此它并非 SharePoint 特有,但可用于任何使用 Microsoft 索引的产品:Microsoft Search、桌面搜索、SQL Server 搜索,以及通过插件与 Google 桌面搜索。我本人将其与 Microsoft Windows SharePoint Services 2003 一起使用。对于其他产品,注册可能需要略有不同。

背景

我正在进行的一个项目需要存储扫描成 PDF 文件的旧文档。然后,有一个专门的团队负责为搜索引擎提供标签,以便找到这些图像文档。整个过程笨拙、耗费人力且容易出错。这就是我开始探索之路的起点。

OCR

我进行的第一次搜索是关于开源 OCR 产品。很快,我缩小范围到了 TESSERACT (http://code.google.com/p/tesseract-ocr/)。Tesseract 是 HP 从 1985 年到 1995 年开发的一个遗留项目。然后,它被开源,现在,如果我理解正确的话,Google 正在对其进行开发。凭借这样的背景,Tesseract 在 OCR 识别和准确性方面获得高分也就不足为奇了。下载并稍加努力后,我让 Tesseract 工作了起来。困难之处在于主页声称其基本输入格式是 TIFF 文件。也许我的 TIFF 文件有问题,但我只能让它处理 BMP 文件。

图像文件转换

既然我有一个可以将 BMP 文件转换为文本的 OCR,我如何才能从图像 PDF 文件中提取文本呢?再进行一次搜索,我选择了 ImageMagic (https://imagemagick.org.cn/)。这是另一个很棒的开源实用程序,可以将任何文件转换为图像。它开箱即用,可以将 TIFF 文件转换为位图,但要转换 PDF 文件,它需要 GhostScript (http://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs864/gs864w32.exe)。

处理文本 PDF

安装了该实用程序后,我就可以大显身手了——我可以将任何文件(特别是 PDF 和 TIFF)转换为位图,然后从位图中提取文本。唯一的考虑因素是如何区分处理包含文本的 PDF 文件——毕竟,OCR 计算量很大,即使图像质量和分辨率完美,也可能出错。因此,又一次快速搜索,我找到了 PDFTOTEXT (ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl4-win32.zip)——感谢开源!有了这个工具,我就可以瞬间从 PDF 中提取文本。然而,对于纯图像 PDF,我将一无所获,但我已经为此找到了解决方案!

批量处理

又花了 15 分钟设置了一个批处理脚本来自动化这个过程

  • 检查文件扩展名
  • 如果文件是 PDF 文件
    • 尝试从中提取文本
    • 如果文本量大于某个阈值,则完成!
    • 如果没有文本,则将第一页转换为位图
    • 在位图上运行 OCR
  • 对于任何其他文件类型,将文件转换为位图
  • 在位图上运行 OCR

解压缩附件的项目后,请查看 _bin\OCR.BAT_ 文件。它将在源文件所在的目录中创建一个临时文件,文件名与源文件相同,并加上“_.txt_”扩展名。

例如

ocr.bat c:\temp\xyz.pdf

将生成 _c:\temp\xyz.pdf.txt_ 文件。

IFilter 接口

现在我有一个简单的批处理过程来提取任何图像和/或 PDF 文件中的文本。要使其在 SharePoint(或任何使用 Microsoft 索引技术的其他产品)中使用,我需要创建一个 IFilter 组件。这是一个 Microsoft 索引使用的插件,用于搜索特殊文件格式(例如 Office、PDF 等)。

在这里,有一种正确的方法和一种快捷的方法。我必须承认我的过错——我选择了快捷方式。事情是这样的,我使用的所有组件都有 C/C++ API,要做好,我应该将所有东西整合起来创建一个组件。相反,我决定只运行我之前设置的批处理过程。这速度稍慢,但至少我不用担心我不熟悉的内存泄漏和页面错误。

因此,我下载了 Microsoft Platform SDK,让 SmpFilt 工作,更改了 GUID,让它运行我的 _OCR.BAT_ ——就这样,我自己的 OCR 插件就完成了,可以集成到 Microsoft Indexing 中了。

在这里,我跳过了一些调试 IFilter 的痛苦和汗水,处理多字节到单字节字符串的转换,以及所有那些让 Microsoft COM 开发在全球范围内“备受喜爱”的乐趣。但本文的目的不是教你如何用 C++ 进行 COM 开发或如何开发 IFilter。

完成并注册了你的过滤器后,Platform SDK 提供了两个用于测试 IFilter 的实用程序:filtdump.exefiltreg.exe——你可以使用它们来确保你的过滤器已注册并正常工作。

SharePoint 注册

Microsoft IFilter 模板会为索引服务进行适当的注册,但 SharePoint 需要额外的条目。在下载文件中,有一个 _bin\wss_reg.reg_ 文件,它将注册 SharePoint 相关的条目。不过,我建议你在尝试注册 _wss_reg_ 文件之前,先备份 **HKLM\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0** 注册表项——以防万一。

顺便说一下,由于我没有安装程序,DLL(_OcrFilt.dll_)也需要手动注册。

regsvr32 OcrFilt.dll

安装摘要

其他注意事项

  • 我使用的是 WSS SP2。如果你的 SharePoint 版本不同,你的 WSS 注册条目可能也会不同。请检查你是否具有 _HKLM\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\Search\Applications\e5ecafdd-0ed4-42fa-b663-c38046ae5ec8_ 注册表项。如果没有,则可能需要更新 _wss-reg.reg_ 文件。
  • SharePoint 在 _HKLM\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0\Search\Applications\e5ecafdd-0ed4-42fa-b663-c38046ae5ec8\Gather\Search\Extensions\ExtensionList_ 中存储其能够处理的扩展的编号列表。PDF 条目不应在那里,并且需要用下一个唯一的数字进行注册。大多数情况下,它应该是 38。请确保你的编号已达到 37。如果发现任何异常,请根据需要审查和更新 _wss_reg_。
  • 安装过滤器后,你需要重新索引现有内容或移除/添加文件。在索引完成之前,你将无法找到你的条目。_OcrFilt.dll_ 会为需要索引的每个文件在事件日志中创建条目,因此你可以跟踪进度。我不得不回收服务然后使用 _stsadm_。移除并重新添加文件也有效。
  • 出于性能原因,仅对 PDF/TIFF 文件的第一页进行 OCR。还有额外的 ImageMagic 实用程序可以在 OCR 之前将多个图像合并在一起,如果你想 OCR 整个文档的话。
  • _OCR.BAT_ 将尝试在输入图像所在的文件夹中创建一个文本文件。因此,索引过程应该对该文件夹拥有适当的权限。由于这是 WSS 创建临时文件的地方,所以这应该不是问题;然而,由于权限问题非常难以排除,所以这是需要牢记的一点。
  • 虽然你可以 OCR 任何图像类型,但 iFilter 只注册 PDF 和 TIFF 扩展名。如果你想处理其他文件类型,则需要修改 _OcrFilt.dll_ 的注册部分。

其他应用

尽管目前我只将其用于 SharePoint,但这个解决方案还有其他非常有趣的应用

  • 将 iFilter 配置为 SQL Server 的插件,允许索引存储在 BLOB 列中的 PDF 文件。
  • 结构化文档。我使用的 ImageMagic convert 实用程序能够提取图像的一部分。很容易修改批处理文件,例如提取扫描账单中包含姓名和日期的部分,以便在账单部门进行归档。

组件许可

尽管所有组件都是开源的,但你可能希望核实你公司法务部门对每个组件的许可要求没有意见。

没有比 捐赠资金 更好的方式来表达你的支持了。其次好的事情是为你喜欢的文章投票 :-)

SharePoint OCR 图像文件索引 - CodeProject - 代码之家
© . All rights reserved.