1、背景

前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率。

本文将针对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率。

2、准备工具

tesseract样本训练有一个官方流程说明,https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract#run-tesseract-for-training,不过都是英文的,个人认为这个地址适合于查找细节问题,全程看E文对大众还是有一定的困难。

具体的方法有两种:1-利用三方工具,2-完全命令行操作,三方工具主要在https://github.com/tesseract-ocr/tesseract/wiki/AddOns下载,本文将用到jTessBoxEditor这个工具,我们先给他下载到本地。

需要特别说明,这个工具是基于java虚拟机运行的,所以我们还要下载并安装一个java虚拟机,下载地址:http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-windows-x64.exe?AuthParam=1463733597_1161f2d895aa7606ed260b43b83d5f86

总结一下:

1、工具2 java虚拟机  Ver 1.8.0_91 64位版本 (oracle官网)

2、工具1 jtessboxeditor  Ver 1.5版本 (jtessboxeditor官网),运行界面如下:

3、使用实例

1)、准备样本图片

手动刷新某网站验证码,手动或者写程序,保存了101个验证码样本文件,分别命名成:1.png,2.png,……,101.png。

该验证码有几个特点:a、定长4位,b、都是数字,c、有背景干扰,但比较简单,d、字体为红色。

为了提高识别率,首先做了一个工作就是灰度化处理,并全部转换成tif文件,分别命名成:1.tif,2.tif,……,101.tif,统一存放在d:\python\lnypcg下。

2)、合并样本图片

打开jtessboxeditor,点击Tools->Merge Tiff ,按住shift键选择前文提到的101个tif文件,并把生成的tif合并到新目录d:\python\lnypcg\new下,命名为langyp.fontyp.exp0.tif。

注意:langyp 是本人定义的语言名称,fontyp是本人定义的字体名称,后续都会用到,你可以修改成你喜欢的名字

3)、生成box文件

执行命令生成langyp.fontyp.exp0.box文件

tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 batch.nochop makebox

  1. D:\python\lnypcg\new>tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 batch.nochop makebox
  2. Tesseract Open Source OCR Engine v3.02 with Leptonica
  3. Page 1 of 101
  4. Page 2 of 101
  5. Page 3 of 101
  6. ……
  7. Page 101 of 101
  8.  
  9. D:\python\lnypcg\new>dir
  10. 驱动器 D 中的卷没有标签。
  11. 卷的序列号是 36D9-CDC7
  12.  
  13. D:\python\lnypcg\new 的目录
  14.  
  15. 2016-06-03 14:37 <DIR> .
  16. 2016-06-03 14:37 <DIR> ..
  17. 2016-06-03 14:30 6,327 langyp.fontyp.exp0.box
  18. 2016-06-03 13:07 126,056 langyp.fontyp.exp0.tif
  19. 2 个文件 132,383 字节
  20. 2 个目录 24,869,994,496 可用字节

4)、修改box文件

切换到jTessBoxEditor工具的Box Editor页,点击open,打开前面的tiff文件langyp.fontyp.exp0.tif,工具会自动加载对应的box文件。

检查box数据,如下图所示,数字8被误认成字母H,手工修改H成8,并保存。

点击下图红色框的按钮,逐个核对tif文件的box数据,全部检查结束并保存。

5)、生成font_properties

执行echo命令生成font_properties。

echo fontyp 0 0 0 0 0 >font_properties

也可以手工新建一个名为font_properties的文本文件(注意该文件没有扩展名),内容为字体名fontyp,后面带5个0,分别代表字体的粗体、斜体等属性,这里全部是0

  1. D:\python\lnypcg\new>echo fontyp 0 0 0 0 0 >font_properties
  2.  
  3. D:\python\lnypcg\new>type font_properties
  4. fontyp 0 0 0 0 0

6)、生成训练文件

执行命令,生成langyp.fontyp.exp0.tr训练文件

tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 nobatch box.train

  1. D:\python\lnypcg\new>tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 nobatch box.train
  2. Tesseract Open Source OCR Engine v3.02 with Leptonica
  3. Page 1 of 101
  4. row xheight=8.66667, but median xheight = 10
  5. APPLY_BOXES:
  6. Boxes read from boxfile: 4
  7. Found 4 good blobs.
  8. Generated training data for 1 words
  9. ……
  10. ……
  11. ……
  12. Page 101 of 101
  13. row xheight=8.66667, but median xheight = 10
  14. APPLY_BOXES:
  15. Boxes read from boxfile: 4
  16. Found 4 good blobs.
  17. Generated training data for 1 words
  18.  
  19. D:\python\lnypcg\new 的目录
  20.  
  21. 2016-06-03 16:34 <DIR> .
  22. 2016-06-03 16:34 <DIR> ..
  23. 2016-06-03 16:05 16 font_properties
  24. 2016-06-03 14:30 6,327 langyp.fontyp.exp0.box
  25. 2016-06-03 13:07 126,056 langyp.fontyp.exp0.tif
  26. 2016-06-03 16:20 618,844 langyp.fontyp.exp0.tr
  27. 2016-06-03 16:20 202 langyp.fontyp.exp0.txt
  28. 5 个文件 751,445 字节
  29. 2 个目录 24,869,101,568 可用字节

7)、生成字符集文件

执行命令,生成名为unicharset的字符集文件。

unicharset_extractor langyp.fontyp.exp0.box

  1. D:\python\lnypcg\new>unicharset_extractor langyp.fontyp.exp0.box
  2. Extracting unicharset from langyp.fontyp.exp0.box
  3. Wrote unicharset file ./unicharset.
  4.  
  5. D:\python\lnypcg\new>dir
  6. 驱动器 D 中的卷没有标签。
  7. 卷的序列号是 36D9-CDC7
  8.  
  9. D:\python\lnypcg\new 的目录
  10.  
  11. 2016-06-03 16:41 <DIR> .
  12. 2016-06-03 16:41 <DIR> ..
  13. 2016-06-03 16:05 16 font_properties
  14. 2016-06-03 14:30 6,327 langyp.fontyp.exp0.box
  15. 2016-06-03 13:07 126,056 langyp.fontyp.exp0.tif
  16. 2016-06-03 16:20 618,844 langyp.fontyp.exp0.tr
  17. 2016-06-03 16:20 202 langyp.fontyp.exp0.txt
  18. 2016-06-03 16:41 712 unicharset
  19. 6 个文件 752,157 字节
  20. 2 个目录 24,869,171,200 可用字节

8)、生成shape文件

执行命令,生成shape文件

shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr

  1. D:\python\lnypcg\new>shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
  2. Reading langyp.fontyp.exp0.tr ...
  3. Building master shape table
  4. Computing shape distances...
  5. Stopped with 0 merged, min dist 999.000000
  6. Computing shape distances... 0
  7. Stopped with 0 merged, min dist 999.000000
  8. Computing shape distances... 0
  9. Stopped with 0 merged, min dist 999.000000
  10. Computing shape distances... 0
  11. Stopped with 0 merged, min dist 999.000000
  12. Computing shape distances... 0
  13. Stopped with 0 merged, min dist 999.000000
  14. Computing shape distances... 0
  15. Stopped with 0 merged, min dist 999.000000
  16. Computing shape distances... 0
  17. Stopped with 0 merged, min dist 999.000000
  18. Computing shape distances... 0
  19. Stopped with 0 merged, min dist 999.000000
  20. Computing shape distances... 0
  21. Stopped with 0 merged, min dist 999.000000
  22. Computing shape distances... 0
  23. Stopped with 0 merged, min dist 999.000000
  24. Computing shape distances... 0
  25. Stopped with 0 merged, min dist 999.000000
  26. Computing shape distances... 0
  27. Stopped with 0 merged, min dist 999.000000
  28. Computing shape distances...
  29. Stopped with 0 merged, min dist 999.000000
  30. Computing shape distances...
  31. Stopped with 0 merged, min dist 999.000000
  32. Computing shape distances... 0 1 2 3 4 5 6 7 8 9 10
  33. Stopped with 0 merged, min dist 0.057803
  34. Master shape_table:Number of shapes = 11 max unichars = 1 number with multiple unichars = 0
  35.  
  36. D:\python\lnypcg\new>dir
  37. 驱动器 D 中的卷没有标签。
  38. 卷的序列号是 36D9-CDC7
  39.  
  40. D:\python\lnypcg\new 的目录
  41.  
  42. 2016-06-03 17:24 <DIR> .
  43. 2016-06-03 17:24 <DIR> ..
  44. 2016-06-03 17:20 19 font_properties
  45. 2016-06-03 14:30 6,327 langyp.fontyp.exp0.box
  46. 2016-06-03 13:07 126,056 langyp.fontyp.exp0.tif
  47. 2016-06-03 17:23 618,844 langyp.fontyp.exp0.tr
  48. 2016-06-03 17:23 202 langyp.fontyp.exp0.txt
  49. 2016-06-03 17:24 723 langyp.unicharset
  50. 2016-06-03 17:24 202 shapetable
  51. 2016-06-03 17:24 712 unicharset
  52. 8 个文件 753,085 字节
  53. 2 个目录 24,868,278,272 可用字节

9)、生成聚集字符特征文件

执行命令,生成3个特征字符文件,unicharset、inttemp、pffmtable

mftraining -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr

  1. D:\python\lnypcg\new>mftraining -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
  2. Read shape table shapetable of 11 shapes
  3. Reading langyp.fontyp.exp0.tr ...
  4. Done!

10)、生成字符正常化特征文件

执行命令,生成正常化特征文件normproto。

cntraining langyp.fontyp.exp0.tr

  1. D:\python\lnypcg\new>cntraining langyp.fontyp.exp0.tr
  2. Reading langyp.fontyp.exp0.tr ...
  3. Clustering ...

11)、更名

执行命令,把步骤9,步骤10生成的特征文件进行更名。

rename normproto fontyp.normproto
rename inttemp fontyp.inttemp
rename pffmtable fontyp.pffmtable
rename unicharset fontyp.unicharset
rename shapetable fontyp.shapetable

  1. D:\python\lnypcg\new>rename normproto fontyp.normproto
  2.  
  3. D:\python\lnypcg\new>rename inttemp fontyp.inttemp
  4.  
  5. D:\python\lnypcg\new>rename pffmtable fontyp.pffmtable
  6.  
  7. D:\python\lnypcg\new>rename unicharset fontyp.unicharset
  8.  
  9. D:\python\lnypcg\new>rename shapetable fontyp.shapetable

12)、合并训练文件

执行命令,生成fontyp.traineddata文件。

combine_tessdata fontyp.

注意:

a、fontyp.traineddata文件最终要拷贝tesseract安装目录的tessdata目录下,才能被tesseract找到。

b、命令行最后必须带一个点。

c、执行结果中,1,3,4,5,13这几行必须有数值,才代表命令执行成功。

  1. D:\python\lnypcg\new>combine_tessdata fontyp.
  2. Combining tessdata files
  3. TessdataManager combined tesseract data files.
  4. Offset for type 0 is -1
  5. Offset for type 1 is 140
  6. Offset for type 2 is -1
  7. Offset for type 3 is 852
  8. Offset for type 4 is 137760
  9. Offset for type 5 is 137850
  10. Offset for type 6 is -1
  11. Offset for type 7 is -1
  12. Offset for type 8 is -1
  13. Offset for type 9 is -1
  14. Offset for type 10 is -1
  15. Offset for type 11 is -1
  16. Offset for type 12 is -1
  17. Offset for type 13 is 139352
  18. Offset for type 14 is -1
  19. Offset for type 15 is -1
  20. Offset for type 16 is -1

13)测试使用

譬如前文的28.tif中8被误认为字母S,用新的字体看是否还出错。

  1. D:\python\lnypcg>tesseract 28.tif output -l eng -psm 7
  2. Tesseract Open Source OCR Engine v3.02 with Leptonica
  3.  
  4. D:\python\lnypcg>type output.txt
  5. S094
  6. #1调用默认的eng语言,8被识别成S
  7.  
  8. D:\python\lnypcg>tesseract 28.tif output -l fontyp -psm 7
  9. Error opening data file C:\Program Files (x86)\Tesseract-OCR\tessdata/fontyp.traineddata
  10. Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
  11. Failed loading language 'fontyp'
  12. Tesseract couldn't load any languages!
  13. Could not initialize tesseract.
  14. #2条用新的fontyp语言,tesseract找不到fontyp语言。
  15.  
  16. D:\python\lnypcg>copy .\new\fontyp.traineddata "C:\Program Files (x86)\Tesseract-OCR\tessdata"
  17. 已复制 1 个文件。
  18. #3复制fontyp.traineddata到tesseract的安装目录的tessdata子目录下
  1. D:\python\lnypcg>tesseract 28.tif output -l fontyp -psm 7
  2. Tesseract Open Source OCR Engine v3.02 with Leptonica
  3.  
  4. D:\python\lnypcg>type output.txt
  5. 8094
    #使用fontyp语言成功识别8094

4、总结:

Anyway,jtessboxeditor 工具其实是一个基本成型的三方样本训练工具,它的功能就是自动执行上述脚本命令,但是在实际使用中,还存在不够完善的地方,譬如不能加psm参数,生成shape时经常程序异常崩溃,所以本文操作还是以命令行为主。

tesseract是一个非常强大的ocr引擎,尤其是做了针对性训练之后,验证码识别率几乎可以达到95%以上,再在程序中增加一些判断机制,基本上可以满足爬虫自动登陆需求了,回头写一个某东的自动识别验证码的爬虫程序。

把前文提的简化一下,综合成如下步骤列表:

  1. 1、合并图片
  2. 2、生成box文件
  3. tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 batch.nochop makebox
  4. 3、修改box文件
  5. 4、生成font_properties
  6. echo fontyp 0 0 0 0 0 >font_properties
  7. 5、生成训练文件
  8. tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 nobatch box.train
  9. 6、生成字符集文件
  10. unicharset_extractor langyp.fontyp.exp0.box
  11. 7、生成shape文件
  12. shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
  13. 8、生成聚集字符特征文件
  14. mftraining -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
  15. 9、生成字符正常化特征文件
  16. cntraining langyp.fontyp.exp0.tr
  17. 10、更名
  18. rename normproto fontyp.normproto
  19. rename inttemp fontyp.inttemp
  20. rename pffmtable fontyp.pffmtable
  21. rename unicharset fontyp.unicharset
  22. rename shapetable fontyp.shapetable
  23. 11、合并训练文件,生成fontyp.traineddata
  24. combine_tessdata fontyp.

以上!

jTessBoxEditor工具进行Tesseract3.02.02样本训练的更多相关文章

  1. 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率

    1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语 ...

  2. 利用jTessBoxEditor工具进行Tesseract-OCR样本训练

    jTessBoxEditor依赖java虚拟机 , 所以要先安装 java. jTessBoxEditor下载地址: https://sourceforge.net/projects/vietocr/ ...

  3. Tesseract-OCR 字符识别---样本训练 [转]

    Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文).  ...

  4. Tesseract-OCR 字符识别---样本训练

    Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文).  ...

  5. 转 Tesseract-OCR 字符识别---样本训练

    转自:http://blog.csdn.net/feihu521a/article/details/8433077 Tesseract是一个开源的OCR(Optical Character Recog ...

  6. Python3.x:pytesseract识别率提高(样本训练)

    Python3.x:pytesseract识别率提高(样本训练) 1,下载并安装3.05版本的tesseract 地址:https://sourceforge.net/projects/tessera ...

  7. 02.02.03第3章 餐饮项目案例(Power BI商业智能分析)

    02.02.03第3章 餐饮项目案例 02.02.03.01餐饮数据理解与读入 00:06:12 02.02.03.02餐饮数据处理 00:29:57 处理生成的表为: 02.02.03.03餐饮数据 ...

  8. 02.02.02 第2章 制作power bi图表(Power BI商业智能分析)

    ---恢复内容开始--- 02.02.02第2章 制作power bi图表 02.02.02.01 power pivot数据导入 00:08:43 02.02.02.02建立数据透视表 00:11: ...

  9. 02.02.01 第1章 简介及基础操作(Power BI商业智能分析)

    02.02.01.01 powerbi简介 00:10:59 02.02.01.02 query数据导入 00:03:26 具体操作实例如下: 02.02.01.03导入access数据 00:05: ...

随机推荐

  1. CORS跨域资源共享简述

    什么是CORS? 默认情况下,为预防某些而已行为,浏览器的XHR对象只能访问来源于同一个域中的资源.但是我们在日常实际开发中,常常会遇到跨域请求的需求,因此就出现了一种跨域请求的方案:CORS(Cro ...

  2. 【设计模式】—— 职责链模式ChainOfResponsibility

    前言:[模式总览]——————————by xingoo 模式意图 避免请求的发送者,和接受者过度的耦合在一起.一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心.而请 ...

  3. Single VIP LLB and SLB config

    Single VIP LLB and SLB config >>>>>>>>>>>>>>>>>&g ...

  4. 32个Python爬虫实战项目,满足你的项目慌

    爬虫项目名称及简介 一些项目名称涉及企业名词,小编用拼写代替 1.[WechatSogou]- weixin公众号爬虫.基于weixin公众号爬虫接口,可以扩展成其他搜索引擎的爬虫,返回结果是列表,每 ...

  5. 【BZOJ5281】Talent Show(分数规划)

    [BZOJ5281]Talent Show(分数规划) 题面 BZOJ 洛谷 题解 二分答案直接就是裸的分数规划,直接跑背包判断是否可行即可. #include<iostream> #in ...

  6. BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数

    BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数 题面 找出第k个不是平方数的倍数的数(1不是平方数, \(k \le 10^9\)). 题解 首先二分答案,问题就转化成了求\([ ...

  7. go gcc

    http://www.cnblogs.com/zkweb/p/7880099.html

  8. apigateway-kong(三)Proxy规则

    本篇详细记录了Kong的代理功能及其路由功能和内部工作. Kong公开了几个可以通过两个配置属性进行调整的接口:proxy_listen,默认8000,它定义Kong将接受来自客户端的公共流量并将其代 ...

  9. easyui form 提交问题,纠结了很久,有点诡异

    http://www.iteye.com/problems/131602 form 提交,后台运行有时慢,页面就不等后台数据的响应,直接alert("服务器维护中,请稍后再试!") ...

  10. 51nod 1258 序列求和 V4

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4  基准时间限制:8 秒 空间限制:131 ...