Tesseract 微调错误 - 计算 CTC 目标失败

Posted

技术标签:

【中文标题】Tesseract 微调错误 - 计算 CTC 目标失败【英文标题】:Tesseract fine tuning error - Compute CTC targets failed 【发布时间】:2021-06-18 04:05:11 【问题描述】:

我正在尝试根据this 指南根据我自己的特定数据微调 tesseract 4.1.1。我希望它能够检测和识别这样的框中的文本:

我已经生成了许多这样的图像,并与它们对应的 .box 文件包含带有文本的边界框。为了在这里重现我的问题,我将只使用一张图像来展示我的管道。这是上图的 .box 文件:

0 1804 1659 1858 1813 0
5 1804 1659 1858 1813 0
9 1804 1659 1858 1813 0
9 1266 715 1334 1169 0
7 1266 715 1334 1169 0
8 1266 715 1334 1169 0
3 1266 715 1334 1169 0
6 1266 715 1334 1169 0
8 1266 715 1334 1169 0
0 1266 715 1334 1169 0
5 1266 715 1334 1169 0
3 1266 715 1334 1169 0
2 876 303 930 607 0
7 876 303 930 607 0
2 876 303 930 607 0
8 876 303 930 607 0
2 876 303 930 607 0
2 876 303 930 607 0
8 1671 120 1725 224 0
0 1671 120 1725 224 0
5 300 1278 354 1482 0
2 300 1278 354 1482 0
3 300 1278 354 1482 0
7 300 1278 354 1482 0
7 917 1451 975 1605 0
6 917 1451 975 1605 0
4 917 1451 975 1605 0
1 1058 1310 1132 1716 0
9 1058 1310 1132 1716 0
8 1058 1310 1132 1716 0
7 1058 1310 1132 1716 0
7 1058 1310 1132 1716 0
1 1058 1310 1132 1716 0
8 1058 1310 1132 1716 0
6 1058 1310 1132 1716 0
3 998 76 1070 382 0
4 998 76 1070 382 0
4 998 76 1070 382 0
8 998 76 1070 382 0
3 998 76 1070 382 0
6 998 76 1070 382 0
3 722 548 776 652 0
2 722 548 776 652 0
7 1782 1332 1838 1586 0
7 1782 1332 1838 1586 0
2 1782 1332 1838 1586 0
6 1782 1332 1838 1586 0
2 1782 1332 1838 1586 0
1 714 140 768 244 0
2 714 140 768 244 0
0 220 500 278 754 0
5 220 500 278 754 0
5 220 500 278 754 0
6 220 500 278 754 0
6 220 500 278 754 0
8 1676 1052 1742 1406 0
4 1676 1052 1742 1406 0
5 1676 1052 1742 1406 0
9 1676 1052 1742 1406 0
1 1676 1052 1742 1406 0
2 1676 1052 1742 1406 0
4 1676 1052 1742 1406 0
5 357 161 419 317 0
1 357 161 419 317 0
4 357 161 419 317 0
9 1424 848 1480 952 0
8 1424 848 1480 952 0
0 438 324 498 478 0
6 438 324 498 478 0
9 438 324 498 478 0
8 1503 1246 1559 1700 0
1 1503 1246 1559 1700 0
8 1503 1246 1559 1700 0
5 1503 1246 1559 1700 0
3 1503 1246 1559 1700 0
0 1503 1246 1559 1700 0
5 1503 1246 1559 1700 0
5 1503 1246 1559 1700 0
4 1503 1246 1559 1700 0
8 1553 477 1609 581 0
4 1553 477 1609 581 0
3 527 258 581 512 0
7 527 258 581 512 0
7 527 258 581 512 0
9 527 258 581 512 0
1 527 258 581 512 0
6 1665 1592 1727 1748 0
8 1665 1592 1727 1748 0
3 1665 1592 1727 1748 0
5 595 1362 651 1766 0
9 595 1362 651 1766 0
3 595 1362 651 1766 0
9 595 1362 651 1766 0
4 595 1362 651 1766 0
3 595 1362 651 1766 0
3 595 1362 651 1766 0
1 595 1362 651 1766 0

我还把图片转换成 .tiff 格式,和 .box 文件放在同一个目录下。假设我们在目录中有 87.tiff87.box

接下来我使用

生成87.lstmf文件
tesseract 87.tiff 87 lstm.train

接下来我使用提取模型

combine_tessdata -e /usr/share/tesseract-ocr/4.00/tessdata/rus.traineddata lstm_model/rus.lstm

接下来我创建包含单行的 train.txt 文件:87.lstmf

最后,我创建了 bash 脚本 train.sh

/usr/bin/lstmtraining \
 --model_output output/fine_tuned \
 --continue_from lstm_model/rus.lstm \
 --traineddata /usr/share/tesseract-ocr/4.00/tessdata/rus.traineddata \
 --train_listfile train.txt \
 --eval_listfile train.txt \
 --max_iterations 400\
 --debug_level -1

当我运行它时,我有以下日志:

$ bash train.sh
Loaded file lstm_model/rus.lstm, unpacking...
Warning: LSTMTrainer deserialized an LSTMRecognizer!
Continuing from lstm_model/rus.lstm
Loaded 1/1 lines (1-1) of document 87.lstmf
Loaded 1/1 lines (1-1) of document 87.lstmf
Compute CTC targets failed!
Compute CTC targets failed!
Compute CTC targets failed!
Compute CTC targets failed!

消息“计算 CTC 目标失败!”无限重复,直到我中断脚本。

我做错了什么?我还担心消息“已加载 1/1 行 (1-1)”,因为我在图像上有多个边界框。

【问题讨论】:

【参考方案1】:

对于图像的 lstm 训练,您可能需要具有新 lstm 格式的 .box 文件(这些可以通过运行带有 lstmbox 参数的 tesseract 生成): TrainingTesseract-4.00 所以在每一行文本之后用一个特殊的行标记它: <tab> <left> <bottom> <right> <top> <page> 然后运行 ​​lstm.train 。

【讨论】:

以上是关于Tesseract 微调错误 - 计算 CTC 目标失败的主要内容,如果未能解决你的问题,请参考以下文章

Tesseract 的自定义字典

多个微调器计算结果不准确

CTC安装机器错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for

CTC安装及其错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for

利用CRNN来识别图片中的文字(二)tensorflow中ctc有关函数详解

RNN+CTC 模型似乎没有正确获取数据维度