我正在进行一些OCR实验,我想提高Tesseract输出的质量。基本上,测试主题是像CAPTCHA这样的东西,在混淆图像上的随机字符。现在Tesseract并没有做得很好。部分是因为有时它会将某些字符分别标识为多个字符/数字。
我想知道是否告诉Tesseract,我的特定图像应该始终包含长度为6的文本,可以稍微改善OCR识别结果。但我不确定Tesseract是否支持这一点。
我没有找到关于这一点的文件。有人可以帮助指出是否存在这样的功能,如果存在,我可以设置什么配置参数。谢谢!
答案 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.