我正在编写一个程序,当给出一张低级数学问题的图片(如98*13)时,能够输出答案。数字是黑色的,背景是白色的。不是验证码,只是一个数学问题的图片。
这些数学问题只有两个数字和一个运算符,而该运算符只会是+、-、*或/。
显然,我知道如何进行计算;)只是不确定如何获取图像中的文本。
一个免费的库是理想的...虽然如果我必须自己编写代码,我可能可以应对。
我正在编写一个程序,当给出一张低级数学问题的图片(如98*13)时,能够输出答案。数字是黑色的,背景是白色的。不是验证码,只是一个数学问题的图片。
这些数学问题只有两个数字和一个运算符,而该运算符只会是+、-、*或/。
显然,我知道如何进行计算;)只是不确定如何获取图像中的文本。
一个免费的库是理想的...虽然如果我必须自己编写代码,我可能可以应对。
为了从图片中提取文字,我使用最精准的开源OCR引擎:Tesseract。可以在这里或者直接在你的NuGet包中找到。
以下是我的C#函数,它可以从传入的sourceFilePath
图片中提取文字。将EngineMode设置为TesseractAndCube;它可以检测到比其他选项更多的单词。
var path = "YourSolutionDirectoryPath";
using (var engine = new TesseractEngine(path + Path.DirectorySeparatorChar + "tessdata", "fra", EngineMode.TesseractAndCube))
{
using (var img = Pix.LoadFromFile(sourceFilePath))
{
using (var page = engine.Process(img))
{
var text = page.GetText();
// text variable contains a string with all words found
}
}
}
Document modiDocument = new Document();
modiDocument.Create(filePath);
modiDocument.OCR(MiLANGUAGES.miLANG_ENGLISH);
MODI.Image modiImage = (modiDocument.Images[0] as MODI.Image);
string extractedText = modiImage.Layout.Text;
modiDocument.Close();
return extractedText;
using IronOcr;
var Ocr = new IronTesseract();
Ocr.UseCustomTesseractLanguageFile("languages/equ.traineddata");
using (var Input = new OcrInput(@"images\equation.png"))
{
var Result = Ocr.Read(Input);
Console.WriteLine(Result.Text);
}