嗨你能谁能给我测试的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 ! 但是这是一个非常大的项目,我跟着。 我需要一个简单的例子如上。
谢谢
好。 我发现这里的解决方案tessnet2加载失败亚当给出的答案
显然,我是用tessdata的版本错误。 我是继源页面直观地指示和导致该问题。
它说
快速Tessnet2用法
下载的二进制这里 ,添加到您的.NET项目大会Tessnet2.dll的参考。
下载语言数据定义文件在这里 ,并把它放在tessdata目录。 Tessdata目录和你的exe文件必须在同一目录下。
你下载完该文件后,当您按照下载语言文件的链接,也有很多的语言文件。 但他们都不是正确的版本。 你需要选择的所有版本,并进入下一个页面,正确的版本(正方体-2.00.eng)! 他们要么更新下载二进制链接到3版本或将版本2语言文件的第一页上。 或者至少大胆提的是,这个版本的问题是一个大问题!
无论如何,我发现它。 感谢大家。
在C#测试超正方体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 \调试\
尝试更新行:
ocr.Init(@ “C:\”, “主机”,假); //这里的路径应该是tessdata的父文件夹
我有同样的问题,现在它的解决。 我有tesseract2,根据本文件夹32位和64位,我复制的文件64位的文件夹(如我的系统是64位)到主文件夹(“Tesseract2”)和下斌/ Debug文件夹。 现在我的解决方案是工作的罚款。
这里有一个很好的工作示例项目; 正方体OCR样品(Visual Studio中)与Leptonica预处理的Tesseract OCR样品(Visual Studio中)与Leptonica预处理
超正方体OCR 02年2月3日API可以是混乱,所以这引导你通过包括超正方体和Leptonica DLL加载到一个Visual Studio C ++项目,并提供了一个示例文件,其拍摄图像的路径来预处理和OCR。 在Leptonica预处理脚本转换输入图像转换成黑白书般的文字。
建立
包括这个在自己的项目,你将需要引用的头文件和lib和复制tessdata文件夹和DLL。
复制的Tesseract,包括文件夹到你的项目的根文件夹。 单击在Visual Studio解决方案资源管理项目,并转到项目>属性。
VC ++目录>包含目录:
.. \的tesseract-包括\的tesseract; .. \的tesseract-包括\ leptonica; $(INCLUDEPATH)C / C ++>预处理>预处理定义:
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)C / C ++>链接>输入>附加依赖:
.. \正方体,包括\ libtesseract302.lib; .. \正方体,包括\ liblept168.lib;%(AdditionalDependencies),现在你可以在项目中包含的文件头:
包括
包括
现在,复制在两个DLL文件正方体,包括和调试到项目的输出目录中tessdata文件夹。
当初始化正方体,需要指定父文件夹的位置(!重要)的tessdata文件夹,如果它是不是已经在你的可执行文件的当前目录。 您可以复制我的脚本,它假定tessdata安装在可执行文件的文件夹。
超正方体:: TessBaseAPI * API =新的tesseract :: TessBaseAPI(); API - >初始化( “d:\ tessdataParentFolder \”,...样品
可以编译所提供的样本,这需要使用的图像路径的一个命令行参数。 预处理()函数使用Leptonica创建这使得正方体工作,90%的准确度图像的黑色和白色的书页状副本。 的OCR()函数示出了超正方体API返回字符串输出的功能。 该toClipboard()可用于将文本保存到剪贴板上的Windows。 您可以复制这些到自己的项目。
这为我工作,我有更多的3-4 PDF格式文本提取,如果一个不列入工作,其他人会...正方体尤其在该代码可以在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...