验证码识别入门

基础概念

  • 灰度

使用黑色调表示物体,不同的饱和度的黑色来显示图像,灰度值范围为0~255

  • 图像灰度化

图像灰度化就是让像素点矩阵中的每个像素点满足关系: R=G=B

  • 图像二值化

将图像上的像素点的灰度值设置为0 || 255

常见图像二值化(Binarisation)方法

  • 全局阈值法

手动选定灰度值(阀值)将图像中低于某个阈值的像素设置为黑色,而其他的设置为白色。

缺点:直接阈值化操作是一种一刀切的方式,对于亮度分布差异较大的图像,常常无法找到一个合适的阈值。

  • 自适应阈值

根据自适应阈值算法选择灰度值(阀值),阀值根据算法改变而改变

1)局部邻域块的平均值;ADAPTIVE_THRESHOLD_MEAN_C

2)局部邻域块的高斯加权和:ADAPTIVE_THRESHOLD_GAUSSIAN_C

3)根据双峰法、P 参数法、迭代法、OTSU 等算法计算阀值

  • 根据图像色系范围

根据图像色系排序,将排序好的前几个色系最为阀值

降噪(Noise Removal)、去除干扰线

  • 中值滤波

    用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像素值接近真实的值从而消除孤立的噪声点

  • 高斯滤波

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声。
    高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
    高斯曲线越平滑。去噪能力越强,图像越模糊

  • 有效连接点

    根据噪点周围的 4 个正向点、 据噪点周围的 8 个点的数目去除噪点

Tesseract

Tesseract(OCR)Optical character recognition 光学字符识别引擎(指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字和版面信息的过程),
是 Google 发布的一款 OCR 开源库,它支持多个变成语言环境,以及运行环境。

tesseract --list-langs

jTessEditorBox

  1. 准备训练文本

    meger tiff

  2. 生成 box 文档

    tesseract -l yy -psm 7 code.yy.tif code.yy batch.nochop makebox

  3. 较正 box 文档

  4. 生成 unicharset 文档

    tesseract code.yy.tif code.yy nobatch box.train unicharset_extractor code.yy.box

  5. 生成字典数据

    1
    2
    3
    4
    vi font_properties
    yy 0 0 0 0 0
    mftraining -F font_properties -U unicharset code.yy.tr
    cntraining code.yy.tr
  6. 合并数据文档

    1
    2
    3
    4
    5
    6
    rename normproto yy.normproto
    rename inttemp yy.inttemp
    rename pffmtable yy.pffmtable
    rename shapetable yy.shapetable
    rename unicharset yy.unicharset
    combine_tessdata yy.

参考资料

Traing的介绍

Training Tesseract

如何提高tesseract识别度

Testdata

tesseract+JTessBoxEditor训练

JTessBoxEditor