2017-07-26 316 views
0

我使用QT的Tesseract OCR C++庫使用此代碼不準確的Tesseract OCR數據C++

const char* lang = "eng"; 
QString filename = "D:/image.png"; 

tesseract::TessBaseAPI tess; 
tess.Init(NULL, lang, tesseract::OEM_DEFAULT); 
tess.SetPageSegMode(tesseract::PSM_AUTO); 

FILE* fin = fopen(filename.toStdString().c_str(), "rb"); 
if (fin == NULL) 
{ 
    std::cout << "Cannot open " << filename.toStdString().c_str() << std::endl; 
    return; 
} 
fclose(fin); 

STRING text; 
if (tess.ProcessPages(filename.toStdString().c_str(), NULL, 0, &text)) 
{ 
    ui->plainTextEdit->setPlainText(QString::fromUtf8(text.string())); 
//show result in plainttext qt gui 

} 

把數據不夠準確的獲得從一個PNG圖像 文本在表中的數據,它給了我奇怪的字符,當我使用在線OCR網站將我的圖像轉換爲文本(相同的圖像),它以100%的準確性做到了,所以它給了我這個錯誤的文字是這個問題與圖書館?或我的代碼?或者如果有更好的免費圖書館,我可以用它來更準確?

我從PDF圖像我用ghost腳本以優良的品質獲得圖像,從而使OCR庫應該得到我正確的數據

+3

OCR的不準確性並不取決於Qt,這取決於進行計算的類,所以我看到Qt標記無關緊要。 – eyllanesc

+0

你在處理你的頁面之前是否嘗試進行任何預處理?如果你看他們的論壇,有幾位用戶提到你應該用黑白圖像(白色背景上的黑色字體)嘗試它,你的文本週圍有很多模糊的東西,你應該嘗試預處理它,在線OCR最有可能的是自動編輯圖像並刪除這些圖像。 – Eddge

+0

是的我使用Ghostscript從這個屬性獲取PDF文件的圖像-dFirstPage = 1 -dLastPage = 1 -dBATCH -dNOPAUSE -sDEVICE = pnggray -r300 -dUseCropBox –

回答

0

我我沒有經歷過CPP,但我認爲你的問題很可能與下面的線有關:

tess.Init(NULL, lang, tesseract::OEM_DEFAULT); 

它必須顯示tessdata文件夾。而不是NULL,您可以編寫文件夾名稱,例如"C:/tessdata/"。再一次,我沒有經歷cpp,這就是爲什麼你可以決定斜槓「/」或反斜槓「\」。該文件夾應該包含語言文件。

+0

我將null更改爲tessdata文件夾,但同樣的問題 –

+0

也許是{const char * lang =「eng」;}行。你可以改變它爲{字符串}?或者,您可以將該行更改爲:{tess.Init(「c:/ tessdata /」,「eng」,3);} – nes

0

由於Eddge在他的評論中提到你應該使用一些圖像預處理的東西,有scriptsimagemagick一堆。 答案當然OpenCV在這方面也會有很大的幫助。

下一點可能是PSM模式,默認情況下它應該滿足您提取整頁信息的需要。

此外,在線OCR的結果並不像您提到的那樣是100%。

There is "1 S Days" instead of "15 Days" 
There is "Mail: finance(a)" instead of "E Mail: [email protected]" 
There is "TiA THE GREEN HOL1 5" instead of "T/A THE GREEN HOU 5" 

您正在使用哪個版本的Tesseract

?我強烈建議使用3.05。 (4.0顯示好得多的結果,但它尚未正式發佈)。

而且下面的鏈接可以幫助您與您的結果:https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality

附:我希望你有資格公開分享這樣的財務文件;)