zoukankan      html  css  js  c++  java
  • Tesseract OCR使用介绍

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

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12041328.html
Copyright © 2011-2022 走看看