训练tesseract - shapeclustering问题

时间:2013-05-09 22:05:09

标签: ocr tesseract

我正在尝试按照此处的说明训练tesseract(添加新的仅数字字体):http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3

我做了什么:

  1. 创建带有示例文本的PDF,转换为tif,运行tesseract num.dot.exp0.tif num.dot.exp0 batch.nochop makebox digits。然后编辑生成的框文件,更正错误的检测
  2. 在培训模式下执行tesseract:tesseract num.dot.exp0.tif num.dot.exp0 nobatch box.train并使用unicharset_extractor num.dot.exp0.box
  3. 提取unicharset
  4. 创建了font_properties文件:echo "num.dot.exp0 0 0 0 0 0" > font_properties
  5. 到目前为止一切正常,.box和unicharset文件是正确的,生成了num.dot.exp0.tr。

    然后我跑shapeclustering -F font_properties -U unicharset num.dot.exp0.tr并收到以下错误:

    
        Reading num.dot.exp0.tr ...
    
        *** glibc detected *** shapeclustering: double free or corruption (!prev): 0x098c52e0 ***
        ======= Backtrace: =========
        /lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0x82eee2]
        /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0x77d51f]
        /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdaPv+0x1b)[0x77d57b]
        shapeclustering(_ZN13GenericVectorIiE5clearEv+0x8b)[0x8050949]
        shapeclustering(_ZN13GenericVectorIiED1Ev+0x2b)[0x805056b]
        /usr/lib/libtesseract.so.3(_ZN9tesseract17TrainingSampleSet14SetupFontIdMapEv+0x137)[0x488699]
        /usr/lib/libtesseract.so.3(_ZN9tesseract17TrainingSampleSet22OrganizeByFontAndClassEv+0x22)[0x48823c]
        /usr/lib/libtesseract.so.3(_ZN9tesseract13MasterTrainer24ReplaceFragmentedSamplesEv+0x1d7)[0x477ebd]
        /usr/lib/libtesseract.so.3(_ZN9tesseract13MasterTrainer15PostLoadCleanupEv+0x47)[0x47587b]
        shapeclustering[0x804e2b9]
        shapeclustering(main+0x5f)[0x804cb13]
        /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7d24d3]
        shapeclustering[0x804ca21]
        (...)
        00cba000-00cc1000 rw-p 0039c000 08:01 4465015    /usr/lib/libtesseract.so.3.0.2
        00cc1000-00d5c000 rw-p 00000000 00:00 0 
        00ef8000-00f22000 r-xp 00000000 08:01 4211867    /lib/i386-linux-gnu/libm-2.15.so
        00f22000-00f23000 r--p 00029000 08:01 4211867    /lib/i386-linux-gnu/libm-2.15.so
        00f23000-00f24000 rw-p 0002a000 08:01 4211867    /lib/i386-linux-gnu/libm-2.15.so
        08048000-08056000 r-xp 00000000 08:01 4464615    /usr/bin/shapeclustering
        08056000-08057000 r--p 0000d000 08:01 4464615    /usr/bin/shapeclustering
        08057000-08058000 rw-p 0000e000 08:01 4464615    /usr/bin/shapeclustering
        093c5000-094cf000 rw-p 00000000 00:00 0          [heap]
        b779a000-b77a0000 rw-p 00000000 00:00 0 
        b77b6000-b77ba000 rw-p 00000000 00:00 0 
        bfb6c000-bfb8d000 rw-p 00000000 00:00 0          [stack]
        Aborted (core dumped)
    
    

    然后创建一个空的shapetable。

    我做错了吗?关于为什么会发生这种情况的任何线索?

    我正在使用tesseract 3.02

2 个答案:

答案 0 :(得分:2)

我设法找出问题所在。我应该使用echo "dot 0 0 0 0 0" > font_properties代替echo "num.dot.exp0 0 0 0 0 0" > font_properties

shapeclustering在此之后正常工作。它需要font_properties上的真实字体名称,而不是完整的名称(在我的例子中为“dot”)。

答案 1 :(得分:0)

我遇到了同样的问题但通过验证font_properties文件中的字体名称找到的解决方案应该与eng.Imagefile.tr中的相同。

echo "NewFont 0 0 0 0 0" > font_properties
shapeclustering -F font_properties -U unicharset eng.Imagefile.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.Imagefile.tr