2017-06-06 43 views
0

我想从图像中使用tesseract读取文本,图片的质量很高,因此tesseract能够以95%的准确度读取文本,这对我来说是正确的。在无法但是tesseract读取一个突出显示的文本(选择),请参照PIC使用tesseract从图片中读取突出显示的文本

enter image description here

如何能使用tesseract我读选定区域中的文本,有没有什么办法来确定哪些词是在图像中突出显示?

用于从图像中读取和转换文本的代码如下。 tesseract :: TessBaseAPI * myOCR = new tesseract :: TessBaseAPI();

// cout < <“hello”< < endl;

如果(myOCR->初始化( “C:\ QTSoftware \ IODriver \”, “工程”)){

SaveLineLog(brdInd, "Unable to initialize tesseract engine", __LINE__); 

return RC_TESSERACT_ENG_FAILURE; 

//fprintf(stderr, "Could not initialize tesseract.\n"); 

//return RC_THREAD_FAILURE; 
//exit(1); 

}

SaveLineLog(brdInd, "tesseract engine is UP :)", __LINE__); 

//strcpy_s(fileName, "C:\\TEMP\\T481Logs\\FrameOCR23_0.jpg"); 

FILE *pFile; 

fopen_s(&pFile,fileName, "r"); // Open picture 

PIX* pix;       // Image format from `leptonica` 

pix = pixReadStreamBmp(pFile); 

fclose(pFile); 

//Pix *pix = pixRead(fileName); 

//Pix *pix = pixReadStreamBmp(fileName); 

//cout << "Tesseract - Pix : " << pix << endl; 

if (pix == NULL) 
{ 
    SaveLineLog(brdInd, "Pix failure", __LINE__); 

    return RC_TESSERACT_PIX_FAILURE; 
} 

myOCR->SetImage(pix); 

char* outText = myOCR->GetUTF8Text(); 
+0

你可以附上你使用的代码,你是否在将图像传递给tesseract方法之前执行任何预处理? – ZdaR

+0

我在应用程序中使用了上面的代码来调用'tesseract'并从图像中获取文本,因为所有图像都是黑白的,所以不需要预处理,现在我发现'tesseract'忽略突出显示文字,所以我可能会尝试预处理。 –

回答

0

如果所有图像有这种格式,你可以先倒置颜色,然后使用阈值二值化来消除这个阴影。 对OCR引擎进行预处理并提供清晰的图像会更好,它也可能会提高检测率。

+0

我明白,我可能需要在将图像传递给'tesseract'之前进行预处理,如何识别图像中突出显示的文字? - 谢谢 –

+0

@PankajMishra我建议解决的问题是不能'读'突出显示的部分,但为了识别它,这需要更多的信息 – MoustafaS