Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

LLCChen/text-detection-ocr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

74 Commits

Repository files navigation

text-detection

简介

为了能将一张图像中的多行文本识别出来,可以将该任务分为两步:

  1. 检测图像中每一行文本的位置
  2. 根据位置从原始图像截取出一堆子图像
  3. 只需识别出子图像的文字,再进行排序组合即可

因此,采用两类模型:

  1. 文本检测:CTPN
  2. 文本识别:Densenet + ctc

安装

运行环境

OS: win10 Python: 3.6

安装步骤

  1. 安装tensorflow 1.9.0,若电脑配置了gpu环境,请选择gpu版,否则选择cpu版
pip install tensorflow==1.9.0 # 1. for cpu
pip install tensorflow-gpu==1.9.0 # 2. for gpu
  1. 安装该包
python setup.py sdist
cd dist/
pip install dlocr-0.1.tar.gz

执行速度

图像大小 处理器 文本行数量 速度
500kb 1070ti 20 420ms
500kb Tesla k80 20 1s

使用

OCR

用于识别一张图片中的文字

  • 编程方式

    import time
    import dlocr
    if __name__ == '__main__':
     ocr = dlocr.get_or_create()
     start = time.time()
     bboxes, texts = ocr.detect("../asset/demo_ctpn.png")
     print('\n'.join(texts))
     print(f"cost: {(time.time() - start) * 1000}ms")

    get_or_create() 支持以下参数用于使用自己训练的模型:

    • ctpn_weight_path
    • ctpn_config_path
    • densenet_weight_path
    • densenet_config_path
    • dict_path

    参数说明:见以下命令行方式中的参数说明。

  • 命令行方式

    > python -m dlocr -h
    usage: text_detection_app.py [-h] [--image_path IMAGE_PATH]
     [--dict_file_path DICT_FILE_PATH]
     [--densenet_config_path DENSENET_CONFIG_PATH]
     [--ctpn_config_path CTPN_CONFIG_PATH]
     [--ctpn_weight_path CTPN_WEIGHT_PATH]
     [--densenet_weight_path DENSENET_WEIGHT_PATH]
     [--adjust ADJUST]
    optional arguments:
     -h, --help show this help message and exit
     --image_path IMAGE_PATH
     图像位置
     --dict_file_path DICT_FILE_PATH
     字典文件位置
     --densenet_config_path DENSENET_CONFIG_PATH
     densenet模型配置文件位置
     --ctpn_config_path CTPN_CONFIG_PATH
     ctpn模型配置文件位置
     --ctpn_weight_path CTPN_WEIGHT_PATH
     ctpn模型权重文件位置
     --densenet_weight_path DENSENET_WEIGHT_PATH
     densenet模型权重文件位置
     --adjust ADJUST 是否对倾斜的文本进行旋转
    
  1. ctpn模型权重文件位置不指定默认使用weights/weights-ctpnlstm-init.hdf5
  2. ctpn模型配置文件位置不指定默认使用config/ctpn-default.json
  3. densenet模型权重文件位置不指定默认使用weights/weights-densent-init.hdf5
  4. densenet模型配置文件位置不指定默认使用config/densent-default.json
  5. 字典文件位置不指定默认使用dictionary/char_std_5990.txt

示例:

python -m dlocr --image_path asset/demo_ctpn.png

CTPN

用于定于图像中文字的位置

  • 编程方式

    from dlocr import ctpn
    if __name__ == '__main__':
     ctpn = ctpn.get_or_create()
     ctpn.predict("asset/demo_ctpn.png", "asset/demo_ctpn_labeled.jpg")
  • 命令行方式

    > python dlocr.ctpn_predict.py -h
    usage: ctpn_predict.py [-h] [--image_path IMAGE_PATH]
     [--config_file_path CONFIG_FILE_PATH]
     [--weights_file_path WEIGHTS_FILE_PATH]
     [--output_file_path OUTPUT_FILE_PATH]
    optional arguments:
     -h, --help show this help message and exit
     --image_path IMAGE_PATH
     图像位置
     --config_file_path CONFIG_FILE_PATH
     模型配置文件位置
     --weights_file_path WEIGHTS_FILE_PATH
     模型权重文件位置
     --output_file_path OUTPUT_FILE_PATH
     标记文件保存位置
    1. 权重文件位置不指定默认使用weights/weights-ctpnlstm-init.hdf5
    2. 配置文件位置不指定默认使用config/ctpn-default.json

    示例:

    python ctpn_predict.py --image_path asset/demo_ctpn.png --output_file_path asset/demo_ctpn_labeled.jpg

Densenet

用于识别固定图像高度中的文字,默认图像高度为32

  • 编程方式

    from dlocr.densenet import load_dict, default_dict_path
    from dlocr import densenet
    if __name__ == '__main__':
     densenet = densenet.get_or_create()
     text, img = densenet.predict("asset/demo_densenet.jpg", load_dict(default_dict_path))
     print(text)
  • 命令行方式

    > python dlocr.densenet_predict.py -h
    usage: densenetocr_predict.py [-h] [--image_path IMAGE_PATH]
     [--dict_file_path DICT_FILE_PATH]
     [--config_file_path CONFIG_FILE_PATH]
     [--weights_file_path WEIGHTS_FILE_PATH]
    optional arguments:
     -h, --help show this help message and exit
     --image_path IMAGE_PATH
     图像位置
     --dict_file_path DICT_FILE_PATH
     字典文件位置
     --config_file_path CONFIG_FILE_PATH
     模型配置文件位置
     --weights_file_path WEIGHTS_FILE_PATH
     模型权重文件位置
  1. 权重文件位置不指定默认使用weights/weights-densent-init.hdf5
  2. 配置文件位置不指定默认使用config/densent-default.json
  3. 字典文件位置不指定默认使用dictionary/char_std_5990.txt

示例:

python densenetocr_predict.py --image_path asset/demo_densenet.jpg

训练

数据集说明

  • CTPN 训练使用的数据集格式与VOC数据集格式相同,目录格式如下:

    - VOCdevkit
     - VOC2007
     - Annotations
     - ImageSets
     - JPEGImages
  • Densenet + ctc 使用的数据集分为3部分

    • 文字图像
    • 标注文件:包括图像路径与所对应的文本标记(train.txt, test.txt)
    • 字典文件:包含数据集中的所有文字 (char_std_5990.txt)

数据集链接:

关于创建自己的文本识别数据集,可参考:https://github.com/Sanster/text_renderer

CTPN 训练

> python -m dlocr.ctpn_train -h
usage: ctpn_train.py [-h] [-ie INITIAL_EPOCH] [--epochs EPOCHS] [--gpus GPUS]
 [--images_dir IMAGES_DIR] [--anno_dir ANNO_DIR]
 [--config_file_path CONFIG_FILE_PATH]
 [--weights_file_path WEIGHTS_FILE_PATH]
 [--save_weights_file_path SAVE_WEIGHTS_FILE_PATH]
optional arguments:
 -h, --help show this help message and exit
 -ie INITIAL_EPOCH, --initial_epoch INITIAL_EPOCH
 初始迭代数
 --epochs EPOCHS 迭代数
 --gpus GPUS gpu的数量
 --images_dir IMAGES_DIR
 图像位置
 --anno_dir ANNO_DIR 标注文件位置
 --config_file_path CONFIG_FILE_PATH
 模型配置文件位置
 --weights_file_path WEIGHTS_FILE_PATH
 模型初始权重文件位置
 --save_weights_file_path SAVE_WEIGHTS_FILE_PATH
 保存模型训练权重文件位置

ctpn 的训练需要传入2个必要参数:

  1. 图像目录位置
  2. 标注文件目录位置

<模型配置文件位置> 用于指定模型的一些参数,若不指定,将使用默认配置:

{
 "image_channels": 3, // 图像通道数
 "vgg_trainable": true, // vgg 模型是否可训练
 "lr": 1e-05 // 初始学习率
}

<保存模型训练权重文件位置> 若不指定,会保存到当前目录下的model文件夹

训练情况:

...
Epoch 17/20
6000/6000 [==============================] - 4036s 673ms/step - loss: 0.0895 - rpn_class_loss: 0.0360 - rpn_regress_loss: 0.0534
Epoch 18/20
6000/6000 [==============================] - 4075s 679ms/step - loss: 0.0857 - rpn_class_loss: 0.0341 - rpn_regress_loss: 0.0516
Epoch 19/20
6000/6000 [==============================] - 4035s 673ms/step - loss: 0.0822 - rpn_class_loss: 0.0324 - rpn_regress_loss: 0.0498
Epoch 20/20
6000/6000 [==============================] - 4165s 694ms/step - loss: 0.0792 - rpn_class_loss: 0.0308 - rpn_regress_loss: 0.0484

Densenet 训练

> python -m dlocr.densenet_train -h
usage: densenet_train.py [-h] [-ie INITIAL_EPOCH] [-bs BATCH_SIZE]
 [--epochs EPOCHS] [--gpus GPUS]
 [--images_dir IMAGES_DIR]
 [--dict_file_path DICT_FILE_PATH]
 [--train_file_path TRAIN_FILE_PATH]
 [--test_file_path TEST_FILE_PATH]
 [--config_file_path CONFIG_FILE_PATH]
 [--weights_file_path WEIGHTS_FILE_PATH]
 [--save_weights_file_path SAVE_WEIGHTS_FILE_PATH]
optional arguments:
 -h, --help show this help message and exit
 -ie INITIAL_EPOCH, --initial_epoch INITIAL_EPOCH
 初始迭代数
 -bs BATCH_SIZE, --batch_size BATCH_SIZE
 小批量处理大小
 --epochs EPOCHS 迭代数
 --gpus GPUS gpu的数量
 --images_dir IMAGES_DIR
 图像位置
 --dict_file_path DICT_FILE_PATH
 字典文件位置
 --train_file_path TRAIN_FILE_PATH
 训练文件位置
 --test_file_path TEST_FILE_PATH
 测试文件位置
 --config_file_path CONFIG_FILE_PATH
 模型配置文件位置
 --weights_file_path WEIGHTS_FILE_PATH
 模型初始权重文件位置
 --save_weights_file_path SAVE_WEIGHTS_FILE_PATH
 保存模型训练权重文件位置

Densnet 的训练需要4个必要参数:

  1. 训练图像位置
  2. 字典文件位置
  3. 训练文件位置
  4. 测试文件位置

<模型配置文件位置> 用于指定模型使用的配置文件路径,若不指定,默认配置如下:

{
 "lr": 0.0005, // 初始学习率
 "num_classes": 5990, // 字典大小
 "image_height": 32, // 图像高
 "image_channels": 1, // 图像通道数
 "maxlen": 50, // 最长文本长度
 "dropout_rate": 0.2, // 随机失活率
 "weight_decay": 0.0001, // 权重衰减率
 "filters": 64 // 模型第一层的核数量
}

<保存模型训练权重文件位置> 若不指定,会保存到当前目录下的model文件夹

训练情况:

Epoch 3/100
25621/25621 [==============================] - 15856s 619ms/step - loss: 0.1035 - acc: 0.9816 - val_loss: 0.1060 - val_acc: 0.9823
Epoch 4/100
25621/25621 [==============================] - 15651s 611ms/step - loss: 0.0798 - acc: 0.9879 - val_loss: 0.0848 - val_acc: 0.9878
Epoch 5/100
25621/25621 [==============================] - 16510s 644ms/step - loss: 0.0732 - acc: 0.9889 - val_loss: 0.0815 - val_acc: 0.9881
Epoch 6/100
25621/25621 [==============================] - 15621s 610ms/step - loss: 0.0691 - acc: 0.9895 - val_loss: 0.0791 - val_acc: 0.9886
Epoch 7/100
25621/25621 [==============================] - 15782s 616ms/step - loss: 0.0666 - acc: 0.9899 - val_loss: 0.0787 - val_acc: 0.9887
Epoch 8/100
25621/25621 [==============================] - 15560s 607ms/step - loss: 0.0645 - acc: 0.9903 - val_loss: 0.0771 - val_acc: 0.9888

其它

训练好的权重文件

链接: https://pan.baidu.com/s/1HaeLO-fV_WCtTZl4DQvrzw 提取码: ihdx

参考

  1. https://github.com/YCG09/chinese_ocr
  2. https://github.com/xiaomaxiao/keras_ocr

About

Chinese text detection and recognition based on CTPN + DENSENET using Keras and Tensor Flow,使用keras和tensorflow基于CTPN+Densenet实现的中文文本检测和识别

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • Python 99.7%
  • Shell 0.3%

AltStyle によって変換されたページ (->オリジナル) /