首先,用到这个东西是因为有个比赛用到ocr技术识别字符。折腾好久才安装好并会调用api。记录一下成果。
tesseract下载在github上,https://github.com/tesseract-ocr/tesseract(传送门)。
下载源码后进行安装,不推介使用cmake,有个报错,本人能力有限。另外一种方法是运行autogen.sh脚本
为了福利小白,命令如下:./autogen.sh
然后make -j7 编译,然后make install
具体当你运行脚本后,会有每下一步的命令提示,跟着做就可以了。
然后这里还有个问题:
有大佬说Ubuntu可以直接apt-get,我也试过了,是可以。但是如果你是一个开发者,想要api接口,而不是命令行。就下载这个吧。apt的那个版本没找到相应的api,貌似只有命令。(如果是我无能,还请大佬们指正)
然后测试是否成功: 先找一张英文字符的图片 如1.jpg
tesseract 1.jpg out
会生成一个out.txt的文本,里面就是识别的内容。如果出现下面的情况:
Error opening data file //home/ww/tesseract/tessdata/eng.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'eng'
Tesseract couldn't load any languages!
Could not initialize tesseract.
请这样
export TESSDATA_PREFIX="/usr/local/Cellar/tesseract/3.05.02/share/tessdata" // 后面是你tessdata的路经
export PATH=$PATH:$TESSDATA_PREFIX
然后就可写代码了
你的有opencv
包含如下的头文件
代码写法
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include "tesseract/baseapi.h"
#include "allheaders.h"
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image;
image=imread("/home/ww/Desktop/1.jpeg");
imshow("Sample", image);
tesseract::TessBaseAPI tessearct_api;
const char *languagePath = "/home/ww/tesseract/tessdata"; //训练数据路径
const char *languageType = "eng"; //语言类型
// 可设置白名单
//tessearct_api.SetVariable("tessedit_char_whitelist", "0123456789");
//设置识别模式
tessearct_api.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
tessearct_api.SetImage((uchar*)image.data, image.cols,
image.rows, image.step[1], image.step[0]);
int nRet = tessearct_api.Init(languagePath, languageType,tesseract::OEM_DEFAULT);
if (nRet != 0) {
printf("初始化字库失败!");
return -1;
}
/*暂时不懂系列 */
//tessearct_api.ProcessPages(image,retry_config,timeout_ms,renderer);
//tessearct_api.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
//tessearct_api.SetImage(seg_image.data, seg_image.cols, seg_image.rows, 1, seg_image.cols); //输入图像
string out = string(tessearct_api.GetUTF8Text());
cout<<"the out result :"<<out<<endl;
waitKey(0);
return 0;
}
但是,还有个问题,如果你想要编译成功的话,make里面一定要-ltesseract一下。
最后,还有你想要识别中文的话,请到https://github.com/tesseract-ocr/tessdata里面下载已经训练好的数据,放到tessdata下,然后改一下代码。(我已注释,自己找)。到此我两天的学习成果完结了,后面还在研究。
谢谢一下博客的大佬指路:https://blog.csdn.net/qq_35054151/article/details/83747333