Tesseract / Leptonica处理单页和多页图像的正确方法?

时间:2018-07-20 13:50:52

标签: c++ api tesseract leptonica

我对在Tesseract(带有leptonica)中如何处理输入图像有一些疑问。 我在这里试图做的是拥有一种可以处理任何图像文件(不需要特定格式)并稍后将其提供给tesseract API的方法,但这似乎不是使用leptonica进行处理的正确方法...

这是我在做什么的一个例子:

string tmpFile ="path/to/my/file";
// Trying to load a PIXA struct, since it can handle multipage images
PIXA* sourceImg =pixaRead(tmpFile.c_str());
if (sourceImg == NULL) {
    // this happen when pixaRead method fails to load the image
    // So we suppose it's a single page image-file.
    sourceImg =new PIXA;
    sourceImg->n =1;
    sourceImg->pix =(Pix**)malloc(sizeof(Pix*));
    assert(sourceImg->pix != NULL);
    sourceImg->pix[0] =pixRead(tmpFile.c_str());
    sourceImg->refcount =1;
}
api = new tesseract::TessBaseAPI();
if (api->Init(NULL, "eng")) {
    fprintf(stderr, "Could not initialize tesseract.\n");
    exit(1);
}
// Now we can process each pages
for(int i=0; i<sourceImg->n; i++) {
    // results is an object I use to save text from each documents,
    // with page count
    if (i > 0)
        results.addPage();
    Pix* image =sourceImg->pix[i];
    api->SetImage(image);
    // Get OCR result
    outText = api->GetUTF8Text();

    // Here I process stuff, not really important    
    int dummyPos=0;
    results.addLine(outText, dummyPos, dummyPos, dummyPos, dummyPos);
    delete [] outText;
}
pixaDestroy(&sourceImg);
api->End();

这是可行的,但不是我想要的方式,因为即使我使用多页tiff,在加载图像时也会收到以下消息:

Error in pixaReadStream: not a pixa file
Error in pixaRead: pixa not read

仍然可以处理文档,谢谢“ pixaRead”失败时使用的“ pixRead”方法...

有人可以向我解释“ pixaRead”功能的使用有什么问题吗? 可以处理像这样的单页和多页图像吗?

PS:我正在使用Tesseract V4.0和Leptonica V1.74.4

谢谢!

1 个答案:

答案 0 :(得分:0)

使用// @flow type Obj = { str: string, num: number, } const obj: Obj = { str: '', num: 0, } function foo<KEY: $Keys<Obj>>( key: KEY, value: $ElementType<Obj, KEY> ) { obj[key] = value // ^ Cannot assign `value` to `obj[key]` because string [1] // is incompatible with number [2]. } // Good foo('str', 'good') foo('num', 123) // Bad foo('str', 456) // ERROR: as expected. foo('num', 'bad') // ERROR: as expected. 读取TIFF图像(单页或多页),使用pixaReadMultipageTiff读取其他图像格式。