AttentionOCR for Arbitrary-Shaped Scene Text Recognition
This is the ranked No.1 tensorflow based scene text spotting algorithm on ICDAR2019 Robust Reading Challenge on Arbitrary-Shaped Text (Latin Only, Latin and Chinese), futhermore, the algorithm is also adopted in ICDAR2019 Robust Reading Challenge on Large-scale Street View Text with Partial Labeling and ICDAR2019 Robust Reading Challenge on Reading Chinese Text on Signboard.
Scene text detection algorithm is modified from Tensorpack FasterRCNN, and we only open source code in this repository for scene text recognition. I upload ICDAR2019 ArT competition model to docker hub, please refer to Docker.
Note that our text recognition algorithm not only recognize Latin and Non-Latin characters, but also support horizontal and vertical text recognition in one model. It is convenient for multi-lingual arbitrary-shaped text recognition.
python 3 tensorflow-gpu 1.14 tensorpack 0.9.8 pycocotools
First download and extract multiple text datasets in base text dir, please refer to dataset.py for dataset preprocess and multiple datasets.
$(base_dir)/lsvt $(base_dir)/art $(base_dir)/rects $(base_dir)/icdar2017rctw
You can also synthesize text recognition data for data augmentation, please refer to TextRecognitionDataGenerator. It is helpful for long text recognition and attention-based language model because you can directly synthesize text images from NLP corpus. Then you should rewrite dataset.py for synthetic text dataset.
First, download pretrained inception v4 checkpoint and put it in ./pretrain folder. Then you can modify your gpu lists in config.py for specified gpus and then run:
You can visualize your training steps via tensorboard:
Use ICDAR2019-LSVT, ICDAR2019-ArT, ICDAR2019-ReCTS for default training, you can change it with your own training data.
python eval.py --checkpoint_path=$(Your model path)
Use ICDAR2017RCTW for default evaluation with Normalized Edit Distance metric(1-N.E.D specifically), you can change it with your own evaluation data.
Export checkpoint to tensorflow pb model for inference.
python export.py --pb_path=$(Your tensorflow pb model save path) --checkpoint_path=$(Your trained model path)
Load tensorflow pb model for text recognition.
python test.py --pb_path=$(Your tensorflow pb model save path) --img_folder=$(Your test img folder)
Default use ICDAR2019-ArT for test, you can change it with your own test data.
Scene text detection and recognition result:
Scene text recognition attention maps:
To learn more about attention mechanism, please refer to Attention Mechanism in Deep Learning.
I upload ICDAR2019 scene text recognition model include text detection and recognition to Docker Hub.
After nvidia-docker installed, run:
docker pull zhang0jhon/demo:ocr docker run -it -p 5000:5000 --gpus all zhang0jhon/demo:ocr bash cd /ocr/ocr python flaskapp.py
Then you can test with your data via browser:
$(localhost or remote server ip address):5000
Note that the competition model in docker container is slightly different from the recognition model trained from this updated repository.