与tesseract :: TessBaseApi()相关的Tesseract-OCR错误(预期的类型说明符)

时间:2018-10-20 01:39:32

标签: c++ tesseract

我使用C API编写了使用openCV 2.4.9和tesseract 3.04的程序。

由于已弃用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上)给出以下错误:

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 **********************************************************
 ******************************************************************************/

1 个答案:

答案 0 :(得分:1)

替换此:

handle_ocr  = new tesseract::TessBaseApi();

与此:

handle_ocr  = new tesseract::TessBaseAPI();

大小写错误。