### 验证码识别

常规字符形验证码识别模型，预设CNN和CNNCTC两种模型。



### 运行环境

语言

```
python == 3.6.5
```

依赖库

```
numpy == 1.16.0
tqdm
tensorflow == 1.13.1
keras == 2.2.4
```



### 主要文件

```
│  config.py   配置
│  main.py  程序入口
│  pretreat.py  数据集预处理
│  readme.md  
│  requirements.txt  依赖环境
│  
├─log
│  ├─log_cnn    CNN模型训练日志
│  └─log_cnn_ctc  CNNCTC模型训练日志
│          
├─models
│  │  model_cnn.py  CNN模型
│  │  model_cnn_ctc.py  CNNCTC模型
│  └   __init__.py  模型抽象类
│
└─resources
    ├─dataset  原始数据集
    │	├─ pic   验证码图片
    │	└ labels.txt  验证码标签
    │	
    ├─npyset   处理后npy文件格式数据集
    └─weights  模型参数文件
```



### 开始

安装依赖

```
pip install requirements.txt
```

运行主程序

```
python main.py
```

在主程序中**main.py** 使用三大功能

**A.预测一张图片**

```python
# from models.model_cnn import CNNModel as Model
from models.model_cnn_ctc import CNNCTCModel as Model


if __name__ == '__main__':

    model = Model()
    model.load()
    result = model.predict("{图片路径}")
    print(result)

```

**B.训练模型**

```python
# from models.model_cnn import CNNModel as Model
from models.model_cnn_ctc import CNNCTCModel as Model


if __name__ == '__main__':

    model = Model()
    model.train()
```

**C.测试模型**

```
# from models.model_cnn import CNNModel as Model
from models.model_cnn_ctc import CNNCTCModel as Model


if __name__ == '__main__':

    model = Model()
    model.test()
```





### 增加模型

models/\_\_init\_\_.py  抽象模型

通过实现抽象模型的下述方法，可以自行增加模型

```python
class AbstractModel:

    def train(self, batch_size, epochs):
        """训练 """

    def load(self, path=None):
       """加载参数"""

    def predict(self, inputs):
       """预测"""

    def test(self):
        """测试"""

    def inference(self, x):
        """推理"""
        return x

    def pre_process(self, x):
        """预处理"""
        return x

    def post_process(self, x):
        """后处理"""
        return x

```



### 其它

##### 1、修改配置 config.py

```python
import os

Width, Height, Depth = 260, 76, 1  # 图片 高、宽、位深度
NUM = 4  # 验证码字符个数

resources_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "resources")


train_path = os.path.join(resources_path, 'npyset/train')
test_path = os.path.join(resources_path, 'npyset/test')

dataset_path = os.path.join(resources_path, "dataset")
weights_path = os.path.join(resources_path, "weights")

pic_path = os.path.join(dataset_path, "pics")
label_path = os.path.join(dataset_path, "labels.txt")

```

##### 2、tensorboard 查看训练日志

2.1 运行指令

```
tensorboard --logdir=你的日志路径
```

2.2 打开浏览器 输入localhost:6006查看图形数据



