C# tesseract 只扫描第一个 .tiff 页面
Posted
技术标签:
【中文标题】C# tesseract 只扫描第一个 .tiff 页面【英文标题】:C# tesseract only scanns first .tiff Page 【发布时间】:2022-01-17 00:49:59 【问题描述】:我目前正在尝试对一些 .tiff 文件进行 OCR。显然,“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:\Users\f.rigo\source\repos\FinalScanner\FinalScanner\bin\Debug\net5.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 页及以后的页面,您有什么建议吗?
【问题讨论】:
【参考方案1】:下面的代码展示了如何使用 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)【讨论】:
以上是关于C# tesseract 只扫描第一个 .tiff 页面的主要内容,如果未能解决你的问题,请参考以下文章
如何从图像生成 tiff/box 文件以在 Windows 中训练 Tesseract
如何在新的app界面中的jTessBoxEditor(tesseract)中生成tiff / box?
为啥我在 Tesseract 中收到“tiff page 1 not found”Lebtonica 警告?