本文是基于最近的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注意事项
千万千万不要把库解压到含有中文路径的文件夹下,不然可能会导致一些莫名的错误!