C#项目中如何实现和执行OCR?我在谷歌上搜索了一段时间,我看到了所有OCR库请求。我想知道如何实现最纯粹、易于安装和使用的OCR库以及安装到C#项目的详细信息。如果可行,我将像通常的dll参考一样实现它...示例:usingorg.pdfbox.pdmodel;使用org.pdfbox.util;还有一个小的OCR代码示例会很好,例如:publicstringOCRFromBitmap(BitmapBmp){Bmp.Save(temppath,System.Drawing.Imaging.ImageFormat.Tiff);字符串OcrResult=分析(临时路径);文件.删除(临时路径);返回OcrResult;所以请考虑我不熟悉OCR项目,并给我一个像和假人说话一样的答案。编辑:我想人们误解了我的要求。我想知道如何将这些开源OCR库实现到C#项目以及如何使用它们。作为重复提供的链接没有给出我要求的答案。这是一个:(查看http://hongouru.blogspot.ie/2011/09/c-ocr-optical-character-recognition.html或http://www.codeproject.com/Articles/41709/How-To-使用-Office-2007-OCR-Using-C获取更多信息)使用MODI;staticvoidMain(string[]args){DocumentClassmyDoc=newDocumentClass();myDoc.Create(@"theDocumentName.tiff");//我们使用.tiff扩展名myDoc.OCR(MiLANGUAGES.miLANG_ENGLISH,true,true);foreach(ImageanImageinmyDoc.Images){Console.WriteLine(anImage.Layout.Text);//这里我们cout到控制台。如果有人正在研究这个,我一直在尝试不同的选项,下面的方法产生了非常好的结果。以下是获得工作示例的步骤:将tesseract的.NETWrapper添加到您的项目中。它可以通过NuGet包Install-PackageTesseract(https://github.com/charlesw/tesseract)添加。转到官方Tesseract项目(http://sofzh.miximages.com/c%23/)的下载部分,将文件复制到项目目录中,并将其设置为在构建时复制。在项目中创建以下两个文件(只是为了开始):Program.cs中usingSystem;使用超正方体;使用系统诊断;namespaceConsoleApplication{classProgram{publicstaticvoidMain(string[]args){vartestImagePath="./phototest.tif";如果(args.Length>0){testImagePath=args[0];}try{varlogger=newFormattedConsoleLogger();varresultPrinter=newResultPrinter(记录器);使用(varengine=newTesseractEngine(@"./tessdata","eng",EngineMode.Default)){使用(varimg=Pix.LoadFromFile(testImagePath)){使用(logger.Begin("Processimage")){变量i=1;使用(varpage=engine.Process(img)){vartext=page.GetText();logger.Log("文本:{0}",text);logger.Log("平均置信度:{0}",page.GetMeanConfidence());使用(variter=page.GetIterator()){iter.Begin();do{if(i%2==0){using(logger.Begin("Line{0}",i)){do{using(logger.Begin("WordIteration")){if(iter.IsAtBeginningOf(PageIteratorLevel.Block)){logger.Log("新区块");}我f(iter.IsAtBeginningOf(PageIteratorLevel.Para)){logger.Log("新段落");}if(iter.IsAtBeginningOf(PageIteratorLevel.TextLine)){logger.Log("换行");}logger.Log("word:"+iter.GetText(PageIteratorLevel.Word));while(iter.Next(PageIteratorLevel.TextLine,PageIteratorLevel.Word));我++;}while(iter.Next(PageIteratorLevel.Para,PageIteratorLevel.TextLine));}}}}}}catch(Exceptione){Trace.TraceError(e.ToString());Console.WriteLine("意外错误:"+e.Message);Console.WriteLine("详细信息:");Console.WriteLine(e.ToString());}Console.Write("按任意键继续...");控制台.ReadKey(true);}privateclassResultPrinter{readonlyFormattedConsoleLogger记录器;publicResultPrinter(FormattedConsoleLoggerlogger){this.logger=logger;}publicvoidPrint(ResultIteratoriter){logger.Log("是块的开始:{0}",iter.IsAtBeginningOf(PageIteratorLevel.Block));logger.Log("是段落的开头:{0}",iter.IsAtBeginningOf(PageIteratorLevel.Para));logger.Log("是文本行的开头:{0}",iter.IsAtBeginningOf(PageIteratorLevel.TextLine));logger.Log("是单词的开头:{0}",iter.IsAtBeginningOf(PageIteratorLevel.Word));logger.Log("Isbeginningofsymbol:{0}",iter.IsAtBeginningOf(PageIteratorLevel.Symbol));logger.Log("块文本:"{0}"",iter.GetText(PageIteratorLevel.Block));logger.Log("段落文本:"{0}"",iter.GetText(PageIteratorLevel.Para));logger.Log("TextLine文本:"{0}"",iter.GetText(PageIteratorLevel.TextLine));logger.Log("Word文本:"{0}"",iter.GetText(PageIteratorLevel.Word));logger.Log("符号文本:"{0}"",iter.GetText(PageIteratorLevel.Symbol));}}}}FormattedConsoleLogger.cs使用系统;使用System.Collections.Generic;使用系统文本;使用超正方体;namespaceConsoleApplication{publicclassFormattedConsoleLogger{conststringTab="";私有类范围:DisposableBase{privateintindentLe速度;私有字符串缩进;私有FormattedConsoleLogger容器;publicSc??ope(FormattedConsoleLoggercontainer,intindentLevel){this.container=container;this.indentLevel=indentLevel;StringBuilder缩进=newStringBuilder();for(inti=0;ii&&message[i]=='r'&&message[i+1]=='n'){indentedMessage.AppendLine();是新线=真;我+=2;}elseif(message[i]=='r'||message[i]=='n'){indentedMessage.AppendLine();是新线=真;我++;}else{if(isNewLine){indentedMessage.Append(indent);isNewLine=false;}indentedMessage.Append(消息[i]);我++;}}Console.WriteLine(indentedMessage.ToString());}publicSc??opeBegin(){returnnewScope(container,indentLevel+1);}protectedoverridevoidDispose(booldisposing){if(disposing){varscope=container.scopes.Pop();if(scope!=this){thrownewInvalidOperationException("格式化范围被乱序删除。");}}}}私人堆栈范围=新堆();publicIDisposableBegin(stringtitle="",paramsobject[]args){Log(title,args);范围范围;if(scopes.Count==0){scope=newScope(this,1);}else{scope=ActiveScope.Begin();范围。推(范围);返回范围;}publicvoidLog(stringformat,paramsobject[]args){if(scopes.Count>0){ActiveScope.Log(format,args);}else{Console.WriteLine(String.Format(format,args));}}privateScopeActiveScope{get{vartop=scopes.Peek();if(top==null)thrownewInvalidOperationException("Nocurrentscope");返回顶部;}}}}我正在使用带有TessNet2的tesseractOCR引擎(一个C#包安装器–http://www.pixel-technology.com/freeware/tessnet2/)一些基本代码:usingtessnet2;...位图图像=新位图(@“u:用户文件bwalker2849257.tif”);tessnet2.Tesseractocr=newtessnet2.Tesseract();ocr.SetVariable("tessedit_char_whitelist","0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.,$-/#&=()"':?");//接受的字符ocr.Init(@"C:UsersbwalkerDocumentsVisualStudio2010ProjectstessnetWin","binFormstessRenetleasein);//你的tessdata文件夹的目录,"+word.Text+","+word.Left+","+word.Top+","+word.Bottom+","+word.Right+"n";}有一个.NET包装器对于Tesseract3.01:https://github.com/charlesw/tesseract-ocr-dotnet另一种选择是使用具有内置OCR功能的Neevia文档转换器。您几乎可以运行任何文件类型,它会生成一个重要的大型文本文档的pdf,然后您可以使用ITextSharper打开和搜索如果所有共享内容对您有用并且您需要了解更多有关C#学习教程,我希望你会更加关注它。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
