こんにちはTesseract OCRをC#でテストする簡単な例を教えてください。
見つかったデモを試しました こちら 。英語のデータセットをダウンロードし、Cドライブで解凍しました。次のようにコードを変更しました:
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);
残念ながら、コードは機能しません。プログラムは「ocr.Init(...」行で終了します。try-catchを使用しても例外を取得することさえできませんでした。
vietocr !を実行できました。しかし、それは私が従うべき非常に大きなプロジェクトです。上記のような簡単な例が必要です。
ありがとう
OK。私はここで解決策を見つけました tessnet2はロードに失敗します Adamによって与えられたAns
どうやら間違ったバージョンのtessdataを使用していたようです。 ソースページ の指示を直感的にたどっていたため、問題が発生しました。
それは言います
Tessnet2のクイック使用
ここからバイナリをダウンロード 、アセンブリTessnet2.dllの参照を.NETプロジェクトに追加します。
言語データ定義ファイル here をダウンロードして、tessdataディレクトリに配置します。 Tessdataディレクトリとexeは同じディレクトリにある必要があります。
バイナリをダウンロードした後、リンクをクリックして言語ファイルをダウンロードすると、多くの言語ファイルがあります。しかし、それらのどれも正しいバージョンではありません。すべてのバージョンを選択し、次のページに進んで正しいバージョン(tesseract-2.00.eng)を探す必要があります!ダウンロードバイナリリンクをバージョン3に更新するか、バージョン2の言語ファイルを最初のページに配置する必要があります。または、このバージョンの問題が大したことであるという事実に少なくとも大胆に言及してください!
とにかく見つけた。みんな、ありがとう。
C#でTesseract OCRをテストする簡単な例:
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;
}
情報:tessdataフォルダーがリポジトリーに存在する必要があります:bin\Debug \
これらの 指示 に従うことで動作させることができました。
行を次のように更新してみてください。
ocr.Init(@ "C:\"、 "eng"、false); //ここのパスはtessdataの親フォルダーである必要があります
これは私のために働いた、私は3-4以上PDF Text Extractorにあり、1つが機能しない場合、他のものは... tesseract特にWindows 7、8で使用できるこのコードServer 2008。これがお役に立てば幸いです
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...
これが素晴らしい実例プロジェクトです。 Leptonica前処理を備えたTesseract OCRサンプル(Visual Studio) Leptonica前処理を備えたTesseract OCRサンプル(Visual Studio)
Tesseract OCR 3.02.02 APIは混乱を招く可能性があるため、TesseractおよびLeptonica dllをVisual Studio C++プロジェクトに含める方法を説明し、イメージパスをプリプロセスおよびOCRに使用するサンプルファイルを提供します。 Leptonicaの前処理スクリプトは、入力画像を白黒の本のようなテキストに変換します。
セットアップ
これを独自のプロジェクトに含めるには、ヘッダーファイルとlibを参照し、tessdataフォルダーとdllをコピーする必要があります。
Tesseract-includeフォルダーをプロジェクトのルートフォルダーにコピーします。 Visual Studioソリューションエクスプローラーでプロジェクトをクリックし、[プロジェクト]> [プロパティ]に移動します。
VC++ディレクトリ>ディレクトリを含める:
..\tesseract-include\tesseract; ..\tesseract-include\leptonica; $(IncludePath)C/C++> Preprocessor> Preprocessor Definitions:
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)C/C++> Linker> Input> Additional Dependencies:
..\tesseract-include\libtesseract302.lib; ..\tesseract-include\liblept168.lib;%(AdditionalDependencies)これで、プロジェクトのファイルにヘッダーを含めることができます。
次に、tesseract-includeの2つのdllファイルと、Debugのtessdataフォルダーをプロジェクトの出力ディレクトリにコピーします。
Tesseractを初期化するときに、実行可能ファイルの現在のディレクトリでない場合は、tessdataフォルダーの親フォルダー(!important)の場所を指定する必要があります。スクリプトをコピーできます。これは、tessdataが実行可能ファイルのフォルダーにインストールされていることを前提としています。
tesseract :: TessBaseAPI * api = new tesseract :: TessBaseAPI(); api-> Init( "D:\ tessdataParentFolder \"、...サンプル
提供されているサンプルをコンパイルできます。これは、使用するイメージパスのコマンドライン引数を1つ受け取ります。 preprocess()関数はLeptonicaを使用して、白黒の本のような画像のコピーを作成し、テセラクトを90%の精度で動作させます。 ocr()関数は、文字列出力を返すTesseract APIの機能を示しています。 toClipboard()は、Windowsのテキストをクリップボードに保存するために使用できます。これらを自分のプロジェクトにコピーできます。
私は同じ問題を抱えていましたが、今では解決しました。 32ビットと64ビットのこのフォルダーの下にtesseract2があり、64ビットフォルダー(システムは64ビット)をメインフォルダー( "Tesseract2")とbin/Debugフォルダーの下にコピーしました。現在、私のソリューションは正常に機能しています。
私の場合、正しい文字認識を除いて、これらすべてが機能していました。
ただし、次のいくつかの点を考慮する必要があります。
ocr.Init(@"c:\tessdata", "eng", true);
を使用しますこれが役立つことを願って