2017-06-06 60 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