Tesseract OCR 文本位置
Tesseract OCR Text Position
我正在使用 tesseract 处理 OCR。我能够使应用程序运行并获得输出。在这里,我试图从发票账单中提取数据并获取提取的数据。但是输入中单词之间的间距在输出中必须相似 file.I 我现在正在获取每个单词并且 coordinates.I 需要根据坐标
导出到文本文件
代码示例:
using (var engine = new TesseractEngine(Server.MapPath(@"~/tessdata"), "eng", EngineMode.Default))
{
engine.DefaultPageSegMode = PageSegMode.AutoOsd;
// have to load Pix via a bitmap since Pix doesn't support loading a stream.
using (var image = new System.Drawing.Bitmap(imageFile.PostedFile.InputStream))
{
Bitmap bmp = Resize(image, 1920, 1080);
using (var pix = PixConverter.ToPix(image))
{
using (var page = engine.Process(pix))
{
using (var iter = page.GetIterator())
{
iter.Begin();
do
{
Rect symbolBounds;
string path = Server.MapPath("~/Output/data.txt");
if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out symbolBounds))
{
// do whatever you want with bounding box for the symbol
var curText = iter.GetText(PageIteratorLevel.Word);
//WriteToTextFile(curText, symbolBounds, path);
resultText.InnerText += curText;
// Your code here, 'rect' should containt the location of the text, 'curText' contains the actual text itself
}
} while (iter.Next(PageIteratorLevel.Word));
}
meanConfidenceLabel.InnerText = String.Format("{0:P}", page.GetMeanConfidence());
}
}
}
}
这是显示错误间距的输入和输出示例。
您可以使用 page.GetIterator()
循环浏览页面中找到的项目。对于单个项目,您可以获得 'bounding box',这是一个 Tesseract.Rect
(矩形结构),其中包含:X1
、Y1
、X2
、Y2
坐标.
Tesseract.PageIteratorLevel myLevel = /*TODO*/;
using (var page = Engine.Process(img))
using (var iter = page.GetIterator())
{
iter.Begin();
do
{
if (iter.TryGetBoundingBox(myLevel, out var rect))
{
var curText = iter.GetText(myLevel);
// Your code here, 'rect' should containt the location of the text, 'curText' contains the actual text itself
}
} while (iter.Next(myLevel));
}
没有明确的方法可以将输入中的位置用于 space 输出中的文本。您将不得不为此编写一些自定义逻辑。
您可以使用类似这样的方法来估算文本左侧所需的 space 的数量:
var padLeftSpaces = (int)Math.Round((rect.X1 / inputWidth) * outputWidthSpaces);
我正在使用 tesseract 处理 OCR。我能够使应用程序运行并获得输出。在这里,我试图从发票账单中提取数据并获取提取的数据。但是输入中单词之间的间距在输出中必须相似 file.I 我现在正在获取每个单词并且 coordinates.I 需要根据坐标
导出到文本文件代码示例:
using (var engine = new TesseractEngine(Server.MapPath(@"~/tessdata"), "eng", EngineMode.Default))
{
engine.DefaultPageSegMode = PageSegMode.AutoOsd;
// have to load Pix via a bitmap since Pix doesn't support loading a stream.
using (var image = new System.Drawing.Bitmap(imageFile.PostedFile.InputStream))
{
Bitmap bmp = Resize(image, 1920, 1080);
using (var pix = PixConverter.ToPix(image))
{
using (var page = engine.Process(pix))
{
using (var iter = page.GetIterator())
{
iter.Begin();
do
{
Rect symbolBounds;
string path = Server.MapPath("~/Output/data.txt");
if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out symbolBounds))
{
// do whatever you want with bounding box for the symbol
var curText = iter.GetText(PageIteratorLevel.Word);
//WriteToTextFile(curText, symbolBounds, path);
resultText.InnerText += curText;
// Your code here, 'rect' should containt the location of the text, 'curText' contains the actual text itself
}
} while (iter.Next(PageIteratorLevel.Word));
}
meanConfidenceLabel.InnerText = String.Format("{0:P}", page.GetMeanConfidence());
}
}
}
}
这是显示错误间距的输入和输出示例。
您可以使用 page.GetIterator()
循环浏览页面中找到的项目。对于单个项目,您可以获得 'bounding box',这是一个 Tesseract.Rect
(矩形结构),其中包含:X1
、Y1
、X2
、Y2
坐标.
Tesseract.PageIteratorLevel myLevel = /*TODO*/;
using (var page = Engine.Process(img))
using (var iter = page.GetIterator())
{
iter.Begin();
do
{
if (iter.TryGetBoundingBox(myLevel, out var rect))
{
var curText = iter.GetText(myLevel);
// Your code here, 'rect' should containt the location of the text, 'curText' contains the actual text itself
}
} while (iter.Next(myLevel));
}
没有明确的方法可以将输入中的位置用于 space 输出中的文本。您将不得不为此编写一些自定义逻辑。
您可以使用类似这样的方法来估算文本左侧所需的 space 的数量:
var padLeftSpaces = (int)Math.Round((rect.X1 / inputWidth) * outputWidthSpaces);