与 tesseract::TessBaseApi() 相关的 Tesseract-OCR 错误(预期类型说明符)
Error with Tesseract-OCR relating tesseract::TessBaseApi() (expected type-specifier)
我使用 openCV 2.4.9 和 tesseract 3.04 编写了一个程序,两者都使用 C API.
由于 openCV 的 C API 已弃用,我决定修改它以使用两个库的 C++ API。
C 中的这部分代码(有效):
#include <cv.h>
#include <tesseract/capi.h>
void foo (struct _IplImage *imgptr)
{
struct TessBaseAPI *handle_ocr;
handle_ocr = TessBaseAPICreate();
// Do something
}
应该等同于 C++ 中的这段代码(无法编译):
#include <opencv2/opencv.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
void foo (class cv::Mat *imgptr)
{
class tesseract::TessBaseAPI *handle_ocr;
handle_ocr = new tesseract::TessBaseApi();
// Do something
}
g++ 6(在 debian stretch 上)给出以下错误:
error: expected type-specifier
handle_ocr = new tesseract::TessBaseApi();
^~~~~~~~~
这是什么意思?解决方案是什么?
编辑:
整个源文件:
/******************************************************************************
******* headers **************************************************************
******************************************************************************/
/* Standard C ----------------------------------------------------------------*/
/* snprintf() */
#include <cstdio>
/* Packages ------------------------------------------------------------------*/
/* opencv */
#include <opencv2/opencv.hpp>
/* OCR Tesseract */
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
/* Module --------------------------------------------------------------------*/
/* img_ocr_text & OCR_TEXT_MAX */
#include "some_other_file.hpp"
#include "this_file.hpp"
/******************************************************************************
******* func *****************************************************************
******************************************************************************/
void foo (class cv::Mat *imgptr)
{
class tesseract::TessBaseAPI *handle_ocr;
/* Language */
char *lang_str = "eng";
/* Config file */
char *conf_str = "/home/user/ocr/price";
/* init OCR */
handle_ocr = new tesseract::TessBaseApi();
handle_ocr->Init(NULL, lang_str, tesseract::OEM_TESSERACT_CUBE_COMBINED);
if (conf) {
/* Configure OCR (whitelist chars) */
handle_ocr->ReadConfigFile(conf_str);
}
/* scan image for text */
handle_ocr->SetImage(imgptr->data,
imgptr->size().width, imgptr->size().height,
imgptr->channels(), imgptr->step1());
char *txt;
txt = handle_ocr->GetUTF8Text();
/* Copy text to global variable */
snprintf(img_ocr_text, OCR_TEXT_MAX, "%s", txt);
/* cleanup */
delete [] txt;
handle_ocr->Clear();
handle_ocr->End();
}
/******************************************************************************
******* end of file **********************************************************
******************************************************************************/
替换为:
handle_ocr = new tesseract::TessBaseApi();
有了这个:
handle_ocr = new tesseract::TessBaseAPI();
upper/lower 个案例有误。
我使用 openCV 2.4.9 和 tesseract 3.04 编写了一个程序,两者都使用 C API.
由于 openCV 的 C API 已弃用,我决定修改它以使用两个库的 C++ API。
C 中的这部分代码(有效):
#include <cv.h>
#include <tesseract/capi.h>
void foo (struct _IplImage *imgptr)
{
struct TessBaseAPI *handle_ocr;
handle_ocr = TessBaseAPICreate();
// Do something
}
应该等同于 C++ 中的这段代码(无法编译):
#include <opencv2/opencv.hpp>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
void foo (class cv::Mat *imgptr)
{
class tesseract::TessBaseAPI *handle_ocr;
handle_ocr = new tesseract::TessBaseApi();
// Do something
}
g++ 6(在 debian stretch 上)给出以下错误:
error: expected type-specifier
handle_ocr = new tesseract::TessBaseApi();
^~~~~~~~~
这是什么意思?解决方案是什么?
编辑: 整个源文件:
/******************************************************************************
******* headers **************************************************************
******************************************************************************/
/* Standard C ----------------------------------------------------------------*/
/* snprintf() */
#include <cstdio>
/* Packages ------------------------------------------------------------------*/
/* opencv */
#include <opencv2/opencv.hpp>
/* OCR Tesseract */
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
/* Module --------------------------------------------------------------------*/
/* img_ocr_text & OCR_TEXT_MAX */
#include "some_other_file.hpp"
#include "this_file.hpp"
/******************************************************************************
******* func *****************************************************************
******************************************************************************/
void foo (class cv::Mat *imgptr)
{
class tesseract::TessBaseAPI *handle_ocr;
/* Language */
char *lang_str = "eng";
/* Config file */
char *conf_str = "/home/user/ocr/price";
/* init OCR */
handle_ocr = new tesseract::TessBaseApi();
handle_ocr->Init(NULL, lang_str, tesseract::OEM_TESSERACT_CUBE_COMBINED);
if (conf) {
/* Configure OCR (whitelist chars) */
handle_ocr->ReadConfigFile(conf_str);
}
/* scan image for text */
handle_ocr->SetImage(imgptr->data,
imgptr->size().width, imgptr->size().height,
imgptr->channels(), imgptr->step1());
char *txt;
txt = handle_ocr->GetUTF8Text();
/* Copy text to global variable */
snprintf(img_ocr_text, OCR_TEXT_MAX, "%s", txt);
/* cleanup */
delete [] txt;
handle_ocr->Clear();
handle_ocr->End();
}
/******************************************************************************
******* end of file **********************************************************
******************************************************************************/
替换为:
handle_ocr = new tesseract::TessBaseApi();
有了这个:
handle_ocr = new tesseract::TessBaseAPI();
upper/lower 个案例有误。