OCR文字识别(2)

一. 文字识别

       文字识别是指在确定检测框之后,识别出对应的文字,文字识别的方法有很多,包括:

1)基于分割后单个字符的分类;

2)基于序列的CNN方法,包括 基于STN矫正,CTC loss,Attention机制等策略;

3)基于one step的检测-识别方法,比如fots、Radical Analysis Network;

二. Attention Model

       文字的有效定位对于检测是非常重要的,确定文字的有效区域有利于对文字进行准确切分,提高准确度,Attention Model是一种非常有效的策略,这项工作来自于google,实验效果非常不错。

       论文:Attention-based Extraction of Structured Information from Street View Imagery

       Github:https://github.com/tensorflow/models/tree/master/research/attention_ocr

       Attention OCR结构示意:

       OCR文字识别(2)_第1张图片

       可以看到在特征层后面加入了attention层,用于实现对文字位置的定位,用以辅助后面序列loss。

三. 代码解析及汉字识别应用

       方法比较经典,说一下代码安装及使用方法:

# 1.download source code
git clone https://github.com/da03/Attention-OCR.git
# 2.install Distance
wget http://www.cs.cmu.edu/~yuntiand/Distance-0.1.3.tar.gz
tar zxf Distance-0.1.3.tar.gz
cd distance; sudo python setup.py install

      注:Attention OCR的代码基于编辑距离,因此需要安装Distance包。

      准备测试数据:

# 3.prepare test data
wget http://www.cs.cmu.edu/~yuntiand/sample.tgz 
tar zxf sample.tgz
# 4.train
python src/launcher.py --phase=train --data-path=sample/sample.txt --data-base-dir=sample --log-path=log.txt --no-load-model
# 5.test
python src/launcher.py --phase=test --visualize --data-path=test.txt --data-base-dir=data/img --log-path=log.txt --load-model --model-dir=train --output-dir=results

      使用比较简单,按照说明一步一步来做就可以实现,对于中文的识别,需要有针对的做一些修改,基本思路:

1)根据训练数据,构建中文词典,将原来的26个字母+数字扩展到汉字字符集;

2)训练时,将中文字符映射为标签 1-5000(假设有5000汉字);

3)inference时,根据得到的标签(1-5000),反向映射到中文字符;

       修改 data_gen.py:

# 'a':97, '0':48
word = [self.GO]
for c in lex:
    assert 96 < ord(c) < 123 or 47 < ord(c) < 58
    word.append(ord(c) - 97 + 13 if ord(c) > 96 else ord(c) - 48 + 3)
word.append(self.EOS)
word = np.array(word, dtype=np.int32)

=> 修改for循环部分

       修改 model.py:

# fword.write(' '.join([chr(c-13+97) if c-13+97>96 else chr(c-3+48) for c in ground_valid])+'\n')
# fword.write(' '.join([chr(c-13+97) if c-13+97>96 else chr(c-3+48) for c in output_valid]))

=> 修改映射到中文

四. 进一步算法改进

       待续~

你可能感兴趣的:(深度学习)