Tesseract OCR exemple simple
Bonjour, vous pouvez me donner un exemple simple de testing Tesseract OCR
de préférence en C#.
J'ai essayé la démo trouvé ici.
Je télécharge l'ensemble de données en anglais et décompresse le lecteur C. et modifié le code comme suit:
string path = @"C:picmytext.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);
Malheureusement, le code ne fonctionne pas. le programme meurt au "roc.Initialisation.(.." ligne. Je n'ai même pas pu obtenir une exception en utilisant try-catch.
j'ai été en mesure d'exécuter le vietocr! mais c'est une très grand projet pour moi de suivre. j'ai besoin d'un exemple simple comme ci-dessus.
Merci
8 réponses
Ok. J'ai trouvé la solution ici tessnet2 ne se charge pas les réponses données par Adam!--3-->
apparemment, j'utilisais la mauvaise version de tessdata. J'ai été à la suite de la la page source instruction intuitivement et cela a causé le problème.
il est dit
Rapide Tessnet2 utilisation
télécharger la langue fichier de définition des données ici
après avoir téléchargé le binaire, lorsque vous suivez le lien pour télécharger le fichier langue, il ya beaucoup de fichiers langue. mais aucun d'entre eux sont de bonne version. vous devez sélectionner tous les version et aller à la page suivante pour la version correcte (tesseract-2.00.fre)! Ils doivent soit mettre à jour le lien de téléchargement binaire vers la version 3 ou mettre le fichier de langue version 2 sur la première page. Ou du moins, mention audacieuse du fait que ce numéro de version est une grosse affaire!
de toute façon je l'ai trouvé. Merci à tous.
un exemple simple de testing Tesseract OCR in 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;
}
Info: The tessdata le dossier doit exister dans le dépôt: bin\Debug\
Essayez de mettre à jour la ligne:
ocr.Init(@"C:\", "fr", false); // le chemin ici devrait être le dossier parent de tessdata
j'ai eu le même problème, maintenant c'est résolu. J'ai tesseract2, sous ces dossiers pour 32 bits et 64 bits, j'ai copié des fichiers 64 bits(comme mon système est 64 bits) dans le dossier principal ("Tesseract2") et sous bin/Debug. Maintenant ma solution fonctionne bien.
dans mon cas, j'ai tout fait fonctionner, sauf pour la reconnaissance correcte des caractères.
mais vous devez considérer ces quelques choses:
- Utilisation correcte tessnet2 bibliothèque
- utilisation correcte tessdata version en langue
- tessdata devrait être quelque part à l'extérieur de votre dossier d'application où vous pouvez mettre le chemin complet dans le paramètre init. utilisez
ocr.Init(@"c:\tessdata", "eng", true);
- le débogage vous causera des maux de tête. Ensuite, vous devez mettre à jour votre application.config utiliser ce. (Je ne peux pas mettre le code xml ici. donnez-moi votre mail, je vous l'enverrons par courriel)
j'espère que cela aide
Voici un excellent exemple de travail du projet; Tesseract OCR Échantillon (Visual Studio) avec Leptonica Prétraitement Tesseract OCR Sample (Visual Studio) avec prétraitement de Leptonica
Tesseract OCR 3.02.02 L'API peut être confuse, donc cela vous guide à travers l'inclusion de la dll Tesseract et Leptonica dans un projet C++ de studio visuel, et fournit un fichier d'échantillon qui prend un chemin d'image au préprocessus et OCR. Le script de prétraitement de Leptonica convertit l'entrée l'image en texte noir et blanc ressemblant à un livre.
Setup
pour inclure ceci dans vos propres projets, vous devrez faire référence aux fichiers d'en-tête Et lib et copier les dossiers tessdata et dlls.
Copiez le dossier Tesseract-include dans le dossier racine de votre projet. Maintenant, cliquez sur votre projet dans Visual Studio Solution Explorer, et allez à Projet>Propriétés.
répertoires VC++ > Include Annuaires:
..\Tesseract-include\tesseract;..\tesseract-include\leptonica;$(IncludePath) C / C++>Préprocesseur>Définitions De Préprocesseur:
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) C/C++>Linker>Entrée>Dépendances Supplémentaires:
..\tesseract-include\libtesseract302.lib;..\tesseract-include\liblept168.lib;%(AdditionalDependencies) Vous pouvez maintenant inclure des en-têtes dans le fichier de votre projet:
include
inclure
maintenant, copiez les deux fichiers dll dans tesseract-include et le dossier tessdata dans Debug dans le répertoire de sortie de votre projet.
lorsque vous initialisez tesseract, vous devez spécifier l'emplacement du dossier parent (!important) du dossier tessdata si ce n'est pas déjà le répertoire courant de votre fichier exécutable. Vous pouvez copier mon script, qui suppose tessdata est installé dans le dossier de l'exécutable.
tesseract:: TessBaseAPI * api = new tesseract:: TessBaseAPI(); api - > Init("D:\tessdataParentFolder\",... Taille de l'échantillon
vous pouvez compiler l'échantillon fourni, qui prend un argument de ligne de commande du chemin d'image à utiliser. La fonction preprocess () utilise Leptonica pour créer une copie en noir et blanc de l'image qui fait fonctionner tesseract avec une précision de 90%. La fonction ocr () affiche la fonctionnalité de L'API Tesseract pour retourner une chaîne de caractères. Le toClipboard () peut être utilisé pour sauvegarder du texte dans le presse-papier sous Windows. Vous pouvez copier dans vos propres projets.
j'ai été en mesure de le faire fonctionner par la suite de ces instructions.
Télécharger exemple de code
Décompressez-le à un nouvel emplacement
Ouvrir ~\tesseract-échantillons-master\src\Tesseract.Échantillon.sln (j'ai utilisé Visual Studio 2017)
installer le paquet NuGet de Tesseract pour ce projet (ou désinstaller/réinstaller comme j'avais de)
décommentez les deux dernières lignes significatives de Tesseract.Échantillon.Programme.cs:
Console.Write("Press any key to continue . . . "); Console.ReadKey(true);
Exécuter (touche F5)
cela a fonctionné pour moi, j'ai eu 3-4 Plus PDF à extracteur de texte et si l'un ne fonctionne pas l'autre sera ... tesseract en particulier ce code peut être utilisé sur Windows 7, 8, Server 2008 . Espérons que cela est utile pour vous
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...