0.介绍
Tesseract是一个开源的OCR引擎,能识别100多种语言(中,英,韩,日,德,法...等等),但是Tesseract对手写的识别能力较差。
1.安装
//安装tesseract的同时安装训练工具 brew install --with-training-tools tesseract //安装tesseract的同时安装所有语言,语言包比较大,如果安装的话时间较长,建议不安装,按需选择 brew install --all-languages tesseract //安装tesseract,并安装训练工具和语言 brew install --all-languages --with-training-tools tesseract //只安装tesseract,不安装训练工具 brew install tesseract
参考文档:http://khalsa.guru/posts/16
2.下载语言库
下载地址:https://github.com/tesseract-ocr/tessdata
根据自己的需求选择所要的语言库,在这里我们选择的是简体中文所以选择的库是:
chi_sim.traineddata
将文件拷贝到到:/usr/local/Cellar/tesseract/3.04.01_2/share/tessdata目录下。库名-语言表如下
库名 语言 afr Afrikaans(南非荷兰语) amh Amharic(阿姆哈拉语) ara Arabic(阿拉伯语) asm Assamese(阿萨姆) aze Azerbaijani(阿塞拜疆) aze_cyrl Azerbaijani - Cyrilic(阿塞拜疆-Cyrilic) bel Belarusian(白俄罗斯) ben Bengali(孟加拉) bod Tibetan(西藏) bos Bosnian(波斯尼亚) bul Bulgarian(保加利亚语) cat Catalan; Valencian(加泰罗尼亚语; 巴伦西亚) ceb Cebuano(宿务) ces Czech(捷克) chi_sim Chinese - Simplified(中国-简体) chi_tra Chinese - Traditional(中国-繁体) chr Cherokee(切诺基) cym Welsh(威尔士) dan Danish(丹麦) dan_frak Danish - Fraktur(丹麦-Fraktur) deu German(德国) deu_frak German - Fraktur(德国-Fraktur) dzo Dzongkha(不丹文) ell Greek, Modern (1453-)(希腊,现代(1453-)) eng English(英语) enm English, Middle (1100-1500)(英语,中东(1100-1500)) epo Esperanto(世界语) equ Math / equation detection module(数学/方程式检测模块) est Estonian(爱沙尼亚) eus Basque(巴斯克) fas Persian(波斯) fin Finnish(芬兰) fra French(法语) frk Frankish(法兰克) frm French, Middle (ca.1400-1600)(法国,中东(ca.1400-1600)) gle Irish(爱尔兰) glg Galician(加利西亚) grc Greek, Ancient (to 1453)(希腊语,古(到1453年)) guj Gujarati(古吉拉特语) hat Haitian; Haitian Creole(海天; 海地克里奥尔语) heb Hebrew(希伯来语) hin Hindi(印地文) hrv Croatian(克罗地亚) hun Hungarian(匈牙利) iku Inuktitut(因纽特语) ind Indonesian(印尼) isl Icelandic(冰岛) ita Italian(意大利语) ita_old Italian - Old(意大利语-旧) jav Javanese(爪哇) jpn Japanese(日本) kan Kannada(卡纳达语) kat Georgian(格鲁吉亚) kat_old Georgian - Old(格鲁吉亚-旧) kaz Kazakh(哈萨克斯坦) khm Central Khmer(中央高棉) kir Kirghiz; Kyrgyz(柯尔克孜; 吉尔吉斯) kor Korean(韩国) kur Kurdish(库尔德人) lao Lao(老挝) lat Latin(拉丁) lav Latvian(拉脱维亚) lit Lithuanian(立陶宛) mal Malayalam(马拉雅拉姆语) mar Marathi(马拉) mkd Macedonian(马其顿) mlt Maltese(马耳他) msa Malay(马来文) mya Burmese(缅甸) nep Nepali(尼泊尔) nld Dutch; Flemish(荷兰; 佛兰芒语) nor Norwegian(挪威) ori Oriya(奥里亚语) osd Orientation and script detection module(定位及脚本检测模块) pan Panjabi; Punjabi(旁遮普语; 旁遮普语) pol Polish(波兰) por Portuguese(葡萄牙语) pus Pushto; Pashto(普什图语; 普什图语) ron Romanian; Moldavian; Moldovan(罗马尼亚; 摩尔多瓦; 摩尔多瓦) rus Russian(俄罗斯) san Sanskrit(梵文) sin Sinhala; Sinhalese(僧伽罗语; 僧伽罗语) slk Slovak(斯洛伐克) slk_frak Slovak - Fraktur(斯洛伐克- Fraktur) slv Slovenian(斯洛文尼亚) spa Spanish; Castilian(西班牙语; 卡斯蒂利亚) spa_old Spanish; Castilian - Old(西班牙语; 卡斯蒂利亚-老) sqi Albanian(阿尔巴尼亚) srp Serbian(塞尔维亚) srp_latn Serbian - Latin(塞尔维亚语-拉丁语) swa Swahili(斯瓦希里语) swe Swedish(瑞典) syr Syriac(叙利亚) tam Tamil(泰米尔) tel Telugu(泰卢固语) tgk Tajik(塔吉克斯坦) tgl Tagalog(菲律宾语) tha Thai(泰国) tir Tigrinya(提格雷语) tur Turkish(土耳其) uig Uighur; Uyghur(维吾尔族; 维吾尔) ukr Ukrainian(乌克兰) urd Urdu(乌尔都语) uzb Uzbek(乌兹别克斯坦) uzb_cyrl Uzbek - Cyrilic(乌兹别克斯坦- Cyrilic) vie Vietnamese(越南语) yid Yiddish(意第绪语) 3.Tesseract使用
终端输入命令:
tesseract --help
Usage: tesseract --help | --help-psm | --version tesseract --list-langs [--tessdata-dir PATH] tesseract --print-parameters [options...] [configfile...] tesseract imagename|stdin outputbase|stdout [options...] [configfile...] OCR options: --tessdata-dir PATH Specify the location of tessdata path. --user-words PATH Specify the location of user words file. --user-patterns PATH Specify the location of user patterns file. -l LANG[+LANG] Specify language(s) used for OCR. -c VAR=VALUE Set value for config variables. Multiple -c arguments are allowed. -psm NUM Specify page segmentation mode. NOTE: These options must occur before any configfile. 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. Single options: -h, --help Show this help message. --help-psm Show page segmentation modes. -v, --version Show version information. --list-langs List available languages for tesseract engine. --print-parameters Print tesseract parameters to stdout.
一般使用:
//默认使用eng文字库, imgName是图片的地址,result识别结果 tesseract imgName result
指定语言:
//指定使用简体中文 tesseract -l chi_sim imgName result //查看本地存在的语言库 tesseract --list-langs
指定多语言:
//指定多语言,用+号相连 tesseract -l chi_sim+eng imgName result
有个地方需要特别注意,参数psm
//输入命令,查看psm的参数 tesseract --help-psm 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. 翻译(可能不是很准,最好看原文): 0 定向脚本监测(OSD) 1 使用OSD自动分页 2 自动分页,但是不使用OSD或OCR(Optical Character Recognition,光学字符识别) 3 全自动分页,但是没有使用OSD(默认) 4 假设可变大小的一个文本列。 5 假设垂直对齐文本的单个统一块。 6 假设一个统一的文本块。 7 将图像视为单个文本行。 8 将图像视为单个词。 9 将图像视为圆中的单个词。 10 将图像视为单个字符。
根据情况选择不同的psm值,这很重要,如果选择到不恰当的值会导致识别失败。
例如:
使用命令:
//不设置psm值的命令 tesseract 1234.png 1234 -l chi_sim 打印: Tesseract Open Source OCR Engine v3.04.01 with Leptonica Info in fopenReadFromMemory: work-around: writing to a temp file Empty page!! Empty page!! //不设置psm值的命令 tesseract 1234.png 1234 -l chi_sim -psm 6 成功识别: 一二三四 一二三四
4.语言训练
提前准备:
1.training tools。(在安装tesseract时候运行brew install --with-training-tools tesseract
这句命令会同时安装training tools)
2.jTessBoxEditor工具。
3.训练素材在这里准备的素材如下:
执行命令:
tesseract hui.png hui -l chi_sim -psm 10 识别结果:瞧 tesseract yi.png yi -l chi_sim -psm 10 识别结果:=
显然自带chi_sim库对隳易这两个字的识别不是很好。为了识别这两个字,我们要对这两个字进行训练。
1.素材合成,(多个素材合成)
打开jTessBoxEditor工具,菜单栏:tools->Merge TIFF...
,选中要合成的图片并保存为为:huiyi.fitt
。2.生成box文件
//命令 tesseract huiyi.tif huiyi -l chi_sim -psm 10 batch.nochop makebox
执行后会在生成一个名为
huiyi.box
的box文件。用文本编辑器或者xcode打开:
瞧 31 37 112 119 0 = 51 86 93 106 1
修改为:
隳 31 37 112 119 0 易 51 86 93 106 1
保存文件。
3.生成.tr文件
//命令 tesseract huiyi.tif huiyi -psm 10 nobatch box.train
4.生成unicharset文件
//命令 unicharset_extractor huiyi.box
注意
unicharset_extractor
命令是training tools里面的集成命令,如果运行时说没有找到该命令则说明你没有安装training tools。5.创建font_properties文件
字体特征文件,Tesseract-OCR 3.01 及以上版本在训练之前都要创建font_properties文件。文件格式内容格式如下:fontname italic bold fixed serif fraktur //翻译 字体名字 倾斜 加粗 固定宽度 衬线体 哥特字体
除了字体之外其他的值都是bool值,0或1
在这里
font_properties
的内容是:font 0 0 0 0 0
执行命令:
echo 'font 0 0 0 0 0' > font_properties
5.training
执行命令:
shapeclustering -F font_properties -U unicharset huiyi.tr
会生成:
shapetable
文件,重命名为huiyi.shapetable
执行命令:
mftraining -F font_properties -U unicharset -O huiyi.unicharset huiyi.tr
会生成:
huiyi.unicharset
、inttemp
,pffmtable
文件,将inttemp
,pffmtable
重命名为:huiyi.inttemp
,huiyi.pffmtable
执行命令:
cntraining huiyi.tr
会生成:
normproto
文件,重命名为huiyi.normproto
6.得到traineddata文件
执行命令:
combine_tessdata huiyi. //打印 Combining tessdata files TessdataManager combined tesseract data files. Offset for type 0 (huiyi.config ) is -1 Offset for type 1 (huiyi.unicharset ) is 140 Offset for type 2 (huiyi.unicharambigs ) is -1 Offset for type 3 (huiyi.inttemp ) is 406 Offset for type 4 (huiyi.pffmtable ) is 118222 Offset for type 5 (huiyi.normproto ) is 118282 Offset for type 6 (huiyi.punc-dawg ) is -1 Offset for type 7 (huiyi.word-dawg ) is -1 Offset for type 8 (huiyi.number-dawg ) is -1 Offset for type 9 (huiyi.freq-dawg ) is -1 Offset for type 10 (huiyi.fixed-length-dawgs ) is -1 Offset for type 11 (huiyi.cube-unicharset ) is -1 Offset for type 12 (huiyi.cube-word-dawg ) is -1 Offset for type 13 (huiyi.shapetable ) is 118708 Offset for type 14 (huiyi.bigram-dawg ) is -1 Offset for type 15 (huiyi.unambig-dawg ) is -1 Offset for type 16 (huiyi.params-model ) is -1 Output huiyi.traineddata created successfully.
将huiyi.traineddata移动到
/usr/local/Cellar/tesseract/3.04.01_2/share/tessdata/
目录下执行命令:
cp huiyi.traineddata /usr/local/Cellar/tesseract/3.04.01_2/share/tessdata/
7.验证
执行命令:tesseract hui.png hui -l huiyi -psm 10 识别结果:瞧 tesseract yi.png yi -l huiyi -psm 10 识别结果:易
成功识别。
结语:好久没写了,这篇是之前就写好的,一直没发,刚过完年诸事繁忙,一直没时间写。在新的一年祝各位同仁前程似景。最近看下有没有时间将Tesseract迁移到iOS上,之前试过效果并不好,主要是识别速度偏慢,而且还没有一个很好的灰度算法用来处理图片。
作者:隳易
链接:http://www.jianshu.com/p/016e55c25521
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
mac上文字识别(Tesseract-OCR for mac )
最新推荐文章于 2024-04-19 14:13:29 发布