windows编译和使用tesseract(C++ api)
tesseract是一个基于C++编写的开源OCR(光学字符识别)库 本文简单介绍一下windows系统中编译和使用tesseract以及调用该库的C++ api进行开发 环境为win10+vs2015 源码下载tesseract的编译有诸多依赖,tesseract依赖于leptonica,而leptonica又依赖于png,tiff,jpeg等基础库,所以需要下载这些依赖的源码,并且依次编译 考虑到某些图片格式的基础库源码较老并且久未更新难于编译,本文只编译了较新的libtiff,并作为示例,其他图片格式未测试 下载地址:
下载完后解压缩到文件夹,这里将三个项目源码都放在codetest目录 编译特别指定,本文中所有项目生成都是使用cmake-gui工具(首先要会用这个工具),C++编译使用vs2015,所有cmake编译目录都定为build_x64 所有的编译模式都是:vs2015 win64 release 由于tiff --> leptonica --> tesseract 三者之间层层递进,环环相扣,所以编译一定要注意顺序和设置 step1:编译tiff 常规cmake流程编译出 tiff.lib和tiff.dll,位置在 D:codetesttiff-4.0.9build_x64libtiffRelease step2:编译leptonica cmake配置,勾选Grouped和Advanced,会显示png和tiff等图片库的设置入口,要先将tiff的目录配置进去,使得支持tiff格式 然后需要修改 libtiff目录下的两个头文件,将tiffconf.vc.h和tif_config.vc.h改名为tiffconf.h和tif_config.h 这样就能编译出leptonica的库文件了
step3:编译tesseract 根目录的cmake配置文件在 if(NOT EXISTS ${PROJECT_SOURCE_DIR}/.cppan) 这句话之前加上 set(Leptonica_DIR D:/codetest/leptonica-1.76.0/build_x64) include_directories( D:/codetest/leptonica-1.76.0/src D:/codetest/leptonica-1.76.0/build_x64/src )目的是为了让tesseract在cmake的config阶段找到leptonica的头文件和库 在configure的过程会出现如下日志,显示正在下载ICU的依赖,注意打开vpn,否则会因为网络问题不成功 之后,打开sln进行编译,一般情况下会出现一个字符编码的报错 此时不用惊慌,只需要将tesseract中equationdetect.cpp文件修改一下,再编译就好了 static const STRING kCharsToEx[] = {"'","`",""","",",".","〈","〉","《","》","」","「",""}; 改为 static const STRING kCharsToEx[] = { "'","<",">","<<",">>","" }; 然后顺利编译出tesseract项目的各种二进制工具exe,lib和dll
工具使用在D:codetesttesseract-3.05.01build_x64binRelease目录下,从源码目录将tessdata拷贝进去,并且提前下载好已训练语言包,另外,将用到的tiff和liptonica以及要识别的图片都拷贝进来 bmp格式原生支持,tif格式此时也是支持的,这里以tif图片为例 在这个目录输入命令行 tesseract eurotext.tif euro 识别结果 euro.txt The (quick) [brown] {fox} jumps! Over the $43,456.78 <lazy> #90 dog & duck/goose,as 12.5% of E-mail from aspammer@website.com is spam. Der,schnelle” braune Fuchs springt ber den faulen Hund. Le renard brun rapide saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marrén répido salta sobre el perro perezoso. A raposa marrom répida salta sobre 0 C50 preguicoso. 有些字符不是特别准确,还需要训练 编程使用通过写代码调用tesseract的C++ api的形式 创建vs2015 C++工程 源码 main.cpp #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(NULL,"eng")) { fprintf(stderr,"Could not initialize tesseract.n"); exit(1); } // Open input image with leptonica library Pix *image = pixRead("./eurotext.tif"); api->SetImage(image); // Get OCR result outText = api->GetUTF8Text(); printf("---- OCR output:---- n%s",outText); // Destroy used object and release memory api->End(); delete[] outText; pixDestroy(&image); return 0; } 配置 头文件包含目录 主要是leptonica和tesseract的src目录 附加库目录 需要配置leptonica和tesseract的lib路径 附加依赖项 运行 将项目依赖的tiff,leptonica,tesseract的dll全部拷贝到exe执行目录,并且拷贝tessdata和用到的图片到该目录 运行结果 ---- OCR output:---- The (quick) [brown] {fox} jumps! Over the $43,schnelle鈥?braune Fuchs springt 铿乥er den faulen Hund. Le renard brun 芦rapide禄 saute par-dessus le chien paresseux. La volpe marrone rapida salta sopra il cane pigro. El zorro marr茅n r茅pido salta sobre el perro perezoso. A raposa marrom r茅pida salta sobre 0 C50 preguicoso. 可以看出,api识别的结果还是有些不准确的,有待训练优化 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 身份验证错误 要求的函数不受支持 Windows远程桌面连接
- 如何在Window中的嵌入式浏览器中调试Javascript?
- windows远程桌面连接ubuntu 16.04
- ui-automation – Microsoft UI Automation:调用模式异常
- win7使用远程桌面 连接 windows服务器
- .net – 为什么我无法在2.0.0.0播放器框架中重用1.8.2.2 Pl
- Windows 8 – 低延迟音频
- winapi – Windows XP与Vista的SetThreadUILanguage?
- 使用dll和java jni4net时出现UnsatisfiedLinkError异常
- Microsoft Windows远程桌面协议中间人攻击漏洞(CVE-2005-17
- windows10下安装source insight 4.0
- xaml – 如何将我的视图模型中的富文本(FlowDocu
- 标签为Windows的SSH工具?
- Windows Phone 8和Android可以通过Wifi Direct连
- Windows下安装redis并且设置密码
- 最有效的方法来检查Windows中的Java文件是否为空
- windows – ShowWindow和ShowWindowAsync有什么区
- window下强制杀死某个进程用taskkill /pid 进程号
- Windows Containers 大冒险: 优化计划(Dockerfil
- xaml – 在开发Windows 8 Store应用程序时处理不