Exemplo simples de Tesseract OCR

Podem dar-me um exemplo simples de testar o Tesseract OCR? de preferência em C#.
Tentei a demo encontrada aqui. Descarreguei o conjunto de dados inglês e abri O fecho na unidade C. e modificou o código da seguinte forma:

string path = @"C:\pic\mytext.jpg";
Bitmap image = new Bitmap(path);
Tesseract ocr = new Tesseract();
ocr.SetVariable("tessedit_char_whitelist", "0123456789"); // If digit only
ocr.Init(@"C:\tessdata\", "eng", false); // To use correct tessdata
List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);
foreach (tessnet2.Word word in result)
    Console.WriteLine("{0} : {1}", word.Confidence, word.Text);
Infelizmente, o código não funciona. o programa morre em " ocr.Inicial(..." linha. Nem sequer consegui abrir uma excepção, mesmo usando o "tentar apanhar".

consegui executar o vietocr! mas esse é um projeto muito grande para eu seguir. eu preciso um exemplo simples como o acima.

Obrigado.
Author: Daniel Li, 2013-05-17

8 answers

Está bem. Encontrei a solução aqui. tessnet2 não carrega the Ans given by Adam Aparentemente estava a usar a versão errada de tessdata. Eu estava seguindo a instrução a página de origem intuitivamente e isso causou o problema. Diz:

Utilização Rápida do Tessnet2

  1. Transferir o binário aqui , adicionar uma referência do conjunto Tessnet2.fale com o seu Projecto. Net.

  2. Obter os dados da língua ficheiro de definição aqui e coloca-o na pasta tessdata. O directório Tessdata e o seu exe devem estar no o mesmo directório.

Depois de baixar o binário, quando você segue o link para baixar o arquivo do idioma, há muitos arquivos de linguagem. mas nenhum deles é a versão certa. você precisa selecionar toda a versão e ir para a próxima página para a versão correta (tesseract-2.00.eng! Eles devem atualizar o link de download binário para a versão 3 ou colocar a versão 2 arquivo de idioma na primeira página. Ou, pelo menos, ousado mencionar o fato de que esta edição da versão é um grande negócio!

Seja como for, encontrei-o. Obrigado a todos.
 18
Author: Will Robinson, 2017-05-23 12:26:03

Um exemplo simples de testar Tesseract OCR em C#:

    public static string GetText(Bitmap imgsource)
    {
        var ocrtext = string.Empty;
        using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
        {
            using (var img = PixConverter.ToPix(imgsource))
            {
                using (var page = engine.Process(img))
                {
                    ocrtext = page.GetText();
                }
            }
        }

        return ocrtext;
    }

Informação: a pasta tessdata deve existir no repositório: bin\Debug\

 2
Author: Adolfo Alejandro Araya, 2016-10-04 13:34:13

Tente actualizar a linha para:

Ocr.Init (@"c:\", "eng", false); // a localização aqui deve ser a pasta-mãe do tessdata

 1
Author: Rachel, 2013-05-17 08:12:08
Tive o mesmo problema, agora está resolvido. Tenho o tesseract2, sob estas pastas para 32 bits e 64 bits, copiei a pasta de 64 bits (como o meu sistema é 64 bits) para a pasta principal ("Tesseract2") e para a pasta bin/Debug. Agora a minha solução está a funcionar bem.
 0
Author: Prasad, 2013-12-17 06:46:26
No meu caso, tinha tudo isto trabalhado, excepto o reconhecimento correcto do carácter.

Mas tens de considerar estas poucas coisas:

  • usar a biblioteca tessnet2 correcta
  • utilizar a versão linguística tessdata correcta
  • tessdata deve estar em algum lugar fora da sua pasta de aplicação onde você pode colocar em um caminho completo no parâmetro init. utilizar ocr.Init(@"c:\tessdata", "eng", true);
  • A depuração causa-lhe dores de cabeça. Então você precisa atualizar seu aplicativo.configuracao usar. (I can't put the xml code aqui. dá - me o teu e-mail e eu mando-to por e-mail.
Espero que isto ajude.
 0
Author: Muadzir Aziz, 2015-04-10 07:28:33

Aqui está um grande projecto de exemplo de trabalho; Tesseract OCR Sample (Visual Studio) com Leptonica pré-processamento Tesseract OCR Sample (Visual Studio) with Leptonica Preprocessing

A API Tesseract OCR 3.02.02 pode ser confusa, por isso isto orienta-o através da inclusão do Tesseract e da Leptonica dll num projecto C++ de estúdio Visual, e fornece um ficheiro de exemplo que toma um caminho de imagem para pré-processamento e OCR. O programa de pré-processamento em Leptonica converte a imagem de entrada em texto a preto e branco.

Configuração

Para incluir isto nos seus próprios projectos, terá de referenciar os ficheiros de cabeçalho e lib e copiar as pastas de tessdata e dlls.

Copia a pasta de inclusão do tesseract para a pasta raiz do seu projecto. Agora clique em seu projeto no Visual Studio Solution Explorer, e vá para Project>Properties.

As Pastas VC++ > incluem Directórios:

..\tesseract-include\tesseract;..\tesseract-include\leptonica;$(IncludePath) C / C++>Pré-Processador>Definições Do Pré-Processador:

_CRT_ SECURE_ NO_ warnings;%(pré-Processesordefinitions) C / C++>Linker>Input>Dependências Adicionais:

..\tesseract-include\libtesseract302.dado;..\tesseract-include\liblept168.lib;%(dependências adicionais) Agora você pode incluir cabeçalhos no arquivo do seu projeto:

Inclui

Inclui

Agora copia os dois. os ficheiros no tesseract-incluem e a pasta tessdata na depuração para a pasta de saída do seu projecto.

Quando inicializar o tesseract, terá de indicar a localização da pasta-mãe (!importante) da pasta tessdata, se não for já a pasta actual do seu ficheiro executável. Você pode copiar meu script, que assume que tessdata está instalado na pasta do executável.

Tesseract:: TessBaseAPI * api = novo tesseract:: TessBaseAPI (); api->Init("D:\tessdataParentFolder\", ... Amostra

Você pode compilar a amostra fornecida, que leva um argumento da linha de comandos do caminho da imagem a usar. A função preprocess() usa Leptonica para criar uma cópia em preto e branco da imagem que faz o tesseract funcionar com 90% de precisão. A função ocr () mostra a funcionalidade da API Tesseract para retornar uma saída de texto. A toClipboard () pode ser usada para gravar texto para a área de transferência no Windows. Você pode copiá-los em seus próprios projetos.

 0
Author: Alex G, 2016-07-08 13:39:07

Consegui que funcionasse seguindo estas instruções .

  • Obter o código da amostra Tesseract sample code

  • Abre-o para uma nova localização

  • Abrir ~\tesseract-samples-master\src\Tesseract.Exemplo.sln (I used Visual Studio 2017)

  • Instalar o pacote 'Tesseract NuGet' para esse projecto (ou desinstalar/reinstalar como tinha de ser) NuGet Tesseract

  • Descomentar os dois últimos significantes linhas em Tesseract.Exemplo.Programa.cs: Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

  • Executar (hit F5)

  • Deverá obter esta saída da consola do windows enter image description here

 0
Author: Doppelganger, 2018-01-23 14:02:24
{[[2]} isto funcionou para mim, eu tinha 3-4 mais PDF para extrair texto e se um não funciona o outro vai... tesseract em particular este código pode ser usado no Windows 7, 8, Server 2008 . Espero que isto te ajude.
    do
    {
    // Sleep or Pause the Thread for 1 sec, if service is running too fast...
    Thread.Sleep(millisecondsTimeout: 1000);
    Guid tempGuid = ToSeqGuid();
    string newFileName = tempGuid.ToString().Split('-')[0];
    string outputFileName = appPath + "\\pdf2png\\" + fileNameithoutExtension + "-" + newFileName +
                            ".png";
    extractor.SaveCurrentImageToFile(outputFileName, ImageFormat.Png);
    // Create text file here using Tesseract
    foreach (var file in Directory.GetFiles(appPath + "\\pdf2png"))
    {
        try
        {
            var pngFileName = Path.GetFileNameWithoutExtension(file);
            string[] myArguments =
            {
                "/C tesseract ", file,
                " " + appPath + "\\png2text\\" + pngFileName
            }; // /C for closing process automatically whent completes
            string strParam = String.Join(" ", myArguments);

            var myCmdProcess = new Process();
            var theProcess = new ProcessStartInfo("cmd.exe", strParam)
            {
                CreateNoWindow = true,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                WindowStyle = ProcessWindowStyle.Minimized
            }; // Keep the cmd.exe window minimized
            myCmdProcess.StartInfo = theProcess;
            myCmdProcess.Exited += myCmdProcess_Exited;
            myCmdProcess.Start();

            //if (process)
            {
                /*
                MessageBox.Show("cmd.exe process started: " + Environment.NewLine +
                                "Process Name: " + myCmdProcess.ProcessName +
                                Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                + Environment.NewLine + "process.Handle: " +
                                myCmdProcess.Handle);
                */
                Process.EnterDebugMode();
                //ShowWindow(hWnd: process.Handle, nCmdShow: 2);
                /*
                MessageBox.Show("After EnterDebugMode() cmd.exe process Exited: " +
                                Environment.NewLine +
                                "Process Name: " + myCmdProcess.ProcessName +
                                Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                + Environment.NewLine + "process.Handle: " +
                                myCmdProcess.Handle);
                */
                myCmdProcess.WaitForExit(60000);
                /*
                MessageBox.Show("After WaitForExit() cmd.exe process Exited: " +
                                Environment.NewLine +
                                "Process Name: " + myCmdProcess.ProcessName +
                                Environment.NewLine + " Process Id: " + myCmdProcess.Id
                                + Environment.NewLine + "process.Handle: " +
                                myCmdProcess.Handle);
                */
                myCmdProcess.Refresh();
                Process.LeaveDebugMode();
                //myCmdProcess.Dispose();
                /*
                MessageBox.Show("After LeaveDebugMode() cmd.exe process Exited: " +
                                Environment.NewLine);
                */
            }


            //process.Kill();
            // Waits for the process to complete task and exites automatically
            Thread.Sleep(millisecondsTimeout: 1000);

            // This works fine in Windows 7 Environment, and not in Windows 8
            // Try following code block
            // Check, if process is not comletey exited

            if (!myCmdProcess.HasExited)
            {
                //process.WaitForExit(2000); // Try to wait for exit 2 more seconds
                /*
                MessageBox.Show(" Process of cmd.exe was exited by WaitForExit(); Method " +
                                Environment.NewLine);
                */
                try
                {
                    // If not, then Kill the process
                    myCmdProcess.Kill();
                    //myCmdProcess.Dispose();
                    //if (!myCmdProcess.HasExited)
                    //{
                    //    myCmdProcess.Kill();
                    //}

                    MessageBox.Show(" Process of cmd.exe exited ( Killed ) successfully " +
                                    Environment.NewLine);
                }
                catch (System.ComponentModel.Win32Exception ex)
                {
                    MessageBox.Show(
                        " Exception: System.ComponentModel.Win32Exception " +
                        ex.ErrorCode + Environment.NewLine);
                }
                catch (NotSupportedException notSupporEx)
                {
                    MessageBox.Show(" Exception: NotSupportedException " +
                                    notSupporEx.Message +
                                    Environment.NewLine);
                }
                catch (InvalidOperationException invalidOperation)
                {
                    MessageBox.Show(
                        " Exception: InvalidOperationException " +
                        invalidOperation.Message + Environment.NewLine);
                    foreach (
                        var textFile in Directory.GetFiles(appPath + "\\png2text", "*.txt",
                            SearchOption.AllDirectories))
                    {
                        loggingInfo += textFile +
                                       " In Reading Text from generated text file by Tesseract " +
                                       Environment.NewLine;
                        strBldr.Append(File.ReadAllText(textFile));
                    }
                    // Delete text file after reading text here
                    Directory.GetFiles(appPath + "\\pdf2png").ToList().ForEach(File.Delete);
                    Directory.GetFiles(appPath + "\\png2text").ToList().ForEach(File.Delete);
                }
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(
                " Cought Exception in Generating image do{...}while{...} function " +
                Environment.NewLine + exception.Message + Environment.NewLine);
        }
    }
    // Delete png image here
    Directory.GetFiles(appPath + "\\pdf2png").ToList().ForEach(File.Delete);
    Thread.Sleep(millisecondsTimeout: 1000);
    // Read text from text file here
    foreach (var textFile in Directory.GetFiles(appPath + "\\png2text", "*.txt",
        SearchOption.AllDirectories))
    {
        loggingInfo += textFile +
                       " In Reading Text from generated text file by Tesseract " +
                       Environment.NewLine;
        strBldr.Append(File.ReadAllText(textFile));
    }
    // Delete text file after reading text here
    Directory.GetFiles(appPath + "\\png2text").ToList().ForEach(File.Delete);
} while (extractor.GetNextImage()); // Advance image enumeration... 
 0
Author: Kaushal B, 2018-08-20 08:20:29