博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tesseract+opencv+VS+win实现OCR
阅读量:6908 次
发布时间:2019-06-27

本文共 3783 字,大约阅读时间需要 12 分钟。

参考网站:

(第一次)

(分析)

(简洁)

 

tesseract训练

 

  1. 命名

为了方便 tif文面命名格式[lang].[fontname].exp[num].tif

lang是语言 fontname是字体
比如我们要训练自定义字库 image 字体名MyFont
那么我们把tif文件重命名 image.MyFont.exp0.tif

  1. 生成box文件
    1. tesseract image.MyFont.exp0.tif image.MyFont.exp0 -l chi_sim batch.nochop makebox
  2. 调整box
  3. 训练,生成.tr训练文件
    1. tesseract  mjorcen.normal.exp0.jpg mjorcen.normal.exp0  nobatch box.train
  4. 计算字符集
    1. unicharset_extractor mjorcen.normal.exp0.box
  5. 字体属性

新建一个font_properties文件

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

里面内容写入 normal 0 0 0 0 0 表示默认普通字体。

  1. Clustering
  2. 生成主形状表shapetable
    1. shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr
  3. 形状原型inttemp, 每个字符所希望的特征pffmtable
    1. mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr
  4. 数据文件normproto
    1. cntraining mjorcen.normal.exp0.tr
  5. 合并文件font.traineddata

把目录下的unicharsetinttemppffmtableshapetablenormproto这五个文件前面都加上normal.

  1. combine_tessdata normal.

必须确定的是第2456行的数据不是-1,那么一个新的字典就算生成了。

 

字符识别数据集

 

使用多张训练图片进行训练。完成

将多个traineddata进行合并。不行。

利用字体文件生成训练集,进行自动化训练。Text2image

 

 

 

要训练一个新的语言(自定义语言或者某种自然语言都可以)对应的traineddata文件,需要产生下列过程文件:

? lang.config

? lang.unicharset

?lang.unicharambigs

? lang.inttemp

? lang.pffmtable

? lang.normproto

? lang.punc-dawg

? lang.word-dawg

?lang.number-dawg

? lang.freq-dawg

     在这八个文件中,红色标示的是必须的,其他的文件可选。当这些文件都准备好之后,再使用combine_tessdata进行最后的合并工作,生成lang.traineddata ,这个文件就是最终训练出来语言库。下面再来说一下如何产生上述的文件:

1、获取一个训练图片(*.tif

2、产生相应的Box文件(*.box

tesseractlang.fontname.number.tif lang.fontname.number batch.nochop makebox

       这一步产生对应的lang.fontname.number.box 文件。   

   编辑该Box文件,校正识别出来的字符,如果单个字符识别成了两个或者多个字符,则要将这些行进行合并。前两项坐标取最小值,后两项坐标取最大值。

3、产生字符特征文件(*.tr

tesseractlang.fontname.number.tif lang.fontname.number nobatch box.train

这一步产生三个文件:

(1) tesseract.log记录该步骤执行结果;

(2) lang.fontname.number.txt

(3) lang.fontname.number.tr为特征文件。

4、计算字符集(unicharset

unicharset_extractorlang.fontname.number_1.box

这一步产生字符集文件unicharset

5、聚集字符特征(inttemppffmtablenormproto

mftraining -Uunicharset -O lang.unicharset lang.fontname.number_1.tr

使用上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件lang.unicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符特征数文件pffmtable。附带还会产生Microfeat文件,但是并没有用到该文件。

cntraininglang.fontname.number_1.tr

这一步产生字符形状正常化特征文件normproto

6、产生字典文件(可选)

wordlist2dawgfrequent_words_list lang.freq-dawg lang.unicharset

wordlist2dawgwords_list lang.word-dawg lang.unicharset

frequent_words_list存放出现频率较高的字符;words_list存放所有字符集,至少一个字符。每个字符占一行。这样可以产生对应语言的字典文件了,共五个。

同样的方法产生punc-dawg文件(符号)、number-dawg文件(数字)以及user-words文件(用户自定义字符,通常为空)。

7、模糊字集校正文件(unicharambigs)(可选)

例如某unicharambigs文件内容如下:

2 ' ' 1 " 1

1 m 2 r n 0

3 i i i 1 m 0

每一行表示一条校正信息:第一个数字表示接下来有几个字符,第二个数字也表示后面跟有几个字符,最后一个数字表示校正动作的类型。

在这个例子中,第一行表示将连续的两个单引号(')合并成一个双引号("),最后的数字1表示强制转换;第二行、第三行表示一个字母m有可能被识别成两个字母'r''n',也有可能识别成连续三个字母'i'

这个校正文件可以为空或者不存在。

8、合并训练文件(*.traineddata

combine_tessdata lang.

这是最后一步,产生训练结果文件lang.traineddata

注意这一步控制台执行的结果显示,有0-9项指示了文件的地址,这十个地址对应了文章前面所提到的十项所需要的文件。其中1345这四项(从0开始排序)是必须的,缺少一项(显示为-1)都将不算成功。

9

tesseract image.tifoutput -l lang

使用我们刚刚训练好的lang.traineddata文件来识别图形。识别出来的结果将会存放在output.txt文件中。

特别说明:

在训练的过程中,初次接触的人容易犯一些小错误,这些错误虽然小,但很可能让你陷入困惑和痛苦中。下面简单的罗列一下几点需要注意的地方:

1)前面提到的lang可以被你想要的任何字符串代替,主要是为了给你训练的库取个名字。

2)第二步产生的Box文件,需要手动修改,一定要以Unicode模式保存。修改的时候要注意方法和含义,详细的说明Google原文中有说明。

3)第五步程序自动产生的文件是只有扩展名的,需要你自己手动将名字改成前缀一致。后面产生的可选文件也依照此法操作。

4)所有的这些文件都准备好了之后,需要放到同一目录下,执行combine_tessdata进行合并的时候,注意要切换到文件所在的目录执行,否则将会报错,提示找不到文件。

5)合并成功之后,要记得将训练好的文件(lang.traineddata)放到程序的tessdata子目录下,否则测试就会提示找不到语言库文件。

   好了,到这里,基本上所有的问题都能解决了。

 

 

九、OCR开发中遇到的其他问题,没来得及写文档,参考网址能够完全解决:

 

Vs2013编译tesseract

(成功)

(vs中编译和使用)

(vs配置使用)

 

(问题1)

tesseract API 文档

(tesseract-document)

 

utf-8问题

(VS调试器正确显示UTF-8字符串)

(DOS窗口cmd中显示UTF-8字符的解决方法)

opencv编译freeType库,显示中文

(opencv显示中文)

(在Mat中写入的类Cv310Text

openCV文字检测mser

(文字检测与识别mser)

VS编译opencv_contrib

(opencv_contrib配置)

问题:

(解决)

转载于:https://www.cnblogs.com/yizhichun/p/6340557.html

你可能感兴趣的文章
shell中(),[]和[[]]的区别
查看>>
Centos7.x下Nginx安装及SSL配置与常用命令
查看>>
98. Validate Binary Search Tree
查看>>
【Android】Retrofit 2.0 的使用
查看>>
Java程序员幽默爆笑锦集
查看>>
【勘误】第三章基本变量
查看>>
用友iuap入选2016世界互联网领先科技成果50强
查看>>
fastclick 源码注解及一些基础知识点
查看>>
CentOS Rsync服务端与Windows cwRsync客户端实现数据同步
查看>>
TAR包CLONE方式 安装11GR2 RAC数据库 (gril软件root.sh)
查看>>
热备份路由协议(HSRP)大型配置之详解
查看>>
gb2312编码文件转成utf8
查看>>
一次WinRoute后门攻防实况
查看>>
数据驱动业务决策的5个步骤
查看>>
上网个人信息如何不“裸奔” 10条信息安全建议
查看>>
JIRA的常用选项
查看>>
专访Facebook HipHop作者、阿里研究员赵海平:生物与计算机交织的独特人生
查看>>
监控视频须严加规范
查看>>
实例化需求的优点
查看>>
Linux管理常见错误的解决方法
查看>>