我对在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
谢谢!
答案 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
读取其他图像格式。