本文是基于最近的OCR識別項目學習ocr開源庫-tesseract的簡單調用,不涉及其余視覺知識。
參考文獻:http://blog.csdn.net/u012566751/article/details/54136836
參考庫:http://download.csdn.net/download/u010554381/10044876
1.預備工作
下載上述參考庫的文件,解壓下有!
[解壓后的內容]
(https://img-blog.csdn.net/20171030145427018?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDU1NDM4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
需要安裝tesseract4.0 alpha版本,安裝過后需要增加環境變量(比較簡單,不知道的話可以自行百度),增加內容為“D:****\Tesseract-OCR”,“*”內容為上述安裝路徑;還需增加一個系統變量,變量名為“TESSDATA_PREFIX”,內容為“D:*\Tesseract-OCR”,該系統變量的意義貌似是可以找到tesseract的dll文件(但我試過了不管用不知道是自己配置是否有問題,有大神知道的話可以告訴我下,我修改)。
2.環境配置
環境配置和opencv類似,創建一個win32工程。
2.1配置包含目錄和庫目錄
在屬性頁中找到VC++目錄,配置其中的包含目錄和庫目錄,如下圖所示;
2.2配置附加依賴項
2.3 DLL文件
此處總感覺有問題,不能正確找到DLL文件的路徑,采用笨方法,將相應的DLL文件拷貝到工程的執行目錄下,如下圖所示:
3 接口調用示例
加入如下代碼:該代碼來源于tesseract官方
https://github.com/tesseract-ocr/tesseract/wiki/APIExample修改版本
#include <stdio.h>
#include <allheaders.h>
#include <capi.h>void die(const char *errstr) {fputs(errstr, stderr);exit(1);
}int main(int argc, char *argv[]) {TessBaseAPI *handle;PIX *img;char *text;//原圖像的絕對路徑 if ((img = pixRead("D:\\1.tif")) == NULL) die("Error reading image\n");handle = TessBaseAPICreate();if (TessBaseAPIInit3(handle, NULL, "eng") != 0)die("Error initialising tesseract\n");TessBaseAPISetImage2(handle, img);if (TessBaseAPIRecognize(handle, NULL) != 0)die("Error in Tesseract recognition\n");if ((text = TessBaseAPIGetUTF8Text(handle)) == NULL)die("Error getting text\n");fputs(text, stdout); //輸出OCR識別的文本信息system("pause");TessDeleteText(text);TessBaseAPIEnd(handle);TessBaseAPIDelete(handle);pixDestroy(&img);return 0;
}
4可能遇到的問題和注意事項
4.1錯誤:This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details
解決方法:
4.2注意事項
千萬千萬不要把庫解壓到含有中文路徑的文件夾下,不然可能會導致一些莫名的錯誤!