tesseract-ocr使用以及训练方法

本人最近在做字符识别,所以自行在网上寻找方法,接触到tesseract,自己按照网上方法做的时候,也遇到一些问题,解决了一些。所以我决定写下我第一个博客,一是方便自己以后查看,更新学习。二是方便和网友交流学习。

Tesseract介绍

Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护,目前发布在Googel Project上。

安装Tesseract,从http://code.google.com/p/tesseract-ocr/downloads/list下载Tesseract,3.01上的版本支持中文。安装后在电脑上会有一个Tesseract-OCR目录,通过目录录下的tesseract.exe程序就可以对图像的字符进行识别。考虑到万一有人上不了谷歌,这个Tesseract-OCR文件夹我也上传了,地址:点击打开链接。文件夹中除了Tesseract的相应文件外,还有一个tesseract-vs2013-include-lib-dll文件,这个是VS2013用来调用API的配置文件,后面的博客会写到。打开如图所示。

使用默认的语言库识别

准备一张待识别的图片,我选取一段《成都》的歌词。

接着就可以打开命令行,进入Tesseract-OCR的目录,输入:

tesseract.exe gc.jpg result -l chi_sim

其中result表示输出结果文件txt名称,chi_sim表示用以识别的语言文件为英文。执行后文件夹中会多一个result.txt。

效果非常不好,因为很多汉字是左右结构,比如:眼泪。所以我要自己训练自己的中文库。

训练样本

训练样本需要一个工具,jTessBoxEditor,下载地址:点击打开链接。这个工具是用java开发的,需要jre7以上的版本支持。

1、获取训练的图片,为了方便我使用了原来的图片一张,样本当然是越多越好。

2、合并样本文件,打开jTessBoxEditor,点开train.bat。在菜单栏中Tools->Merge TIFF。在弹出的窗口中可以选择多张样本图片(网上之前有说要.tif格式的图片,测试.jpg格式的也行),我这边就用了一张样本图片。

一张或者多张图片可以合成一张tif文件。

3、生成box文件, 打开命令行,输入:

tesseract.exe gc.font.exp1.tif gc.font.exp1 batch.nochop makebox

生成的BOX文件为gc.font.exp1.box,BOX文件为Tessercat识别出的文字和其坐标。Make BOX的命名的个数为:

tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。有些博客说对于这个命名无所谓,但是我尝试到后免出错了,是tr文件名的问题,在下面我会贴出报错图。读者也可以试试,不知是不是我之前步骤哪里做错了。
      4、文字矫正,打开jTessBoxEditor工具,打开gc.font.exp1.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如下图所示。可以看出有些字符分割和识别都不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。(注:发现中文打不上去,在菜单Setting->Font中可以修改,改为宋体即可)

对于标定的方框以及识别的字符进行修改。

选择两个或两个以上的框,Merge可进行合并;Split将框进行拆分;Insert插入框,如果图片上一个框也没有,那无法进行插入;Delete删除框。选择要修改的字符框,在Character中输入想要修改的字,再点击齿轮,即可修改。修改后,如下图所示:

5、生成.tr文件,在命令行中输入:

tesseract gc.font.exp1.tif gc.font.exp1 nobatch box.train

6、计算字符集,从生成的box文件中提取,继续输入:

unicharset_extractor gc.font.exp1.box

7、生成字体特征文件,在当前文件夹中新建任意名称的文件,里面格式为:

<span><fontname> <italic> <bold> <fixed> <serif> <fraktur>  </span>

例如:我建了一个名为font的文件,里面内容为:font 0 0 0 0 0

这个文件可以是手动生成的txt文件,也可以在在命令行中输入:

echo font 0 0 0 0 0 >font

即可。

8、特征训练,继续在命令行输入:

mftraining -F font -U unicharset gc.font.exp1.tr

在这一步我出现了好几个错误,如下图

(1)Failed to load unicharset from file uncharset,这是因为刚刚的font的文件,如果是在txt中写的,一定要写成font.txt,加上后缀。

(2)feature training for Tesseract已停止工作。命令行显现:

Reading num.tr …
      Font id = -1/0, class id = 1/13 on sample 0

font_id >= 0 && font_id < font_id_map_.SparseSiz..\..\classify\trainingsampleset.cpp, line 622

这个问题就是上面命名所导致的,所以还是规范命名。

9、聚集tesseract识别的训练文件,命令行输入:

cntraining gc.font.exp1.tr

有人会说其他还有一条shapeclustering语句,说下这个步骤可有可无,这个是在3.02中新加的,主要针对印度语,所以我们在做的时候会有一个警告 warning No shape table file present。
        这时候文件夹中会多了四个文件,在unicharset,inttemp,normproto,pfftable文件名前面加上font.。如下图所示:

10、最后,合并相关文件,生成字典文件,输入:

combine_tessdata font.

所有输入命令如下图所示

最终,在当前目录中会产生一个为font.traineddata文件,将其拷到tessdata文件夹中,再测试一下。

虽然不是全部识别出来,但是较之前的识别率提高了很多,这个和样本数量也是有关系的,而且这句话中左右结构的字特别多,原图26个字,却识别出31个字出来了,这个问题,我还没想到什么方法,单个字训练?。我也试了其他字符训练,效果还可以

PS:tesseract-ocr还可从github下载:https://github.com/tesseract-ocr/

(0)

相关推荐

  • Python3.6使用tesseract-ocr的正确方法

    Tesseract介绍 tesseract是一个挺不错的OCR引擎,目前的问题是最新的中文资料相对较少,过时.不准确的信息偏多. tesseract是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/tesseract,目前最新的源码可以在这里下载. 实际使用tesseract ocr也有两种方式:1. 动态库方式 libtesseract  2. 执行程序方式 tesseract.exe 环境 Python 3.6.3 pip

  • python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法

    1.安装Pillow pip install Pillow 2.安装tesseract-ocr github地址: https://github.com/tesseract-ocr/tesseract 或本地下载地址:https://www.jb51.net/softs/538925.html windows: The latest installer can be downloaded here: tesseract-ocr-setup-3.05.01.exe and tesseract-oc

  • Java使用Tesseract-Ocr识别数字

    前言 Tesseract-Ocr是我在编写爬虫项目中,用来识别图片(不是验证码)的本地解决方案(因为客户不想使用API识别,太贵),识别率目前达到了100%,可以说是相当了得,当然了,这取决于使用的traineddata. 简介 Tesseract最初是在1985年至1994年间在Hewlett-Packard Laboratories Bristol和Greeley Colorado的Hewlett-Packard Co开发的,1996年进行了一些更改,移植到Windows,并且随着C++在1

  • Perl使用Tesseract-OCR实现验证码识别教程

    一.Tesseract-OCR 是什么 An OCR Engine that was developed at HP Labs between 1985 and 1995- and now at Google 基于Leptonica(http://leptonica.com/)图形处理库开的开源图形识别引擎. 支持Linux.Windows.Mac平台, 支持.NET.C++.Python.Java等开发语言:https://code.google.com/p/tesseract-ocr/wik

  • Python识别快递条形码及Tesseract-OCR使用详解

    识别快递单号 这次跟老师做项目,这项目大概是流水线上识别快递上的快递单号.首先我尝试了解条形码的基本知识 百度百科:条形码 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案.条形码可以标出物品的生产国.制造厂家.商品名称.生产日期.图书分类号.邮件起止地点.类别.日期等许多信息,因而在商品流通.图书管理.邮政管理.银行系统等许多领域都得到广泛的应用. 条形码有

  • C#使用Tesseract进行Ocr识别的方法实现

    目录 1.Nuget搜索Tesseract 2.项目安装Tesseract 3.引用命名空间 4.上Github下载别人的训练库 5.选择图片进行识别 1.Nuget搜索Tesseract 2.项目安装Tesseract 3.引用命名空间 using Tesseract; 4.上Github下载别人的训练库 https://github.com/tesseract-ocr/tessdata 这里下载中文的chi_sim.traineddata,放到了D盘根目录 5.选择图片进行识别 我把图片命名

  • Selenium+Tesseract-OCR智能识别验证码爬取网页数据的实例

    目录 1.项目需求描述 2.整体思路 3.功能实现 1.项目需求描述 通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的动态识别,将获取到的数据存到数据库. 2.整体思路 1.通过Selenium技术,无窗口模式打开浏览器 2.在输入框中动态输入订单号 3.将图片验证码截图保存到本地 4.通过Tesseract-OCR技术去本地识别验证码转化为文字 5.将获取的验证码输入输入框 6.点击查询获取列表数据 3.功能实现 1.下载并安装Google浏览器,安装Googl

  • opencv+tesseract实现验证码识别的示例

    目录 一.需要识别的内容 二.直接调用tesseract来完成识别(识别率很差) 三.训练数据样本,提升识别率 四.生成样本库字体 五.通过Opencv清除图片的多余杂质(Java实现) 一.需要识别的内容 需要识别的验证码内容如下  验证码下载下载地址. 二.直接调用tesseract来完成识别(识别率很差) 识别的图片内容为: 在window系统钟打开cmd命令窗口,执行识别命令如下: tesseract.exe 01.png output.txt -l eng 识别结果为:519}   

  • python利用 pytesseract快速识别提取图片中的文字((图片识别)

    目录 前言 一.配置环境 1. 安装python依赖 2. 安装识别引擎 二.使用步骤 1.引入库 2.提取图片文字 3.运行效果 总结 提示:本文多图,请手机端注意流量. 前言 利用python做图片识别,识别提取图片中的文字会有很多方法,但是想要简单一点怎么办,那就可以使用tesseract识别引擎来实现,一行代码就可以做到提取图片文本. 一.配置环境 1. 安装python依赖 本程序用到了两个python库,pytesseract和PIL,所以先来安装. 运行以下命令 pip insta

  • 使用Python中的pytesseract模块实现抓取图片中文字

    目录 一.需求分析 二.方案选择 三.实验实操 3.1.配置环境 3.2. Anaconda配置 3.3.安装tesseract程序 3.4.安装pytesseract模块 3.5.见证奇迹的环节 一.需求分析 最近同事用网上提供扫描软件进行扫描识别文字,每天上线只能够做两次扫描,请求我研发一个小工具帮助解决识别图片的中文字. 二.方案选择 使用pytesseract模块可以解决这个需求问题,pytesseract是光识别图片的模块.需要安装第三方资源库进行搜索. 三.实验实操 3.1.配置环境

随机推荐