我当前正在尝试OCR一些.tiff文件。显然,Tesseract只扫描每个文件的第一页。我一直在搜索关于谷歌的线索,但这并不是很有帮助。 此代码应从每个.tiff文件中获取全文:
public async Task<List<string>> ScannFile(string file)
{
if (Path.GetFileName(file).EndsWith(".pdf"))
{
MessageBox.Show("Sie können nur .tiff Dokumente einscannen!");
return null;
}
else
{
List<string> PageContent = new();
await Task.Run(new Action(() =>
{
using (var engine = new TesseractEngine(@"C:Usersf.rigosourceeposFinalScannerFinalScannerinDebug
et5.0-windows/tessdata", "deu", EngineMode.TesseractOnly))
{
using (var img = Pix.LoadFromFile(file))
{
//img.Scale((float)scann_dpi / 2, (float)scann_dpi / 2);
using (var page = engine.Process(img))
{
var text = page.GetText();
PageContent = cleanOCROutput(text);
}
}
}
}));
return PageContent;
}
}
我试图通过使用for-each循环来获取完整的文件,但不幸的是,";img";不包含任何可枚举的内容。顺便说一下,我正在使用Tesseract库。作者:Charles Weld。
对于如何扫描.tiff文件的第2页及以后的页面,您有什么建议吗?
下面的代码显示如何使用NuGet包Tesseract从多页.tiff文件中提取文本。
以下内容已使用Tesseract(v4.1.1)进行了测试,并改编自OP和here。
添加以下Using语句:
using Tesseract;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Diagnostics;
注意:在下面的代码中,假定tessdata
文件夹(以及关联的文件/子文件夹)与可执行文件存在于同一目录中。
public async Task<List<string>> ScannFile(string filename)
{
if (Path.GetFileName(filename).EndsWith(".pdf"))
{
MessageBox.Show("Sie können nur .tiff Dokumente einscannen!");
return null;
}
else
{
List<string> PageContent = new List<string>();
await Task.Run(new Action(() =>
{
using (Image tiffImg = Image.FromFile(filename))
{
//create new instance
using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
{
//get total pages
int pageCount = tiffImg.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
for (int i = 0; i < pageCount; i++)
{
Debug.WriteLine(String.Format("---Page {0}---", i + 1));
//select active frame
tiffImg.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
byte[] imageBytes = null;
using (MemoryStream ms = new MemoryStream())
{
//save to MemoryStream
tiffImg.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
//copy to byte[]
imageBytes = ms.ToArray();
}
//load image
using (var img = Pix.LoadTiffFromMemory(imageBytes))
{
using (var page = engine.Process(img))
{
//get text
string imageText = page.GetText();
Debug.WriteLine("imageText: " + imageText);
//add
PageContent.Add(imageText);
}
}
}
}
}
}));
return PageContent;
}
}
资源:
Displaying multi-page tiff files using the ImageBox control and C# Fast Loading/Reading TIFF Files in C# OCR using Tesseract in C# Tesseract OCR simple example Tesseract - tessdata Tesseract - tessdata (language data files)