64位OCR开源Tesseract4.1+leptonica1.74
(编译安装步骤详解)
本博文的pdf下载地址:
https://download.youkuaiyun.com/download/dcx_dcx/12310340
最近由于需要OCR技术对生成线上的英文进行识别,在网上搜索后,发现开源的Tesseract ocr效果不错。于是经过几天的艰苦地探索,终于可以使用了。
由于整个编译过程比较复杂,容易出错地方较多,现把整个过程整理如下,以作备用。
一.所需源码包括:
1. leptonica1.74,下载地址:
● 官网地址:http://www.leptonica.org/download.html
2. Tesseract4.1,下载地址:
● github地址:https://github.com/tesseract-ocr/tesseract/releases
二.编译工具:
1. Cmake3.16(64位)
2. Vs2019
三. leptonica编译步骤:
1. 由于Tesseract使用第三方库leptonica,所以必须先编译安装leptonica.
2.下载解压leptonica1.74到一个目录,我的是: d:\temp\tesseract_ocr\leptonica-1.74.4
3. 运行cmake:按下图设置源文件和目标文件夹,然后点击【configure】按钮,进行下一步:
4. 设置configure:
5.多次configure:
第一次configure会出现很多红色信息,那就多次点击【configure】按钮直到红色信息没有为止:
6. 注意问题:这里要特别要说明,leptonica缺少第三方图像库(jpg,tiff,gif,png等),因此configure完成后会出现,下面的信息:
这信息我用了很长时间,搜索了网上的一些介绍方法,都没有解决。这个问题,不影响编译,但会影响后面程序的运行。关 于这个问题的解决方法,我后面专门介绍。
7. 修改DLL和LIB输出文件的位置:(我是安放在d:/leptonica)
8. 生成工程文件:点击【generate】按钮
9. 运行vs2019,打开生成的工程文件:
10. 按下面步骤,设置编译属性
11. 开始编译:
12. 编译成功:
在指定位置,生成我们需要的目标文件夹:
四. Tesseract编译步骤:
1. 将下载的tesseract-4.1.1.zip解压到指定目录:D:\temp\test\tesseract-4.1.1
2. 运行cmake:按下图设置源文件和目标文件夹,然后点击【configure】按钮,进行下一步:
3. 设置configure
4. 多次configure:
和前面生成leptonica一样,进行多次【configure】,但依然有上图的红色信息出现,这是因为没有cmake没有找到leptonica位置
5. 指定leptonica位置:
将上面的项,设置成前面编译leptonica的DLL和LIB文件夹的cmake位置:D:\leptonica\cmake
6. 去到两个选项:(下面的两个项不要勾选,否则不能正常cmake)
7. 再次进行,多次configure:(注意一定要有internet网络,因为要下载很多文件):
经过几次【configure】后,最终出现上面的没有红色报警的界面
8. 修改DLL和LIB输出文件的位置:(我是安放在d:/tesseract)
9. 生成工程文件:点击【generate】按钮
10.运行vs2019,打开生成的工程文件:
11. 按照下面步骤设置编译属性:
12. 开始编译
13. 编译成功:
在指定位置生成了,我们需要的目标文件:
五. GIF、JPEG、TIFF等第三方图像文件库编译:
1. 现在我们已经生成所需要的DLL和lib文件,但正如前面(四.6)所说,leptonica的编译生成的leptonica-1.74.4.dll,缺少GIF、JPEG、TIFF等第三方库图形文件,还不能正常使用。调用这个DLL库里的函数,运行中会出现下错误:
2. 这些第三方文件库,我在网上搜索了很长时间,也没有找到很好的解决方案。只好自力更生
3. 其实这些第三方图像文件库,在进行cmake opencv时(参考本人另外的博文)会生成。因此可以把opencv用cmake生成的这些库文件直接link就可以了。下面的连接是已经编译好的这些库obj文件(64位)和h头文件连接:
https://download.youkuaiyun.com/download/dcx_dcx/12326867
4. 解压下载的第三方工程库文件到指定的文件夹:
5. 运行vs2019,打开以前生成的leptonica工程文件:
6. 找到environ.h文件:
7. 修改environ.h文件的这个几个宏:
#if !defined(HAVE_CONFIG_H) && !defined(ANDROID_BUILD) && !defined(OS_IOS)
#define HAVE_LIBJPEG 1
#define HAVE_LIBTIFF 1
#define HAVE_LIBPNG 1
#define HAVE_LIBZ 1
#define HAVE_LIBGIF 0
#define HAVE_LIBUNGIF 0
#define HAVE_LIBWEBP 0
#define HAVE_LIBJP2K 0
#endif /* ! HAVE_CONFIG_H etc. */
修改为:
//这样修改是可以操作jpg,tiff,png图片文件
#define HAVE_LIBJPEG 1
#define HAVE_LIBTIFF 1
#define HAVE_LIBPNG 1
#define HAVE_LIBZ 1
#if !defined(HAVE_CONFIG_H) && !defined(ANDROID_BUILD) && !defined(OS_IOS)
#define HAVE_LIBGIF 0
#define HAVE_LIBUNGIF 0
#define HAVE_LIBWEBP 0
#define HAVE_LIBJP2K 0
#endif /* ! HAVE_CONFIG_H etc. */
8. 按下面步骤添加第三方图形库obj文件
在obj目录下再添加4个目录
点击jpg目录右键:
选择前面解压的第三方图形包里的3rdparty\obj\libjpeg-turbo目录下全部文件:
这样jpeg所需的obj文件就加到本工程项目里
按此方法,把png,tiff,zlib目录下的obj文件全部添加到工程里:
8. 添加h头文件:
复制第三方文件包里3rdparty\include\下所有.h文件到:leptonica-1.74.4解压包下的\temp\test\leptonica-1.74.4\src里
9. 重新编译vc工程文件:
10.编译成功:
11. 这时生成的leptonica-1.74.4.dll(bin目录下)文件完全可以正常使用
六. 64位Tesseract和leptonica编译好的dll、lib库文件及h头文件下载地址:
https://download.youkuaiyun.com/download/dcx_dcx/12310081
七. 测试代码:
#include "baseapi.h"
#include "allheaders.h"
int main()
{
char* outText;
tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();
// Initialize tesseract-ocr with English, without specifying tessdata path
if (api->Init("d:/", "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
Pix* image = pixRead("d:/test1.jpg");
api->SetImage(image);
// Get OCR result
outText = api->GetUTF8Text();
printf("OCR output:\n%s", outText);
// Destroy used object and release memory
api->End();
delete api;
delete[] outText;
pixDestroy(&image);
return 0;
}
测试图片:
识别效果:
| 2 5 A t
完整代码工程下载地址:
https://download.youkuaiyun.com/download/dcx_dcx/12310109