#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 “完成”
`

Tesseract OCR使用介绍的更多相关文章

  1. Python下Tesseract Ocr引擎及安装介绍

    1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/tesseract,目前最新的源码 ...

  2. Tesseract——OCR图像识别 入门篇

    Tesseract——OCR图像识别 入门篇 最近给了我一个任务,让我研究图像识别,从我们项目的screenshot中识别文字信息,so我开始了学习,与大家分享下. 我看到目前OCR技术有很多,最主要 ...

  3. Tesseract Ocr引擎

    Tesseract Ocr引擎 1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/t ...

  4. tesseract ocr文字识别Android实例程序和训练工具全部源代码

    tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...

  5. 开源图片文字识别引擎——Tesseract OCR

    Tessseract为一款开源.免费的OCR引擎,能够支持中文十分难得.虽然其识别效果不是很理想,但是对于要求不高的中小型项目来说,已经足够用了. 文字识别可应用于许多领域,如阅读.翻译.文献资料的检 ...

  6. Tesseract OCR简单实用介绍

    做字符识别,不能不了解google的Tesseract-OCR,但是如何在自己的工程中使用其API倒是语焉不详,官网上倒是很详尽地也很啰嗦地介绍如何重新编译生成适合自己平台的lib和dll,经过近些天 ...

  7. selenium使用笔记(二)——Tesseract OCR

    在自动化测试过程中我们经常会遇到需要输入验证码的情况,而现在一般以图片验证码居多.通常我们处理这种情况应该用最简单的方式,让开发给个万能验证码或者直接将验证码这个环节跳过.之前在技术交流群里也跟朋友讨 ...

  8. Tesseract–OCR 库原理探索

    一,简介: Tesseract is probably the most accurate open source OCR engine available. Combined with the Le ...

  9. alfresco install in linux, and integrated with tesseract ocr

    本文描述在Linux系统上安装Alfresco的步骤: 1. 下载安装文件:alfresco-community-5.0.d-installer-linux-x64.bin 2. 增加执行权限并执行: ...

随机推荐

  1. 估计量|估计值|矩估计|最大似然估计|无偏性|无偏化|有效性|置信区间|枢轴量|似然函数|伯努利大数定理|t分布|单侧置信区间|抽样函数|

    第二章 置信区间估计 估计量和估计值的写法? 估计值希腊字母上边有一个hat 点估计中矩估计的原理? 用样本矩来估计总体矩,用样本矩的连续函数来估计总体矩的连续函数,这种估计法称为矩估计法.Eg:如果 ...

  2. python如何在一个for循环中遍历多个列表

    推荐使用python内置函数zip,它可以将x个y维列表变成一个zip对象,将zip对象拆包可以发现它变成了y个x维元组.我们还可以将这个对象变成一个元组或列表.如下所示: 如果是两个列表的zip,我 ...

  3. jedis异常Broken pipe (Write failed)

    异常:java.net.SocketException: Broken pipe (Write failed); nested exception is redis.clients.jedis.exc ...

  4. mysql之DTS的那些事

    最近才考虑数据库迁移,想起了之前做DTS踩过的那些坑. 基于数据库迁移,比如从源A库迁移到源B库,包括但不限于数据库上云. 数据库迁移方案有两种场景: (1).停机迁移方案 这种方案是允许停服的场景, ...

  5. Spring Boot从入门到放弃-Spring Boot 整合测试

    站长资讯摘要:使用Spring Boot 整合测试,对Controller 中某个方法进行测试或者对Service,Mapper等进行测试,不需要运行项目即可查看运行结果是否和期望值相同,Spring ...

  6. VS IDE调试下将打印日志输出到输出窗口

    int aBeginTime = GetTickCount(); TRACE("Current time begin:%d \n", aBeginTime); 查看输出窗口:

  7. Pipe Fitter and the Fierce Dogs

    Pipe Fitter and the Fierce Dogs [JAG Asia 2016] 理解题意之后,就是一个非常傻的DP 然后难在理解题意,理解非法状态 #include <bits/ ...

  8. 项目课 day01

    ## 电商 ### 定义 指在互联网(Internet).内部网(Intranet)和增值网(VAN,Value Added Network)上以电子交易方式进行交易活动和相关服务活动 ### 电商的 ...

  9. springboot集成websocket实现大文件分块上传

    遇到一个上传文件的问题,老大说使用http太慢了,因为http包含大量的请求头,刚好项目本身又集成了websocket,想着就用websocket来做文件上传. 相关技术 springboot web ...

  10. Select(快速选择顺序统计量)原理及C++代码实现

    SELECT算法利用快排中的partition思想来进行无序数组的快速选择. 寻找第i个顺序统计量可以简单理解为寻找第i小的元素. 该算法通过为partition选择一个好的主元,来保证Partiti ...