使用 OCR 识别验证码

2011-01-07 10:18

[ocr]

tesseract-ocr 是一个历史悠久的 OCR 引擎,代码位于 http://code.google.com/p/tesseract-ocr/。现在由 Google 开发。几年间代码有了很多 Google 的风格,也相对成熟稳定了一些。对于简单英文字符有很高的识别率。

在代码顶层目录执行
TESSDATA_PREFIX=./ api/tesseract 1.jpg 1 -l eng
解释一下:
TESSDATA_PREFIX 是环境变量,该目录下有 tessdata/
下面应该有 configs/ eng.traineddata 等
tesseract 是 OCR 识别程序
1.jpg 是需要识别的图像文件
1 会生成 1.txt 的识别结果
-l eng 是指应用训练库 eng.traineddata 进行识别

一般难度的验证码,如

都可以达到 20% 左右的的正确率。

tesseract-ocr 没有关于layout analysis,如果先对图像预处理,会有更高的效果。

如果针对图像训练会有意想不到的效果。但是其wiki里的文档没有说太明白
过程如下:

  1. 先生成box文件,可能有错误
    api/tesseract 1.jpg 1 makebox
    api/tesseract 1.jpg 2 makebox

  2. 使用 python 的编辑器,调整 box 文件内矩形数据的正确性
    python tesseractTrainer.py

  3. 开始训练。
    api/tesseract 1.jpg {output} box.train
    api/tesseract 2.jpg {output} box.train
    ...

  4. 对训练结果进行转换
    training/mftraining *.tr
    training/cntraining *.tr
    training/unicharset_extractor *.box

    cp unicharset tessdata/rr.unicharset
    cp pffmtable tessdata/rr.pffmtable
    cp inttemp tessdata/rr.inttemp
    cp normproto tessdata/rr.normproto

  5. 合并成 rr.traineddata
    cd tessdata
    ../training/combine_tessdata rr.

    之后就可以使用-l rr来识别了