C++ 如何在VisualStudio2010中实现Tesseract与project一起运行
我在Visual Studio 2010中有一个C++项目,希望使用OCR。我遇到了许多Tesseract的“教程”,但遗憾的是,我得到的只是头痛和浪费时间 在我的项目中,我有一个存储为垫子的图像。我的问题的一个解决方案是将此Mat保存为图像(例如image.jpg),然后调用Tesseract可执行文件,如下所示:C++ 如何在VisualStudio2010中实现Tesseract与project一起运行,c++,opencv,ocr,tesseract,C++,Opencv,Ocr,Tesseract,我在Visual Studio 2010中有一个C++项目,希望使用OCR。我遇到了许多Tesseract的“教程”,但遗憾的是,我得到的只是头痛和浪费时间 在我的项目中,我有一个存储为垫子的图像。我的问题的一个解决方案是将此Mat保存为图像(例如image.jpg),然后调用Tesseract可执行文件,如下所示: system("tesseract.exe image.jpg out"); #include <tesseract\baseapi.h> #include <
system("tesseract.exe image.jpg out");
#include <tesseract\baseapi.h>
#include <leptonica\allheaders.h>
#include <iostream>
using namespace std;
int main(void){
tesseract::TessBaseAPI api;
api.Init("", "eng", tesseract::OEM_DEFAULT);
api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
api.SetOutputName("out");
cout<<"File name:";
char image[256];
cin>>image;
PIX *pixs = pixRead(image);
STRING text_out;
api.ProcessPages(image, NULL, 0, &text_out);
cout<<text_out.string();
system("pause");
}
这会给我一个output.txt,然后我调用
infile.open ("out.txt");
从Tesseract读取输出
这一切都是好的,就像一把椅子,但它不是一个最佳的解决方案。在我的项目中,我正在处理一个视频,所以以10+FPS的速度保存/call.exe/write/read并不是我真正想要的。我希望对现有代码实现Tesseract,以便能够将Mat作为参数传递,并立即将结果作为字符串
您是否知道使用VisualStudio2010实现Tesseract OCR的好教程(请参阅分步教程)?还是您自己的解决方案?您需要通过API使用库 很可能:
- 首先,下调libs()。它们是用Visual2008编译的,但应该足够了
- 直接使用API(例如,查看使用它的开源项目:)并阅读以下答案中的链接:
(此答案必须是对Bruce答案的评论。抱歉混淆。)好的,我想出来了,但它只适用于发行版和Win32配置(无调试或x64)。调试配置下存在许多链接错误 所以 1.首先,在此处下载准备好的库文件夹(Tesseract+Leptonica):
2.提取
tesseract.zip
到C:\
3.在Visual Studio中,进入
C/C++>General>Additional Include目录下
插入C:\teseract\include
4.在
链接器>常规>附加库目录下
插入C:\tesseract\lib
5.在
链接器>输入>其他依赖项下
加:
示例代码应如下所示:
system("tesseract.exe image.jpg out");
#include <tesseract\baseapi.h>
#include <leptonica\allheaders.h>
#include <iostream>
using namespace std;
int main(void){
tesseract::TessBaseAPI api;
api.Init("", "eng", tesseract::OEM_DEFAULT);
api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
api.SetOutputName("out");
cout<<"File name:";
char image[256];
cin>>image;
PIX *pixs = pixRead(image);
STRING text_out;
api.ProcessPages(image, NULL, 0, &text_out);
cout<<text_out.string();
system("pause");
}
#包括
#包括
#包括
使用名称空间std;
内部主(空){
tesseract::TessBaseAPI;
api.Init(“,”eng“,tesseract::OEM_DEFAULT);
api.SetPageSegMode(静态_cast(7));
api.SetOutputName(“输出”);
coutimage;
PIX*pixs=pixRead(图像);
字符串文本输出;
ProcessPages(图像、NULL、0和文本输出);
Cout下载库。在C/C++>General>Additional Include目录中:Added\Include文件夹。在Linker>General>Additional Library目录中:Added\lib文件夹。在Linker>Input>Additional Dependencies中:Added libtesseract302.lib和libtesseract302d.lib。编写了一个简单的程序,由于每个名为o的方法的链接错误而无法生成n对象。例如:Error 9 Error LNK2019:未解析的外部符号“public:char*\uu cdecl tesseract::TessBaseAPI::GetUTF8Text(void)”(?GetUTF8Text@TessBaseAPI@tesseract@@QEAAPEADXZ)在函数main
中引用。我缺少什么?好消息:编译步骤正在工作。坏消息,链接步骤失败。它似乎找不到用于链接的正确库。我建议在发行版中使用libtesseract302.lib,在调试中使用libtesseract302d.lib。您可以在中转到ConfigurationPropertis/Linked/命令行确保命令行指向正确位置的可视化项目由于OpenCV,一直在使用x64配置…因此我切换到x86。没有更多的Tesseract链接错误。现在我有类似的链接错误,但使用OpenCV函数。因此我丢弃了OpenCV,尝试构建Tesseract,只是为了看看它是否有效。切换imread(OpenCV)对于pixRead(Leptonica?)。显然,它不识别这个函数pixRead。我想我需要Leptonica头?allheaders.h还是什么?我慢慢放弃了一切:-/我说语言数据路径就像它工作的那样。api.Init(“C:\\tessdata”,“eng”,tesseract::OEM_DEFAULT);我找不到“tessdata”的文件夹??我应该创建它还是它必须在@İsmailKocacanI下载文件夹中?您的链接但它没有tessdata???@OpenMindedCustom“tessdata”语言文件夹由用户@İsmailKocacan使用,所以请询问他。当您说“添加#包含到您的代码中”时,必须包含哪些内容?您应该添加:#包含#包含#