#Tesseract OCR使用介绍

##目录
[TOC]

##下载地址及介绍

##安装 Tesseract

1
2
3
4
5
6
7
8
9
10
11
1、安装 tesseract和语言包
sudo port install tesseract
sudo port install tesseract-<langcode> 2、homebrew 安装
brew install tesseract
brew install --with-training-tools tesseract 3、重新安装
brew uninstall tesseract
brew install --with-training-tools tesseract
  • Homebrew 是一个包管理器,如果没装的话,在终端执行
1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

##使用 Tesseract

  • 使用命令行进行图像识别
  • imagename 就是要识别的图片文件的名称,outputbase 就是识别结果输出文件的名称。
  • lang 就是要识别的语言代码,例如英语为 eng、简体中文为 chi_sim 等等。可以同时识别多种语言,使用 “+” 相连,例如 eng+chi_sim。缺省时识别英语。

1、格式信息如下

1
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]

2、示例: 识别image图片并将结果保存在out.txt文件中

1
2
tesseract image.png out -l chi_sim
tesseract image.png out -l chi_sim -psm 10

3、pagesegmode 为识别的具体模式,具体包含以下模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
•	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, bypassing hacks that are Tesseract-specific.

##训练样本

1
2
3
4
5
6
> 1、收集文本信息的图片
> 2、制作的图片转为tiff格式
> 3、jTessBoxEditor进行tiff格式图片合成 <Tool->Merge TIFF> 合成后的图片取名规范 [lang].[fontn 大专栏  Tesseract OCR使用介绍ame].exp[num].tif
[lang]是语言,[fontname]是字体,[num]是标号

###1、Make Box Files

  • 使用 Tesseract 识别,生成 box 文件:
  • 确保 tif 和 box 文件同名且位于同一目录下,用 jTessBoxEditor 打开 tif 文件),或者直接用文本编辑器编辑。
1
tesseract hz.font.exp0.tif hz.font.exp0 -l chi_sim -psm 10 batch.nochop makebox

###2、Run Tesseract for Training

  • 使用修改正确后的 box 文件,对 Tesseract 进行训练,生成 .tr 文件:
1
tesseract hz.font.exp0.tif hz.font.exp0 -psm 10 nobatch box.train

###3、Compute the Character Set

  • 生成字符集的文本
1
2
3
4
unicharset_extractor hz.font.exp0.box hz.font.exp1.box

After 3.03
training/set_unicharset_properties -U input_unicharset -O output_unicharset --script_dir=training/langdata

正确的格式应该如下:

1
2
3
4
5
6
7
8
110
NULL 0 NULL 0
N 5 59,68,216,255,87,236,0,27,104,227 Latin 11 0 1 N
Y 5 59,68,216,255,91,205,0,47,91,223 Latin 33 0 2 Y
1 8 59,69,203,255,45,128,0,66,74,173 Common 3 2 3 1
9 8 18,66,203,255,89,156,0,39,104,173 Common 4 2 4 9
a 3 58,65,186,198,85,164,0,26,97,185 Latin 56 0 5 a
...

###4、font_properties (new in 3.01)

  • 定义字体特征文件,Tesseract-OCR 3.01 以上的版本在训练之前需要创建一个名称为 font_properties 的字体特征文件。font_properties 不含有 BOM 头,文件内容格式如下:
1
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
  • 其中 fontname 为字体名称,必须与 [lang].[fontname].exp[num].box 中的名称保持一致。 、 、 、、 的取值为 1 或 0,表示字体是否具有这些属性。
  • 这里就是普通字体,不倾斜不加粗,所以新建一个名为 font_properties 的文件,内容为: font 0 0 0 0 0

###5、Clustering

  • 修改 Clustering 过程生成的 4 个文件(inttemp、pffmtable、normproto、shapetable)
1
2
3
4
5
6
7
8
9
10
11
12
shapeclustering -F font_properties -U unicharset hz.font.exp0.tr hz.font.exp1.tr ...

mftraining -F font_properties -U unicharset -O hz.unicharset hz.font.exp0.tr hz.font.exp1.tr ...

cntraining hz.font.exp0.tr hz.font.exp1.tr ...
``` * 生成后的文件需要添加前缀, 如这里改为 hz.inttemp、hz.pffmtable、hz.normproto、hz.shapetable。 ###6、Putting it all together * 生成最后的训练文件

combine_tessdata hz.

1
2
3
4
###7、use example

* 使用训练的文件进行识别

tesseract test.png out -l hz

1
2
##脚本运行

#!/bin/sh
read -p “输入你语言:” lang
echo ${lang}
read -p “输入你的字体:” font
echo ${font}
echo “完整文件名为:”
echo ${lang}.${font}.exp0.tif
echo “开始。。。”
echo ${font} 0 0 0 0 0 >font_properties

#tesseract ${lang}.${font}.exp0.tif $(lang).$(font).exp0 -l chi_sim -psm 10 batch.nochop makebox

#read -p “继续生产tr文件?”
tesseract ${lang}.${font}.exp0.tif ${lang}.${font}.exp0 -psm 10 nobatch box.train
unicharset_extractor ${lang}.${font}.exp0.box
shapeclustering -F font_properties -U unicharset ${lang}.${font}.exp0.tr
mftraining -F font_properties -U unicharset -O unicharset ${lang}.${font}.exp0.tr
cntraining ${lang}.${font}.exp0.tr
echo “开始重命名文件”
mv inttemp ${font}.inttemp
mv normproto ${font}.normproto
mv pffmtable ${font}.pffmtable
mv shapetable ${font}.shapetable
mv unicharset ${font}.unicharset
echo “生成最终文件”
combine_tessdata ${font}.
echo “完成”
`

最新文章

  1. [LeetCode] Longest Increasing Subsequence 最长递增子序列
  2. CMD安装/删除服务
  3. Matplotlib 学习笔记
  4. rewrite规则中参数多于9个的处理方式 apache nginx
  5. 树的Prufer 编码和最小生成树计数
  6. JavaWeb学习总结(一)—JavaWeb开发入门及环境搭建
  7. 未在本地计算机上注册&quot;Microsoft.Jet.OLEDB.4.0&quot;解决方案
  8. mysql oracle 删除外键约束
  9. iOS:将NSDate转换为当前时区时间
  10. [Swust OJ 1091]--土豪我们做朋友吧(并查集,最值维护)
  11. 微信小程序开发问题汇总
  12. Servlet CDI example analysis
  13. npm install 失败
  14. js强制不使用“兼容性视图”
  15. Django Web开发学习笔记(5)
  16. CSS3实现纸张边角卷起效果
  17. highchart 横轴纵轴数据
  18. Gradle 简介
  19. winform程序开机自动启动
  20. python开发_HTMLParser_html文档解析

热门文章

  1. PTA 自测-4 Have Fun with Numbers
  2. 整理平时常用git命令
  3. Django学习---多人博客项目(1)
  4. GCC编译和链接多个文件(包括源文件、目标文件、汇编文件等)
  5. typescript-学习使用ts-1
  6. maven打包springboot项目的插件配置概览
  7. 基于邻接表的长度为k的简单路径的求解
  8. CF1137C Museums Tour(tarjan+DP)
  9. fibonacci-Heap(斐波那契堆)原理及C++代码实现
  10. Canal监控Mysql同步到Redis(菜鸟也能搭建)