SharePoint OCR 图像文件索引






4.97/5 (25投票s)
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.exe 和 filtreg.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
安装摘要
- 下载并安装 GhostScript:http://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs864/gs864w32.exe
- 下载并安装 VC++ 2008 可再发行组件包:http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en
- ImageMagic convert 实用程序包含在下载文件中——但你可以获取最新版本(如果位置不同,请更新 _OCR.BAT_ 路径)
- PDFTOTEXT 包含在下载文件中——但你可以获取最新版本(如果位置不同,请更新 _OCR.BAT_ 路径)
- 创建 _HKLM\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0_ 注册表项的备份
- 注册 _bin\OcrFilt.dll_ 和 _bin\wss_reg.reg_
- 回收搜索服务并运行 _Stsadm -o spsearch -action fullcrawlstart_ 以强制重建 SharePoint 搜索数据库
其他注意事项
- 我使用的是 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 实用程序能够提取图像的一部分。很容易修改批处理文件,例如提取扫描账单中包含姓名和日期的部分,以便在账单部门进行归档。
组件许可
尽管所有组件都是开源的,但你可能希望核实你公司法务部门对每个组件的许可要求没有意见。
没有比 捐赠资金 更好的方式来表达你的支持了。其次好的事情是为你喜欢的文章投票 :-)