在数字时代,经常需要在云端存储和共享各种文件,如文档、照片和视频。然而,像TIFF这样的光栅图像文件格式很容易在搜索时丢失,因为Google Drive的搜索功能有限。幸运的是,开发者可以利用LEADTOOLS的OCRSDK提取文本内容,并将其添加到每个项目的IndexableTextData中。这样,光栅图像文件就可以像任何基于文本的文档(如DOC或PDF)一样被搜索。
例如,在Google Drive上传了四个普通的TIFF文件,文件名分别为OCR1到OCR4。如果仅根据文件名进行搜索,这并不十分有帮助。对于人眼来说,这些图像看起来只是文本,但Google Drive只将这些图像视为光栅数据,并且在尝试搜索扫描文档内部的内容时返回无结果。
如果没有搜索文件的方法,Google Drive将会怎样?幸运的是,Google Drive不会让失望,它使用可定制的"IndexableTextData"元数据来执行文本搜索。以下示例展示了如何使Google Drive能够根据文本内容找到这些TIFF文档,而无需修改原始图像。
此应用程序的第一步是为应用程序启用Google Drive API,以便检索ClientID和ClientSecret。稍后将在上传和修改TIFF时使用Google Drive API。最后,必须下载Google客户端库以供解决方案引用。有关设置.NET应用程序以与Google Drive接口的更详细信息,请访问https://developers.google.com/drive/quickstart-cs。
在应用程序中,将在WebBrowser控件中打开用户授权Uri,以便用户可以输入他的Google用户名和密码。用户登录后,可以从WebBrowser控件的标题中获取授权码。
现在应用程序已登录并获得授权访问Google Drive,可以搜索账户中的所有TIFF文件。
C#
FileList fileList = googleDriveHelper.GetFilesList();
IEnumerable tiffFilesEnumerable =
fileList.Items.Where(
file => file.MimeType ==
"
image/tiff"
&& file.ExplicitlyTrashed !=
true
&& file.UserPermission.Role ==
"
owner"
);
foreach
(File file
in
tiffFilesEnumerable)
{
UpdateIndexableTextData(file);
}
最后,可以使用LEADTOOLSOCR引擎获取每个TIFF文件及其所有页面的文本。创建IOcrEngine和IOcrDocument后,RecognizeText函数将返回页面上提取的所有文本的字符串值,然后更新Google Drive中的IndexableTextData元数据。
C#
void
UpdateIndexableTextData(File file)
{
StringBuilder indexableText =
new
StringBuilder();
//
Get a .NET stream of the document
using
(System.IO.Stream stream = googleDriveHelper.GetFileAsStream(file))
{
//
Create an instance of LEADTOOLS OCR engine
using
(IOcrEngine ocrEngine =
OcrEngineManager.CreateEngine(OcrEngineType.Advantage,
false
))
{
//
Start the engine using default parameters
ocrEngine.Startup(
null
,
null
,
null
,
null
);
//
Get the number of pages in the document
int
pageCount;
using
(CodecsImageInfo imageInfo =
ocrEngine.RasterCodecsInstance.GetInformation(stream,
true
))
{
pageCount = imageInfo.TotalPages;
}
//
Create OCR Document
using
(IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument())
{
//
For each page in the document, recognize it
for
(
int
page =
1
; page <= pageCount; page++)
{
ocrDocument.Pages.AddPages(stream, page, page,
null
);
//
Google Drive specific indexable text setup
indexableText.AppendFormat(
"
"
, page);
//
Add the OCR text
indexableText.Append(ocrDocument.Pages[0].RecognizeText(
null
));
indexableText.Append(
"
"
);
//
Clear the document in prepartion for next page
ocrDocument.Pages.Clear();
}
}
}
}
file.IndexableText =
new
File.IndexableTextData();
file.IndexableText.Text = indexableText.ToString();
googleDriveHelper.UpdateFileMetadata(file);
}
现在已经处理了Google Drive中的所有TIFF文件,它们可以通过文档中的文本进行搜索,即使它们实际上是没有文本数据的光栅图像。
可以下载包含上述功能的完整功能演示。要运行此示例,将需要以下内容:
将附加的ZIP项目解压缩到LEADTOOLS示例目录(例如C:\LEADTOOLS 18\Examples\)