source open net ironocr iron examples example codeproject c# ocr

open - ¿Cómo implementar y hacer OCR en un proyecto de C#?



tesseract ocr c# examples (5)

He estado buscando por un tiempo y todo lo que he visto algunas solicitudes de biblioteca OCR. Me gustaría saber cómo implementar la biblioteca de OCR más pura, fácil de instalar y usar con información detallada para la instalación en un proyecto de C #.

Si es posible, solo quiero implementarlo como una referencia habitual de dll ...

Ejemplo:

using org.pdfbox.pdmodel; using org.pdfbox.util;

También sería bueno un pequeño ejemplo de código OCR, como:

public string OCRFromBitmap(Bitmap Bmp) { Bmp.Save(temppath, System.Drawing.Imaging.ImageFormat.Tiff); string OcrResult = Analyze(temppath); File.Delete(temppath); return OcrResult; }

Entonces, por favor, tenga en cuenta que no estoy familiarizado con los proyectos de OCR y dame una respuesta como hablar con un tonto.

Edit: supongo que la gente malentendió mi solicitud. Quería saber cómo implementar esas bibliotecas de código abierto de OCR en un proyecto de C # y cómo usarlas. El enlace dado como dup no da respuestas que solicité en absoluto.


Aquí hay uno: (visite http://hongouru.blogspot.ie/2011/09/c-ocr-optical-character-recognition.html o http://www.codeproject.com/Articles/41709/How-To-Use-Office-2007-OCR-Using-C para obtener más información

using MODI; static void Main(string[] args) { DocumentClass myDoc = new DocumentClass(); myDoc.Create(@"theDocumentName.tiff"); //we work with the .tiff extension myDoc.OCR(MiLANGUAGES.miLANG_ENGLISH, true, true); foreach (Image anImage in myDoc.Images) { Console.WriteLine(anImage.Layout.Text); //here we cout to the console. } }


Estoy usando el motor de OCR tesseract con TessNet2 (un envoltorio de C # - http://www.pixel-technology.com/freeware/tessnet2/ ).

Algún código básico:

using tessnet2;

...

Bitmap image = new Bitmap(@"u:/user files/bwalker/2849257.tif"); tessnet2.Tesseract ocr = new tessnet2.Tesseract(); ocr.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.,$-/#&=()/"'':?"); // Accepted characters ocr.Init(@"C:/Users/bwalker/Documents/Visual Studio 2010/Projects/tessnetWinForms/tessnetWinForms/bin/Release/", "eng", false); // Directory of your tessdata folder List<tessnet2.Word> result = ocr.DoOCR(image, System.Drawing.Rectangle.Empty); string Results = ""; foreach (tessnet2.Word word in result) { Results += word.Confidence + ", " + word.Text + ", " + word.Left + ", " + word.Top + ", " + word.Bottom + ", " + word.Right + "/n"; }



Otra opción para esto es usar Neevia Document Converter que tiene capacidad incorporada de OCR. Puede ejecutar prácticamente cualquier tipo de archivo y producirá un pdf que es esencial para un gran documento de texto, que luego puede abrir y buscar utilizando ITextSharper


Si alguien está investigando esto, he estado probando diferentes opciones y el siguiente enfoque produce muy buenos resultados. Los siguientes son los pasos para obtener un ejemplo de trabajo:

  1. Agregue .NET Wrapper para tesseract a su proyecto. Se puede agregar a través del paquete NuGet Install-Package Tesseract ( https://github.com/charlesw/tesseract ).
  2. Vaya a la sección de Downloads del proyecto oficial de Tesseract ( Tesseract EDIT: ahora se encuentra aquí: https://github.com/tesseract-ocr/langdata ).
  3. Descargue los datos de idioma preferido, por ejemplo: tesseract-ocr-3.02.eng.tar.gz English language data for Tesseract 3.02 .
  4. Cree tessdata directorio de tessdata en su proyecto y coloque los archivos de datos de idioma en él.
  5. Vaya a Properties de los archivos recién agregados y configúrelos para que se copien en la compilación.
  6. Añadir una referencia a System.Drawing .
  7. Desde el repositorio de .NET Wrapper, en el directorio de Samples , copie el archivo phototest.tif muestra en el directorio de su proyecto y phototest.tif para que se copie en la compilación.
  8. Cree los siguientes dos archivos en su proyecto (solo para comenzar):

Program.cs

using System; using Tesseract; using System.Diagnostics; namespace ConsoleApplication { class Program { public static void Main(string[] args) { var testImagePath = "./phototest.tif"; if (args.Length > 0) { testImagePath = args[0]; } try { var logger = new FormattedConsoleLogger(); var resultPrinter = new ResultPrinter(logger); using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) { using (var img = Pix.LoadFromFile(testImagePath)) { using (logger.Begin("Process image")) { var i = 1; using (var page = engine.Process(img)) { var text = page.GetText(); logger.Log("Text: {0}", text); logger.Log("Mean confidence: {0}", page.GetMeanConfidence()); using (var iter = page.GetIterator()) { iter.Begin(); do { if (i % 2 == 0) { using (logger.Begin("Line {0}", i)) { do { using (logger.Begin("Word Iteration")) { if (iter.IsAtBeginningOf(PageIteratorLevel.Block)) { logger.Log("New block"); } if (iter.IsAtBeginningOf(PageIteratorLevel.Para)) { logger.Log("New paragraph"); } if (iter.IsAtBeginningOf(PageIteratorLevel.TextLine)) { logger.Log("New line"); } logger.Log("word: " + iter.GetText(PageIteratorLevel.Word)); } } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word)); } } i++; } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine)); } } } } } } catch (Exception e) { Trace.TraceError(e.ToString()); Console.WriteLine("Unexpected Error: " + e.Message); Console.WriteLine("Details: "); Console.WriteLine(e.ToString()); } Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } private class ResultPrinter { readonly FormattedConsoleLogger logger; public ResultPrinter(FormattedConsoleLogger logger) { this.logger = logger; } public void Print(ResultIterator iter) { logger.Log("Is beginning of block: {0}", iter.IsAtBeginningOf(PageIteratorLevel.Block)); logger.Log("Is beginning of para: {0}", iter.IsAtBeginningOf(PageIteratorLevel.Para)); logger.Log("Is beginning of text line: {0}", iter.IsAtBeginningOf(PageIteratorLevel.TextLine)); logger.Log("Is beginning of word: {0}", iter.IsAtBeginningOf(PageIteratorLevel.Word)); logger.Log("Is beginning of symbol: {0}", iter.IsAtBeginningOf(PageIteratorLevel.Symbol)); logger.Log("Block text: /"{0}/"", iter.GetText(PageIteratorLevel.Block)); logger.Log("Para text: /"{0}/"", iter.GetText(PageIteratorLevel.Para)); logger.Log("TextLine text: /"{0}/"", iter.GetText(PageIteratorLevel.TextLine)); logger.Log("Word text: /"{0}/"", iter.GetText(PageIteratorLevel.Word)); logger.Log("Symbol text: /"{0}/"", iter.GetText(PageIteratorLevel.Symbol)); } } } }

FormattedConsoleLogger.cs

using System; using System.Collections.Generic; using System.Text; using Tesseract; namespace ConsoleApplication { public class FormattedConsoleLogger { const string Tab = " "; private class Scope : DisposableBase { private int indentLevel; private string indent; private FormattedConsoleLogger container; public Scope(FormattedConsoleLogger container, int indentLevel) { this.container = container; this.indentLevel = indentLevel; StringBuilder indent = new StringBuilder(); for (int i = 0; i < indentLevel; i++) { indent.Append(Tab); } this.indent = indent.ToString(); } public void Log(string format, object[] args) { var message = String.Format(format, args); StringBuilder indentedMessage = new StringBuilder(message.Length + indent.Length * 10); int i = 0; bool isNewLine = true; while (i < message.Length) { if (message.Length > i && message[i] == ''/r'' && message[i + 1] == ''/n'') { indentedMessage.AppendLine(); isNewLine = true; i += 2; } else if (message[i] == ''/r'' || message[i] == ''/n'') { indentedMessage.AppendLine(); isNewLine = true; i++; } else { if (isNewLine) { indentedMessage.Append(indent); isNewLine = false; } indentedMessage.Append(message[i]); i++; } } Console.WriteLine(indentedMessage.ToString()); } public Scope Begin() { return new Scope(container, indentLevel + 1); } protected override void Dispose(bool disposing) { if (disposing) { var scope = container.scopes.Pop(); if (scope != this) { throw new InvalidOperationException("Format scope removed out of order."); } } } } private Stack<Scope> scopes = new Stack<Scope>(); public IDisposable Begin(string title = "", params object[] args) { Log(title, args); Scope scope; if (scopes.Count == 0) { scope = new Scope(this, 1); } else { scope = ActiveScope.Begin(); } scopes.Push(scope); return scope; } public void Log(string format, params object[] args) { if (scopes.Count > 0) { ActiveScope.Log(format, args); } else { Console.WriteLine(String.Format(format, args)); } } private Scope ActiveScope { get { var top = scopes.Peek(); if (top == null) throw new InvalidOperationException("No current scope"); return top; } } } }