基于tesseract的字符识别整个流程————从安装到使用(折腾的自闭两天)

首先,用到这个东西是因为有个比赛用到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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lobmo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值