如何在 Visual Studio 2010 中实现 Tesseract 以与项目一起运行
Posted
技术标签:
【中文标题】如何在 Visual Studio 2010 中实现 Tesseract 以与项目一起运行【英文标题】:How to implement Tesseract to run with project in Visual Studio 2010 【发布时间】:2013-08-13 09:36:50 【问题描述】:我在 Visual Studio 2010 中有一个 C++ 项目并希望使用 OCR。我遇到了很多关于 Tesseract 的“教程”,但遗憾的是,我得到的只是头痛和浪费时间。
在我的项目中,我将图像存储为 Mat。我的问题的一种解决方案是将此 Mat 保存为图像(例如 image.jpg),然后像这样调用 Tesseract 可执行文件:
system("tesseract.exe image.jpg out");
这让我得到一个输出 out.txt 然后我调用
infile.open ("out.txt");
从 Tesseract 读取输出。
这一切都很好,就像一把椅子,但它不是最佳解决方案。在我的项目中,我正在处理一个视频,所以 save/call .exe/write/read 10+ FPS 并不是我真正想要的。我想在现有代码中实现 Tesseract,以便能够将 Mat 作为参数传递并立即将结果作为字符串。
您知道使用 Visual Studio 2010 实现 Tesseract OCR 的任何好的教程(首选分步)吗?还是您自己的解决方案?
【问题讨论】:
【参考方案1】:好的,我想通了,但它仅适用于 Release 和 Win32 配置(无调试或 x64)。 Debug配置下有很多链接错误。
所以,
1.首先,在这里下载准备好的库文件夹(Tesseract + Leptonica):
Mirror 1(Google Drive)
Mirror 2(MediaFire)
2. 将tesseract.zip
提取到C:\
3. 在 Visual Studio 中,进入 C/C++ > General > Additional Include Directories
插入C:\tesseract\include
4.在Linker > General > Additional Library Directories
下
插入C:\tesseract\lib
5.在Linker > Input > Additional Dependencies
下
添加:
liblept168.lib
libtesseract302.lib
示例代码应如下所示:
#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");
对于与 OpenCV 和 Mat 类型图像的交互,请查看 HERE
【讨论】:
我说过这样的语言数据路径有效。 api.Init("C:\\tessdata", "eng", tesseract::OEM_DEFAULT); 我找不到“tessdata”的文件夹??我应该创建它还是必须在文件夹@İsmailKocacan 我下载文件夹你的链接但它没有tessdata?? @OpenMinded 用户@İsmailKocacan 使用了自定义“tessdata”语言文件夹,所以问他。【参考方案2】:自上次回复以来已经很多,但它可能对其他人有所帮助;
-
我认为您还必须将“liblept168.lib”和“liblept168d.lib”添加到附加依赖项中
将“liblept168.dll”和“liblept168d.dll”添加到 exe 的目标位置。
将#include 添加到您的代码中。
(此答案必须是对布鲁斯答案的评论。很抱歉造成混淆。)
【讨论】:
当您说“将#include 添加到您的代码”时,究竟必须包含什么? 你应该添加:#include您需要通过 API 使用该库。
很可能:
首先下载库 (https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.02-win32-lib-include-dirs.zip&can=2&q=)。它们是用 Visual 2008 编译的,但应该足够了
直接使用 API(例如,查看使用它的开源项目:https://code.google.com/p/qtesseract/source/browse/#svn%2Ftrunk%2Ftessdata)并阅读此答案中的链接:How can i use tesseract ocr(or any other free ocr) in small c++ project?
【讨论】:
下载了库。在 C/C++>General>Additional Include Directories: 添加了 \include 文件夹。在 Linker>General>Additional Library Directories: 添加了 \lib 文件夹。在 Linker>Input>Additional Dependencies: 添加了 libtesseract302.lib 和 libtesseract302d.lib。编写了一个简单的程序,但由于对象上调用的每个方法的链接错误而无法构建。例如:Error 9 error LNK2019: unresolved external symbol "public: char * __cdecl tesseract::TessBaseAPI::GetUTF8Text(void)" (?GetUTF8Text@TessBaseAPI@tesseract@@QEAAPEADXZ) referenced in function main
。我错过了什么?
好消息:编译步骤正在运行。坏消息,链接步骤失败。看起来它没有找到正确的链接库。我建议在发布中使用 libtesseract302.lib,在调试中使用 libtesseract302d.lib。您可以在可视化项目中转到 ConfigurationPropertis / Linked / 命令行,以确保命令行指向正确的位置
因为 OpenCV 一直使用 x64 配置...所以我切换到 x86。不再有 Tesseract 链接错误。现在我有类似的链接错误,但有 OpenCV 函数。所以我扔掉了 OpenCV 并试图构建 Tesseract 只是为了看看它是否有效。为 pixRead(Leptonica?)切换了 imread(OpenCV)。显然,它不能识别这个函数 pixRead。我想我需要 leptonica 标头? allheaders.h 还是什么?我慢慢放弃一切:-/以上是关于如何在 Visual Studio 2010 中实现 Tesseract 以与项目一起运行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2010 中使用 Visual Studio 2008 创建的 DLL?
在 Visual Studio 6 中从 VB 调用 VS2010 C++ dll
如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?
关于在Visual Studio2010中如何卸载Visual Asixist这个插件?为啥将它卸载后Visual Studio启动后仍然有