我可以将Tesseract配置为仅使用指定长度识别图像中的文本吗?

时间:2014-05-02 02:40:05

标签: ocr tesseract

我正在进行一些OCR实验,我想提高Tesseract输出的质量。基本上,测试主题是像CAPTCHA这样的东西,在混淆图像上的随机字符。现在Tesseract并没有做得很好。部分是因为有时它会将某些字符分别标识为多个字符/数字。

我想知道是否告诉Tesseract,我的特定图像应该始终包含长度为6的文本,可以稍微改善OCR识别结果。但我不确定Tesseract是否支持这一点。

我没有找到关于这一点的文件。有人可以帮助指出是否存在这样的功能,如果存在,我可以设置什么配置参数。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试此示例以指定文本的长度。请在for循环中设置值,您需要识别文本的长度。

请考虑以下代码:

Pix *image = pixRead("/usr/src/tesseract-3.02/phototest.tif");
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
api->Init(NULL, "eng");
api->SetImage(image);
Boxa* boxes = api->GetComponentImages(tesseract::RIL_TEXTLINE, true, NULL, NULL);
printf("Found %d textline image components.\n", boxes->n);
for (int i = 0; i < boxes->n; i++) {
    BOX* box = boxaGetBox(boxes, i, L_CLONE);
    api->SetRectangle(box->x, box->y, box->w, box->h);
    char* ocrResult = api->GetUTF8Text();
    int conf = api->MeanTextConf();
    fprintf(stdout, "Box[%d]: x=%d, y=%d, w=%d, h=%d, confidence: %d, text: %s",
                    i, box->x, box->y, box->w, box->h, conf, ocrResult);
}

for (int i = 0; i < boxes->n; i++)中,如果您希望指定的长度为20,请将boxes->n替换为20.

相关问题