失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 用pytorch实现crnn+ctc来识别验证码

用pytorch实现crnn+ctc来识别验证码

时间:2018-08-28 22:40:19

相关推荐

用pytorch实现crnn+ctc来识别验证码

pytorch 实现crnn+ctc来识别验证码

说明环境搭建训练服务搭建

说明

利用crnn和ctc来进行验证码识别是现在主流的机器学习的方式,本文期望利用pytorch来实现单个验证码的识别,同时整合多个训练样本,期望能通过增量识别的方式,最终通过一个模型来识别多个验证码。

本文采用的是阿里云的gpu的服务器。

源码地址:/linlihuiyang/ocr-python

环境搭建

服务器购买,从阿里云购买gpu服务器,可以选择抢占式实例,ubuntu系统选择16.04,自动安装cuda驱动。服务器配置ecs.gn5-c8g1.2xlarge。系统会自动带一个数据盘,需要手动完成挂载。参考文档/articles/226592?spm=a2c4e.11153940.0.0.52033583F02HO4

远程连接上服务器,默认已经安装好了python和pip

1.安装virtualenv

pip install virtualenv

virtualenv --system-site-packages -p python2.7 ./venv

source /root/venv/bin/activate

2.安装warp-ctc

git clone /SeanNaren/warp-ctc.git

cd warp-ctc

mkdir build; cd build

cmake …

make

cd pytorch_binding

python setup.py install

3.安装lmdb

apt-get install python-dev

build-essential libssl-dev libffi-dev

libxml2-dev libxslt1-dev zlib1g-dev

python-pip

pip install lmdb

4.安装opencv

pip install opencv-python

5.安装torch

pip install /whl/cu80/torch-1.0.1.post2-cp27-cp27mu-linux_x86_64.whl

pip install torchvision

验证torch

from __future__ import print_functionimport torchx = torch.rand(5, 3)print(x)

期望结果类似如下

tensor([[0.3380, 0.3845, 0.3217],[0.8337, 0.9050, 0.2650],[0.2979, 0.7141, 0.9069],[0.1449, 0.1132, 0.1375],[0.4675, 0.3947, 0.1426]])

验证cuda驱动是否正常安装

import torchtorch.cuda.is_available()

训练

下载代码到服务器路径/home/ocr-python/

source /root/venv/bin/activate

单个验证码识别

#tool目录下执行,会在datasets下面生成ydShop目录,下面有train和val两个文件夹,比例为9比1python create_dataset_Plus.py --imagePath=/home/pics/ydshop/success --head=ydshop#/home/ocr-python/crnn_pytorch目录下执行,默认会在expr下面生成训练的结果,如果开始打印epoch: 0, step: 则表示正在训练,数据集没问题,之后看到日志,accuray表示成功率,达到一定成功率即可kill掉进程,或者等待迭代次数完成(默认100次)nohup python crnn_main_plus.py --trainPath=/home/ocr-python/crnn_pytorch/ydshop/train --valPath=/home/ocr-python/crnn_pytorch/datasets/ydshop/val --saveInterval=2000 &

如果运行完成还没达到预期成功率,可能是样本量不够,可以增加样本,继续训练。

注:如果继续训练,跟原来的图片路径分开,新建一个文件夹,或者执行如下脚本:

python create_dataset_Plus.py --imageDirPath=/home/pics/ydshop2/success --head=ydshop

整合验证码识别

整合的方式是通过把datasets里面的train的样本,整合到一个统一的目录如tmpLmdb,脚本如下,reset为true会清空tmpLmdb目录。

如果datasets新增了文件夹,srcPath传入精确的文件路径,reset传入False。

python integrate_dataset.py --result=/home/ocr-python/crnn_pytorch/tmpLmdb --srcPath=/home/ocr-python/crnn_pytorch/datasets/ --reset=False

整合完成之后,训练脚本跟单个一样,trainPath改为到tmpLmdb就行,系统会自动遍历transets下面的验证集进行验证。

nohup python crnn_main_plus.py --trainPath=/home/ocr-python/crnn_pytorch/tmpLmdb --valPath=/home/ocr-python/crnn_pytorch/datasets/ --saveInterval=2000 &

训练完成后,把生成的模型文件拷贝到ocr-python/data/model下

重命名文件 格式为 crnn_{id}_{成功率}_model.pth

如 crnn_163209_96_model.pth

服务搭建

/home/ocr-python/server目录,可以修改config来制定对外端口,

默认会读取在上级目录下的data/model/下面的模型文件。

阿里云开通外网端口访问

#启动服务nohup python server.py &

调用方式Post,requestBody,格式为json,site为上面的模型文件名中的{id}

{"site":"163209","image":"图片的base64格式的字符串"}

附 命令行把图片转换为base64格式

openssl base64 -e -in 1516160605925_kcxs.png > text.json

正确返回格式

{"result": "kcxs", //识别结果"success": true}

如果觉得《用pytorch实现crnn+ctc来识别验证码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。