![](/img/trans.png)
[英]Tesseract-ocr, baseapi.h fatal error: platform.h file not found
[英]tesseract-ocr how to includ baseapi.h
我按照tessesract的形式发现了如何包含baseapi.h的说明。
我在用:
VS2010
版本tesseract 3.01
我试着了解如何使用baseapi.h。
测试程序:
#define __MSW32__
#include "baseapi.h"
using namespace tesseract;
int _tmain(int argc, _TCHAR* argv[])
{
TessBaseAPI *myTestApi;
myTestApi=new TessBaseAPI();
//myTestApi->Init("d:/temp.jpg","eng");
return 0;
}
形式gide:
将以下文件夹添加到其他包含目录(属性) - 在包含“baseapi.h”后解决文件未找到的问题
的tesseract-3.01 / API
的tesseract-3.01 / ccmain
的tesseract-3.01 / ccutil
的tesseract-3.01 / ccstruct
将以下库添加到“Properties / Linker / Input / Additional Dependancies”以使用Tesseract和Leptonica libs libtesseract.lib; liblept.lib
//将以下路径添加到“Properties / Linker / General / Additional Library Directories”以查找Tesseract和Leptonica libs tesseract-3.01 / vs2010 / Release tesseract-3.01 / vs2008 / lib
我现在试着跑
所以我尝试找到libs libtesseract.lib并替换为libtesseract_tessopt.lib然后运行
1>------ Build started: Project: test4, Configuration: Debug Win32 ------
1> test4.cpp
1>test4.obj : error LNK2019: unresolved external symbol "public: __thiscall tesseract::TessBaseAPI::TessBaseAPI(void)" (??0TessBaseAPI@tesseract@@QAE@XZ) referenced in function _wmain
1>c:\users\eran0708\documents\visual studio 2010\Projects\test4\Debug\test4.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
有什么已知解决问题的方法吗?
谢谢,
伊兰
![在此处输入图像说明] [6]
![在此输入图像说明] [7]
这就是我编译它所做的:
1.)将所有头文件复制到一个include
目录中,因此以后只需将§(TESS_DIR)\\include
添加到include目录中。
将$(TESS_DIR)\\include\\leptonica
标头复制到$(TESS_DIR)\\include\\leptonica
。
2.)打开vs2010\\tesseract.sln
并编译所有配置。 然后将所有lib文件复制到$(TESS_DIR)\\lib\\debug
和$(TESS_DIR)\\lib\\release
。 然后将这些目录添加到构建设置中。
3.)将已编译的libtesseract.dll
和liblept168.dll
以及包含eng.traineddata
的文件夹tessdata
eng.traineddata
到项目的Release
文件夹中。
4.)将这些库添加为其他依赖项:
libtesseract.lib
liblept168.lib
5.) #include <baseapi.h>
我想通了,如果你正在使用visual studio 2010并使用windows窗体/设计器,你可以通过这种方式轻松添加它,没有任何问题
1)将以下项目添加到您的项目中(我警告您一次,不添加tesseract解决方案,或更改您添加的项目中的任何设置,除非您喜欢讨厌自己)ccmain ccstruct ccutil classify cube cutil dict image libtesseract nutral_networks textord viewer wordrec
你可以添加其他人,但你真的不希望你的项目中包含所有内容吗? naaa,分开建造
2)转到你的项目属性并添加libtesseract作为参考,你现在可以看作它作为一个项目,这将使你的项目快速构建,而无需检查tesseract中的数百万条警告。 [常用属性] - > [添加引用]
3)在解决方案资源管理器中右键单击您的项目并单击项目依赖项,确保它依赖于libtesseract或甚至所有这些依赖项,它只是意味着它们在项目之前构建。
4)tesseract 2010 visual studio项目包含一些配置设置,例如release,release.dll,debug,debug.dll,似乎release.dll设置产生了正确的文件。 首先,将解决方案输出设置为release.dll。 单击您的项目属性。 然后单击配置管理器。 如果不可用,请执行此操作,单击解决方案树中的SOLUTION属性,然后单击配置选项卡,您将看到项目列表和相关配置设置。 你会注意到你的项目没有设置为release.dll,即使输出是。 如果您采用第二条路线,则仍需要单击配置管理器。 然后,您可以编辑设置,在项目设置上单击新建,并将其命名为release.dll ...与其他设置完全相同,并从发布中复制设置。 对Debug执行相同的操作,以便从调试设置中复制debug.dll名称。 哇...差不多完成了
5)不要试图改变tesseracts设置以匹配你的....不会工作....当新版本发布时,你不能只是“扔进去”然后去。 接受这种状态,即你的新模式是Release.dll和Debug.dll。 不要强调......你可以在完成后返回并从解决方案中删除项目。
6)猜猜库和dll的出现位置? 在您的项目中,您可能需要也可能不需要添加库目录。 有人说要将所有标题转储到一个文件夹中,所以他们只需要向包含但不是我添加一个文件夹。 我希望能够删除tesseract文件夹并从拉链重新加载它而无需额外的工作....并且完全准备好一次更新或者如果我弄乱了代码就恢复它。 它有点工作,您可以使用代码而不是我这样做的设置,但是您应该在2010 tesseract项目文件夹中包含所有包含头文件的文件夹并让它们保持不变。
7)无需向项目添加任何文件。 只是这些代码行.....我已经包含了一些额外的代码,可以从一个外部数据集转换为tiff友好版本而无需保存/加载文件。 我不是很好吗?
8)现在你可以在debug.dll和release.dll中完全调试,一旦你成功将它构建到你的项目中,即使你可以删除所有添加的项目,它也将是完美的。 没有额外的编译或错误。 完全可调试,全天然。
9)如果我没记错的话,我无法解决这个问题,我必须将2008 / lib /中的文件复制到我的项目发布文件夹中... .darn it。
In my projects “functions.h” I put
#pragma comment (lib, "liblept.lib" )
#define _USE_TESSERACT_
#ifdef _USE_TESSERACT_
#pragma comment (lib, "libtesseract.lib" )
#include <baseapi.h>
#endif
#include <allheaders.h>
在我的主项目中,我把它作为成员放在一个类中:tesseract :: TessBaseAPI * readSomeNombers;
当然我在某处包含了“functions.h”
然后我把它放在我的类构造函数中:
readSomeNombers = new tesseract::TessBaseAPI();
readSomeNombers ->Init(NULL, "eng" );
readSomeNombers ->SetVariable( "tessedit_char_whitelist", "0123456789,." );
然后我创建了这个类成员函数:和一个类成员作为输出,不讨厌,我不喜欢返回变量。 不是我的风格。 当我在相信成员函数中使用pix时,不需要销毁pix的内存,我的测试表明这是一种调用这些函数的安全方法。 但无论如何,你可以做任何事情。
void Gaara::scanTheSpot()
{
Pix *someNewPix;
char* outText;
ostringstream tempStream;
RECT tempRect;
someNewPix = pixCreate( 200 , 40 , 32 );
convertEasyBmpToPix( &scanImage, someNewPix, 87, 42 );
readSomeNombers ->SetImage(someNewPix);
outText = readSomeNombers ->GetUTF8Text();
tempStream.str("");
tempStream << outText;
classMemeberVariable = tempStream.str();
//pixWrite( "test.bmp", someNewPix, IFF_BMP );
}
具有我要扫描的信息的对象位于内存中,并由&scanImage指向。 它来自“EasyBMP”库,但这并不重要。
顺便说一句,我在“functions.h”/“functions.cpp”中的一个函数处理,我在循环中做了一些额外的处理,即细化字符并使其变为黑白并反转黑色和白色,这是不明智的。 在我开发的这个阶段,我仍在寻找提高认知度的方法。 虽然对于我的建议,这还没有产生糟糕的数据。 我的观点是使用默认的Tess数据来简化。 我正在启发式地解决一个非常复杂的问题。
void convertEasyBmpToPix( BMP *sourceImage, PIX *outputImage, unsigned startX, unsigned startY )
{
int endX = startX + ( pixGetWidth( outputImage ) );
int endY = startY + ( pixGetHeight( outputImage ) );
unsigned destinationX;
unsigned destinationY = 0;
for( int yLoop = startY; yLoop < endY; yLoop++ )
{
destinationX = 0;
for( int xLoop = startX; xLoop < endX; xLoop++ )
{
if( isWhite( &( sourceImage->GetPixel( xLoop, yLoop ) ) ) )
{
pixSetRGBPixel( outputImage, destinationX, destinationY, 0,0,0 );
}
else
{
pixSetRGBPixel( outputImage, destinationX, destinationY, 255,255,255 );
}
destinationX++;
}
destinationY++;
}
}
bool isWhite( RGBApixel *image )
{
if(
//destination->SetPixel( x, y, source->GetPixel( xLoop, yLoop ) );
( image->Red < 50 ) ||
( image->Blue < 50 ) ||
( image->Green < 50 )
)
{
return false;
}
else
{
return true;
}
}
我不喜欢的一件事就是我在函数外面声明pix的大小。 似乎如果我尝试在函数中做到这一点我有意想不到的结果....如果内存在内部被分配时它会在我离开时被破坏。
gmail当然不是我最优雅的作品,但为了简单起见,我也为了它而扼杀了它。 为什么我懒得分享这个我不知道。 我应该把它留给自己。 我的名字是什么? Kage.Sabaku.No.Gaara
在我让你离开之前,我应该提一下我的Windows窗体应用程序和默认设置之间的细微差别。 即我使用“多字节”字符集。 项目属性...等等。给狗一个骨头,也许投票?
pps我不想这么说但是我对host.c进行了一次更改。如果你使用64位,你可以做同样的事情。 否则你自己.....但我的理由是你有点疯了,实际上有点傻
typedef unsigned int uinT32;
#if (_MSC_VER >= 1200) //%%% vkr for VC 6.0
typedef _int64 inT64;
typedef unsigned _int64 uinT64;
#else
typedef long long int inT64;
typedef unsigned long long int uinT64;
#endif //%%% vkr for VC 6.0
typedef float FLOAT32;
typedef double FLOAT64;
typedef unsigned char BOOL8;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.