特殊字符语言包训练流程

本篇文章是旧版本的训练教程,适应于新版本的训练流程请查看://www.greatytc.com/p/7a2c40dd6560

题库特殊字符语言包训练流程

题库中会出现很多Tesseract无法识别的特殊字符,例如:≤ ≥ ×等等。本教程旨在训练新的语言包改善这些特殊字符的识别效果。训练思路为,利用Tesseract认识的字符替代这些特殊字符(与特殊字符外形相近,比如,‘,’替代‘,’,或者题库中没有的字符替换原有字符)。

准备训练依赖项

git clone https://github.com/tesseract-ocr/tesseract.git
git clone https://github.com/tesseract-ocr/langdata.git
git clone https://github.com/tesseract-ocr/tessdata.git
cp ./tessdata/eng.traineddata ./tesseract/tessdata
cp ./tessdata/chi_sim.traineddata ./tesseract/tessdata

下载tesseract包后需要本地安装,可看前面发布的安装教程:Tess4.0 windows编译与使用tesseract linux 安装与编译

添加新的字体

打开./training/language-specific.sh文件,在CHI_SIM_FONTS栏目下添加Times New Roman字体内容,添加后内容如下:

CHI_SIM_FONTS=( \
    "AR PL UKai CN" \
    "AR PL UMing Patched Light"
    "AR PL UKai TW" \
    "AR PL UMing TW MBE Light" \
    "AR PL UKai Patched" \
    "Arial Unicode MS" \
    "Arial Unicode MS Bold" \
    "WenQuanYi Zen Hei Medium" \
    "Times New Roman, Bold" \
    "Times New Roman, Bold Italic" \
    "Times New Roman, Italic" \
    "Times New Roman," \
    )

外形相近的字符替换

应用Times New Roman字体中现有的字符替换外形相近的字符,见以下是替换代码:

text_line.replace('(','(').replace(')',')').replace('﹣','-').replace('.','.')\
         .replace(':', ':')

替换其他特殊字符

训练流程

第一步

将文件training/tesstrain.sh复制备份training/tesstrain0.sh,并在tesstrain0.sh中将54行以下的内容添加注释,注释后的代码为:

source "$(dirname $0)/tesstrain_utils.sh"

ARGV=("$@")
parse_flags
echo $WORKSPACE_DIR

mkdir -p ${TRAINING_DIR}
# tlog "\n=== Starting training for language '${LANG_CODE}'"
#
# source "$(dirname $0)/language-specific.sh"
# set_lang_specific_parameters ${LANG_CODE}
#
# initialize_fontconfig
#
# phase_I_generate_image 8
# phase_UP_generate_unicharset
# phase_D_generate_dawg
# if ((LINEDATA)); then
#   phase_E_extract_features "lstm.train" 8 "lstmf"
#   make__lstmdata
# else
#   phase_E_extract_features "box.train" 8 "tr"
#   phase_C_cluster_prototypes "${TRAINING_DIR}/${LANG_CODE}.normproto"
#   if [[ "${ENABLE_SHAPE_CLUSTERING}" == "y" ]]; then
#       phase_S_cluster_shapes
#   fi
#   phase_M_cluster_microfeatures
#   phase_B_generate_ambiguities
#   make__traineddata
# fi
#
# tlog "\nCompleted training for language '${LANG_CODE}'\n"

执行以下命令:

training/tesstrain0.sh --fonts_dir /usr/share/fonts \
--training_text ../training_data/input_data0.txt \
--langdata_dir ../langdata --tessdata_dir ./tessdata \
--lang chi_sim --linedata_only --noextract_font_properties \
--exposures "0" --fontlist "SIMSUN" \
--output_dir ~/tesstutorial/chitest

第二步

按照以下步骤对shell文件进行修改:

  1. 查看系统/tmp目录下的文件夹,找到格式为'tmp.*'的文件夹,并将此文件夹名进行复制。
  2. 将文件training/tesstrain_utils.sh复制备份training/tesstrain_utils0.sh,并将tesstrain_utils0.sh中的WORKSPACE_DIR变量名赋值为'tmp.*'(/tmp目录下相应的文件夹名称)
  3. 将training/tesstrain0.sh文件中source "$(dirname $0)/tesstrain_utils.sh"语句改成source "$(dirname $0)/tesstrain_utils0.sh"
  4. 将training/tesstrain0.sh文件的注释内容进行更改,更改后的内容如下:
source "$(dirname $0)/tesstrain_utils0.sh"

ARGV=("$@")
parse_flags
echo $WORKSPACE_DIR

mkdir -p ${TRAINING_DIR}
tlog "\n=== Starting training for language '${LANG_CODE}'"

source "$(dirname $0)/language-specific.sh"
set_lang_specific_parameters ${LANG_CODE}

initialize_fontconfig

phase_I_generate_image 8
# phase_UP_generate_unicharset
# phase_D_generate_dawg
# if ((LINEDATA)); then
#   phase_E_extract_features "lstm.train" 8 "lstmf"
#   make__lstmdata
# else
#   phase_E_extract_features "box.train" 8 "tr"
#   phase_C_cluster_prototypes "${TRAINING_DIR}/${LANG_CODE}.normproto"
#   if [[ "${ENABLE_SHAPE_CLUSTERING}" == "y" ]]; then
#       phase_S_cluster_shapes
#   fi
#   phase_M_cluster_microfeatures
#   phase_B_generate_ambiguities
#   make__traineddata
# fi
#
# tlog "\nCompleted training for language '${LANG_CODE}'\n"

执行以下命令:

training/tesstrain0.sh --fonts_dir /usr/share/fonts \
--training_text ../training_data/input_data0.txt \
--langdata_dir ../langdata --tessdata_dir ./tessdata \
--lang chi_sim --linedata_only --noextract_font_properties \
--exposures "0" --fontlist "SIMSUN" \
--output_dir ~/tesstutorial/chitest

第三步

在系统桌面进入"/tmp/tmp.J8JYbdYYrv/chi_sim"目录,修改后缀名为.box文件,将此文件中的特殊字符修改为想要替换的其他字符,注意:每个字符的替换需要保持一致哦。

例如:本文例将所有的'≤'符号替换成"小"。

第四步

修改training/tesstrain0.sh文件中的注释内容,修改后如下:

source "$(dirname $0)/tesstrain_utils0.sh"

ARGV=("$@")
parse_flags

# mkdir -p ${TRAINING_DIR}
# tlog "\n=== Starting training for language '${LANG_CODE}'"
#
# source "$(dirname $0)/language-specific.sh"
# set_lang_specific_parameters ${LANG_CODE}
#
# initialize_fontconfig
#
# phase_I_generate_image 8
echo $TRAINING_DIR
phase_UP_generate_unicharset
phase_D_generate_dawg
if ((LINEDATA)); then
  phase_E_extract_features "lstm.train" 8 "lstmf"
  make__lstmdata
else
  phase_E_extract_features "box.train" 8 "tr"
  phase_C_cluster_prototypes "${TRAINING_DIR}/${LANG_CODE}.normproto"
  if [[ "${ENABLE_SHAPE_CLUSTERING}" == "y" ]]; then
      phase_S_cluster_shapes
  fi
  phase_M_cluster_microfeatures
  phase_B_generate_ambiguities
  make__traineddata
fi

tlog "\nCompleted training for language '${LANG_CODE}'\n"

执行以下命令:

training/tesstrain0.sh --fonts_dir /usr/share/fonts \
--training_text ../training_data/input_data0.txt \
--langdata_dir ../langdata --tessdata_dir ./tessdata \
--lang chi_sim --linedata_only --noextract_font_properties \
--exposures "0" --fontlist "SIMSUN" \
--output_dir ~/tesstutorial/chitest

第五步

按步骤执行以下命令:

  1. mkdir -p ~/tesstutorial/chituned_from_chisim
  2. combine_tessdata -e ../tessdata/chi_sim.traineddata ~/tesstutorial/chituned_from_chisim/chi_sim.lstm
  3. lstmtraining --model_output ~/tesstutorial/chituned_from_chisim/chituned --continue_from ~/tesstutorial/chituned_from_chisim/chi_sim.lstm --train_listfile ~/tesstutorial/chitest/chi_sim.training_files.txt --eval_listfile ~/tesstutorial/chitest/chi_sim.training_files.txt --target_error_rate 0.01
  4. lstmtraining --model_output ~/tesstutorial/chituned_from_chisim/chituned.lstm
    --continue_from ~/tesstutorial/chituned_from_chisim/chituned_checkpoint
    --stop_training
  5. combine_tessdata -o ./tessdata/chi_sim.traineddata
    ~/tesstutorial/chituned_from_chisim/chituned.lstm
    ~/tesstutorial/chitest/chi_sim.lstm-number-dawg
    ~/tesstutorial/chitest/chi_sim.lstm-punc-dawg
    ~/tesstutorial/chitest/chi_sim.lstm-word-dawg

新生成的traineddata在tesseract/tessdata目录下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 题库特殊字符语言包训练流程(新) 上篇文章介绍了一些特殊字符语言包的训练流程,然而没过几天,github上的tes...
    RobertY阅读 6,953评论 11 6
  • Tesseract中英文正体斜体混合训练 当我们识别数据中包含中文正体,英文斜体字符时,Tess4.0识别英文斜体...
    RobertY阅读 4,794评论 1 8
  • 注:目前仅说明windows下的情况 前言 网上已经有大量的tesseract的识别教程,但是主要有两个缺点: 大...
    aliyu阅读 39,156评论 30 30
  • 故事的开始: 某年的一个暑期,初恋在学校找了个兼职,内容是把图书馆中旧一点的书籍打字录到电脑。她高兴的和我说...
    graphic_zhang阅读 1,312评论 0 0
  • 结束了紧张的验收和备案工作后,今天可以放松的休息不用加班了。已经很久很久没有这样加过班啦,一天接一天,连续一个多月...
    流浪的喵记阅读 158评论 0 2