如何为 Tesseract 4.1.0 创建训练数据文件

Posted

技术标签:

【中文标题】如何为 Tesseract 4.1.0 创建训练数据文件【英文标题】:How to Create Traineddata file For Tesseract 4.1.0 【发布时间】:2019-07-28 22:00:36 【问题描述】:

我想识别 NumberPlate 的字符。 如何在 ubuntu 16.04 中为各个车牌训练 tesseract-ocr。 因为我不熟悉培训。请帮我创建一个用于识别车牌的“traineddata”文件。

我有 1000 张车牌图片。

请调查一下。 任何帮助将不胜感激。

所以我尝试了以下命令

tesseract [langname].[fontname].[expN].[file-extension] [langname].[fontname].[expN] batch.nochop makebox

tesseract eng.arial.plate3655.png eng.arial.plate3655 batch.nochop makebox

但它给出了错误。

Tesseract Open Source OCR Engine v4.1.0-rc1-56-g7fbd with Leptonica
Error, cannot read input file eng.arial.plate3655.png: No such file or directory
Error during processing.

后来我试过了

tesseract plate4.png eng.arial.plate4 batch.nochop makebox

它有效,但在某些盘子中。 现在在第 2 步。我遇到了错误。

附上截图。

用于训练的板 4 图像

Step 1 和 Step p2 显示在终端

第 1 步和第 2 步后生成的文件

第 1 步和第 2 步后生成的文件内容

【问题讨论】:

【参考方案1】:

为 Tesseract 4 创建 .traineddata

*注意:安装 tesseract 后打开 cmd 并执行以下操作。

第 1 步: 为我们要训练的图像制作 box 文件

语法:

tesseract [langname].[fontname].[expN].[file-extension] [langname].[fontname].[expN] batch.nochop makebox

例如:

tesseract own.arial.exp0.jpg own.arial.exp0 batch.nochop makebox

*注意:制作box文件后,我们必须更改或修改box文件中错误识别的字符。

第 2 步: 创建.tr文件(合成图像文件和盒子文件)

语法:

tesseract [langname].[fontname].[expN].[file-extension] [langname].[fontname].[expN] box.train

例如: tesseract own.arial.exp0.jpg own.arial.exp0 box.train

第 3 步: 从盒子文件中提取字符集(此命令的输出是 unicharset 文件)

语法:

unicharset_extractor [langname].[fontname].[expN].box 

例如:

unicharset_extractor  own.arial.exp0.box

第 4 步: 根据我们的需要创建一个 font_properties 文件。

语法:

echo "[fontname] [italic (0 or 1)] [bold (0 or 1)] [monospace (0 or 1)] [serif (0 or 1)] [fraktur (0 or 1)]" > font_properties 

例如:

echo "arial 0 0 1 0 0" > font_properties

第 5 步: 训练数据。

语法:

mftraining -F font_properties -U unicharset -O [langname].unicharset [langname].[fontname].[expN].tr

例如:

mftraining -F font_properties -U unicharset -O own.unicharset own.arial.exp0.tr

第 6 步:

语法:

cntraining [langname].[fontname].[expN].tr

例如:

cntraining own.arial.exp0.tr

*注意:在第 5 步和第 6 步之后创建了四个文件。(shapetable,inttemp,pffmtable,normproto)

第 7 步: 将四个文件(shapetable,inttemp,pffmtable,normproto)重命名为([langname].shapetable,[langname].inttemp,[langname].pffmtable,[langname].normproto)

语法:

rename filename1 filename2

例如:

    rename shapetable own.shapetable
    rename inttemp own.inttemp
    rename pffmtable own.pffmtable
    rename normproto own.normproto

第 8 步: 创建 .traineddata 文件

语法:

combine_tessdata [langname].

例如:

combine_tessdata own.

*注意:我将只使用一张图像 exp0 来创建训练数据。如果你想训练多张图像,你可以训练即 exp1,exp2..expn

Reference

【讨论】:

请在您的回答中提供解释。 要创建 *.traineddata 文件,您应该执行上述步骤。之后复制 *.traineddata 并将其粘贴到 /path/Tesseract-OCR/tessdata。运行 tesseract 时,将命令设为“ tesseract inputimage outputfile -l yourlang"。如果您将traineddata 文件创建为“own.traineddata”,请将“yourlang”替换为“own”。 对于车牌识别,您必须尽可能多地训练车牌图像。您也可以使用 --use-words 选项来识别可能主要有单词的车牌。

以上是关于如何为 Tesseract 4.1.0 创建训练数据文件的主要内容,如果未能解决你的问题,请参考以下文章

如何为 PHP(开源)设置和运行 Tesseract OCR?

如何用三种不同的笔迹训练相同数字的tesseract-ocr?

如何为 libsvm 创建训练数据(作为 svm_node 结构)

Tesseract训练

如何为已知行数创建具有无限列的 Angular Material Design 表?

训练手写数字的Tesseract:mftraining步骤需要永远