一、源码编译安装:

安装前建议你备份一下/usr/include/目录下opencv和opencv2两个目录。

反正我每次安装完tesseract后,我的opencv头文件不是没了就是出问题。


github地址:https://github.com/tesseract-ocr/tesseract/releases

建议下载安装4.0版本,有LSTM,准确率和速度都不错。

其次建议下载安装3.05版本,也是此时的最新版本,没有LSTM。

安装介绍地址:https://github.com/tesseract-ocr/tesseract/blob/master/INSTALL.GIT.md


懒得打开上面安装链接的看下面就好。

1. 先安装各种依赖

sudo apt-get install g++ # or clang++ (presumably)
sudo apt-get install autoconf automake libtool
sudo apt-get install autoconf-archive
sudo apt-get install pkg-config
sudo apt-get install libpng12-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install zlib1g-dev

如果你要安装训练工具的话,还要安装下面三个依赖
sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev

2. 然后安装Leptonica

这个软件有很多版本,先给你下载地址,然后给你版本对照表。

官网地址:http://www.leptonica.org/


必须源码编译安装,默认安装目录在/usr/local/下


3. 安装tesseract

./autogen.sh
./configure
make
sudo make install
sudo ldconfig
make training
sudo make training-install

二、部分API介绍

预训练模型地址:https://github.com/tesseract-ocr/tessdata

预训练模型可以放到任意位置,也可以放到默认位置:/usr/local/share/tessdata/


这个方法基本原理我当时也没深研究。

我理解大概就是先把图片转化为灰度图。

然后以当前点为中心,判断周围一圈的点是否不为白色。

如果这个点不是白色,那么继续以这个点为中心点向外扩张。


通过上面简单原理,我们可以知道。

输入图片越小运行速度越快

输入图片越干净输出越准确

字符不能有过大旋转角度(作者肯定不会360度旋转训练模型,他也确实没这么做)


下面是API例子:

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>


int main()
{
    char *outText;

    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();

    //设置识别引擎,如果要用cube引擎,需要去上面下载cube对应的预训练模型。
    tesseract::OcrEngineMode enginemode = static_cast
 
 <:ocrenginemode>
  
  (0);
	/*
	"OCR Engine modes:"
	"  0    Original Tesseract only."
	"  1    Cube only."
	"  2    Tesseract + cube."
	"  3    Default,based on what is available."
           4   Neural nets (LSTM) only.(版本4.0才有)
	*/

    // 初始化,NULL可以替换成你存放预训练模型的路径。下面"eng"可以是"eng++chi_sim"形式。
    if (api->Init(NULL,"eng",enginemode)) 
    {
        fprintf(stderr,"Could not initialize tesseract.\n");
        exit(1);
    }
    //下面两句话都是设置只识别数字,第一种方法是打开识别开关,第二种方法是只识别白名单内字符。当然还有黑名单。具体看下面我给的API地址。
    //api->Setvariable("classify_bln_numeric_mode","1");
    //api->Setvariable("tessedit_char_whitelist","0123456789");

    //设置识别页面类型
    tesseract::PageSegMode pagesegmode = static_cast
  
  <:pagesegmode>
    (7); api->SetPageSegMode(pagesegmode); /* "Page segmentation modes:" " 0 Orientation and script detection (OSD) only." " 1 Automatic page segmentation with OSD." " 2 Automatic page segmentation,but no OSD,or OCR." " 3 Fully automatic page segmentation,but no OSD. (Default)" " 4 Assume a single column of text of variable sizes." " 5 Assume a single uniform block of vertically aligned text." " 6 Assume a single uniform block of text." " 7 Treat the image as a single text line." " 8 Treat the image as a single word." " 9 Treat the image as a single word in a circle." " 10 Treat the image as a single character." " 11 Sparse text. Find as much text as possible in no particular order." " 12 Sparse text with OSD." " 13 Raw line. Treat the image as a single text line," */ // Open input image with leptonica library Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif"); api->Setimage(image); //下面是通过opencv读取图片 //cv::Mat gray_img,thres_img; //cv::Mat img = cv::imread(""); //cv::cvtColor(img,gray_img,cv::COLOR_BGR2GRAY); //cv::threshold(gray_img,thres_img,127.,255.,cv::THRESH_BINARY); //api->Setimage((uchar*)thres_img.data,thres_img.cols,thres_img.rows,1,thres_img.cols); // 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; } 
  

API头文件地址:https://github.com/tesseract-ocr/tesseract/blob/master/api/baseapi.h


先这样吧,这个工具功能蛮强大的。还需要时间慢慢研究。

顺便提一嘴我做卡片识别的思路。

关键技术是opencv的findContours()配合finetune后的mnist,数字识别效果拔群。


以上部分内容参考自:https://github.com/tesseract-ocr/tesseract

【OCR】源码编译安装tesseracr-ocr并简单说一下接口——Ubuntu14.04的更多相关文章

  1. HTML实现代码雨源码及效果示例

    这篇文章主要介绍了HTML实现代码雨源码及效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – 在哪里可以找到tesseract-&gt; setvariable函数的第一个参数的可用属性名称列表?

    从很多护目镜中,我只能找到其中几个,如下图所示:tesseract的setvariable我想知道他们中有多少人?有没有列表可用?如果有的话请给我链接.解决方法这个代码应该是iOS的诀窍…可能需要一点调整.

  3. ios – 是否可以使用Tesseract OCR识别iPhone屏幕上绘制的角色?

    从过去的2周开始,我正在努力实现“识别iPhone屏幕上绘制的角色”.我搜索这个,我找到了TesseractOCR.通过使用TesseractOCR,我们能够识别图片中的字符.现在我的问题是,是否可以使用TesseractOCR识别iPhone屏幕上绘制的角色?

  4. 源码推荐:简化Swift编写的iOS动画,iOS Material Design库

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. swift皮筋弹动发射飞机ios源码

    这是一个款采用swift实现的皮筋弹动发射飞机游戏源码,游戏源码比较详细,大家可以研究学习一下吧。

  6. swift 写的app 源码,保存一下下

    http://www.topthink.com/topic/3345.htmlhttp://www.csdn.net/article/2015-01-09/2823502-swift-open-source-libs

  7. swift 源码网站 code4app

    http://code4app.com/ios/HTHorizontalSelectionList/54cb2c94933bf0883a8b4583http://123.th7.cn/code/DMPagerViewController_2522.html

  8. OpenStack Swift源码导读:业务整体架构和Proxy进程

    OpenStack的源码分析在网上已经非常多了,针对各个部分的解读亦是非常详尽。其中proxy是前端的业务接入进程。account、container和object目录分别是账户、容器和对象的业务处理逻辑进程。各个业务进程或模块之间的逻辑关系可以参考《OpenstackSwift简介》文中的架构图。在《OpenstackSwift简介》从理论上面介绍了具体的节点寻找过程。

  9. 源码推荐(7.21):顶部滑动菜单FDSlideBar,Swift版无限循环轮播图

    顶部滑动菜单FDSlideBarFDSlideBar是一个顶部滑动菜单,如常见的网易、腾讯新闻等样式。菜单间切换流畅,具有较好的体验性。测试环境:Xcode6.2,iOS6.0以上Swift版无限循环轮播图无限循环轮播图片点击代理可设置图片Url的数组Url和本地图片混合轮播测试环境:Xcode6.2,iOS7.0以上弹幕系统实现--QHDanumuDemo说明:QHDanmu文件夹下是主要的弹幕模块系统,QHDanmuSend文件夹下是简单的发射弹幕的界面。

  10. openstack swift和wsgi源码分析1 HTTP请求处理过程

    分析proxy-server代理服务的执行流程,其他的三个主要服务accountserver,containerserver,objectserver执行过程通proxyserver类似。入口函数调用run_wsgi,此函数完成以下工作:下面重点研究下process_request函数是如何把消息转化为HTTP的request对象这一过程。process_request函数,生成HttpProtocol对象,并执行init操作,注意,HttpProtocol对象自身没有init函数,所以会调用父类的父类的

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部