nickliqian / cnn_captcha Goto Github PK
View Code? Open in Web Editor NEWuse cnn recognize captcha by tensorflow. 本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别。
License: Apache License 2.0
use cnn recognize captcha by tensorflow. 本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别。
License: Apache License 2.0
不区分字母大小写怎么设置?
除了更改显卡以外还有其他解决方式吗?
我的origin数量一共1076张,根据verify_and_split_data.py自动分成train和test数据。配置参数如下: "image_width": 65,
"image_height": 25,
"max_captcha": 4,
"image_suffix": "jpg",
"char_set": "0123456789abcdefghijklmnopqrstuvwxyz",
"use_labels_json_file": false,
"remote_url": "http://127.0.0.1:6100/captcha/",
"cycle_stop": 20000,
"acc_stop": 0.99,
"cycle_save": 500,
"enable_gpu": 0
问题:图片准确率低
第19970次训练 >>>
[训练集] 字符准确率为 0.33500 图片准确率为 0.03000 >>> loss 0.0000869953
[验证集] 字符准确率为 0.38000 图片准确率为 0.01000 >>> loss 0.0000869953
第19980次训练 >>>
[训练集] 字符准确率为 0.35000 图片准确率为 0.03000 >>> loss 0.0001388737
[验证集] 字符准确率为 0.42000 图片准确率为 0.04000 >>> loss 0.0001388737
第19990次训练 >>>
[训练集] 字符准确率为 0.36000 图片准确率为 0.01000 >>> loss 0.0000536628
[验证集] 字符准确率为 0.34750 图片准确率为 0.00000 >>> loss 0.0000536628
第20000次训练 >>>
[训练集] 字符准确率为 0.36500 图片准确率为 0.02000 >>> loss 0.0000577325
[验证集] 字符准确率为 0.41000 图片准确率为 0.03000 >>> loss 0.0000577325
修正为即可:
accuracy = tf.reduce_mean(tf.reduce_min(tf.cast(correct_pred, tf.float32), axis=1))
我已经提了pull request,作者有空可以合下代码
基础环境:
Ubuntu 16.04,采用pip了安装tensorflow
起因:
训练模型时意外遭遇强制关机,重新开机后运行train_model_v2.py,无法开始训练,显示“Killed”然后就停止
做过的尝试:
完整输出如下:
ubuntu@VM-118-117-ubuntu:~/tensorflow$python3 train_model_v2.py
-->图片尺寸: 60 X 160
-->验证码长度: 4
-->验证码共10类 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
-->使用测试集为 ./sample/train/
-->使验证集为 ./sample/test/
>>> Start model test
>>> input batch images shape: (100, 9600)
>>> input batch labels shape: (100, 40)
>>> input x: Tensor("Reshape:0", shape=(?, 60, 160, 1), dtype=float32)
>>> convolution 3: (?, 8, 20, 128)
>>> input batch predict shape: (?, 40)
>>> End model test
2019-02-23 21:34:13.487696: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-02-23 21:34:13.654589: W tensorflow/core/framework/allocator.cc:122] Allocation of 83886080 exceeds 10% of system memory.
2019-02-23 21:34:13.700510: W tensorflow/core/framework/allocator.cc:122] Allocation of 83886080 exceeds 10% of system memory.
2019-02-23 21:34:13.742455: W tensorflow/core/framework/allocator.cc:122] Allocation of 83886080 exceeds 10% of system memory.
2019-02-23 21:34:13.770453: W tensorflow/core/framework/allocator.cc:122] Allocation of 83886080 exceeds 10% of system memory.
2019-02-23 21:34:13.817177: W tensorflow/core/framework/allocator.cc:122] Allocation of 83886080 exceeds 10% of system memory.
Killed
ubuntu@VM-118-117-ubuntu:~/tensorflow$
原始数据集可以存放在./sample/origin目录中
为了便于处理,图片最好以2e8j_17322d3d4226f0b5c5a71d797d2ba7f7.jpg格式命名(标签_序列号.后缀)
17322d3d4226f0b5c5a71d797d2ba7f7 正好32个字符,是验证码图片的md5值吗?
新手一枚,在看到 “2e8j_17322d3d4226f0b5c5a71d797d2ba7f7.jpg格式命名(标签_序列号.后缀)”这里时产生疑问,标签号是图片里的内容,序列号是什么,谢谢
你好,我这边用了10w张生成的验证码训练。使用GPU,大概在一小时左右把训练集正确率训练到了百分百,但是验证集集这里的准确率还在40-50%左右。途中遇到了几个问题:
1.训练的时候,每3000轮就会停下,需要手动等3000轮完成再运行。这次训练了接近几万轮,基本都是每3000轮就要自己动一下,能不能一下直接训练完成。
2.在数字,小写字母,大写字母都存在的情况下,使用单单1000张验证码完全不能起到训练泛模型的作用,所以我想能不能自己把训练集跟验证集调整为一样,然后只对这一千字进行训练识别,虽然这样只能作用于这一千张验证码,但是我想试一下。
3.如果想达到95%以上的正确率,是否千万张图片是必须的。
4.我在readme跟别的issues都看到你说了:增加负样本训练来提升准确率,请问这个需要怎么实现。
[训练集] 字符准确率为 0.98750 图片准确率为 0.95000 >>> loss 0.0152852684
[验证集] 字符准确率为 0.77000 图片准确率为 0.35000 >>> loss 0.0152852684
File "E:\anaconda\lib\site-packages\tensorflow\python\training\saver.py", line 1312, in restore
err, "a mismatch between the current graph and the graph")
InvalidArgumentError: Restoring from checkpoint failed. This is most likely due to a mismatch between the current graph and the graph from the checkpoint. Please ensure that you have not altered the graph expected based on the checkpoint. Original error:
Assign requires shapes of both tensors to match. lhs shape= [13312,1024] rhs shape= [23040,1024]
[[node save/Assign_9 (defined at C:/Users/1/.spyder-py3/captcha/test_batch.py:161) ]]
应该是conf/captcha_config.json而不是conf/sample_config.json
市面上的英数4位验证码有好多种,我训练其中一种之后,用很相似的另一种验证码(宽高一样)去识别,准确率很低诶,有没有方案去解决啊,大侠
我看到验证码实例里面有个中文验证码,请问可以识别中文字符吗?
生成样本得算法怎么样,生成得验证码训练后能应付网上得那些验证码吗
建议打开训练文件的时候,校验一下文件的后缀名;
mac环境有时会有
.DStore
的隐藏文件
问题1 这边想要识别两种验证码 但是在recognize_api文件中创建两个Recognizer对象会报错
ValueError: Variable wc1 already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at: 网上的答案和本项目中的环境不太一致,不能够理解
问题2 recognize_api批量调用后 内存会固定上涨 原因是调用 tf.argmax() self.sess.run() 两方法多出来的内存 不能够正常回收,不知如何解决 我的解决办法:隔一段时间新建Recognizer对象。
不知是否有正确的办法解决此问题
Mac OS 10.13.4
python3.6
cat ~/.matplotlib/matplotlibrc
backend: TkAgg
sample_conf.image_width = 200
sample_conf.image_height = 50
sample_conf.max_captcha = 5
sample_conf.remote_url = "https://www.epubit.com/kaptcha.jpg?v=0.24931664260119102"
train 149
test 7
-->使用测试集为 ./sample/train/
Start model test
0:100
Traceback (most recent call last):
File "train_model.py", line 251, in
main()
File "train_model.py", line 245, in main
tm = TrainModel(train_image_dir, char_set, model_save_dir)
File "train_model.py", line 56, in init
batch_x, batch_y = self.get_batch(0, size=100)
File "train_model.py", line 120, in get_batch
batch_y[i, :] = self.text2vec(label) # 生成 oneHot
File "train_model.py", line 100, in text2vec
idx = i * self.char_set_len + self.char_set.index(ch)
ValueError: ' ' is not in list
结果:训练集和验证集正确率相差太远是为什么,log如下:)
第10次训练 >>> [训练集] 准确率为 0.9674999713897705 >>> loss 0.01326522696763277
>>> [验证集] 准确率为 0.17000000178813934 >>> loss 0.01326522696763277
第20次训练 >>> [训练集] 准确率为 1.0 >>> loss 0.005544836632907391
>>> [验证集] 准确率为 0.23000000417232513 >>> loss 0.005544836632907391
第30次训练 >>> [训练集] 准确率为 0.9375 >>> loss 0.0032186058815568686
>>> [验证集] 准确率为 0.19249999523162842 >>> loss 0.0032186058815568686
步骤:
(1.训练集的图片原来有1000张,开始使用train_model.py进行训练集识别,7000多次训练 准确率依然在15%左右转动,所以人为停止了训练,此过程从未进行过test_batch.py验证测试集;
2. 将训练集图片减少到600张,使用train_model2.py开始训练,就出现了log中所示。PS:进行第二步时,第一步骤产生的模型文件未删除)
请原谅我的不礼貌,有个不情之请,不知道作者是否可以写一个支持多GPU的版本!感谢。
10万python验证码,训练500次,准确率0.02,是否有问题?
……
第1500次训练 >>>
[训练集] 字符准确率为 0.50500 图片准确率为 0.28000 >>> loss 0.0003628575
[验证集] 字符准确率为 0.38000 图片准确率为 0.00000 >>> loss 0.0003628575
2019-03-15 18:19:42.964549: W tensorflow/core/framework/op_kernel.cc:1401] OP_REQUIRES failed at save_restore_v2_ops.cc:137 : Failed precondition: Failed to rename: ./model/.data-00000-of-00001.tempstate1615166308275179972 to: ./model/.data-00000-of-00001 : ��һ����������ʹ�ô��ļ������������ʡ�
; Broken pipe
环境:启动了两个api server,并且使用nginx进行了负载均衡,
现象:用jmeter模拟接口http://127.0.0.1:6000/b 上传图片到Webserver时(jmeter只启动一个线程),发现
经常长时间的未上传到服务器;
jmeter运行20分钟才上传50次左右的请求,这是什么原因老是卡在上传过程呢?
Line 182 in 9461e63
训练是会报这个错Not found: Unsuccessful TensorSliceReader constructor: Failed to find any matching for ./model/,请问有人知道什么问题吗?
你好,我用train_model_v2.py训练模型时出现过拟合,训练准确率100%但是测试准确率一直80%浮动,如何才能提高测试准确率呢?请指教。
这训练集大概要多少?手动打了100张貌似什么效果都没有 目前还想不到如何生成验证码
是默认就使用GPU训练,还是要自己指定啊
自己生成图片训练,acc 一直是0.1左右,不知道问题出在哪了,是不是数据的原因?
第160次训练 >>>
[训练集] 字符准确率为 0.10000 图片准确率为 0.00000 >>> loss 0.1013903320
[验证集] 字符准确率为 0.10750 图片准确率为 0.00000 >>> loss 0.1013903320
第170次训练 >>>
[训练集] 字符准确率为 0.12750 图片准确率为 0.00000 >>> loss 0.1000958011
[验证集] 字符准确率为 0.08500 图片准确率为 0.00000 >>> loss 0.1000958011
第180次训练 >>>
[训练集] 字符准确率为 0.12750 图片准确率为 0.00000 >>> loss 0.0998161957
[验证集] 字符准确率为 0.11250 图片准确率为 0.00000 >>> loss 0.0998161957
第190次训练 >>>
[训练集] 字符准确率为 0.12750 图片准确率为 0.00000 >>> loss 0.0985096842
[验证集] 字符准确率为 0.10750 图片准确率为 0.00000 >>> loss 0.0985096842
第200次训练 >>>
[训练集] 字符准确率为 0.10000 图片准确率为 0.00000 >>> loss 0.0990609303
[验证集] 字符准确率为 0.08000 图片准确率为 0.00000 >>> loss 0.0990609303
第210次训练 >>>
[训练集] 字符准确率为 0.13000 图片准确率为 0.00000 >>> loss 0.1007201374
[验证集] 字符准确率为 0.07250 图片准确率为 0.00000 >>> loss 0.1007201374
第220次训练 >>>
[训练集] 字符准确率为 0.13750 图片准确率为 0.00000 >>> loss 0.0987524837
[验证集] 字符准确率为 0.10250 图片准确率为 0.00000 >>> loss 0.0987524837
第230次训练 >>>
[训练集] 字符准确率为 0.10000 图片准确率为 0.00000 >>> loss 0.0986539647
[验证集] 字符准确率为 0.06500 图片准确率为 0.00000 >>> loss 0.0986539647
第240次训练 >>>
[训练集] 字符准确率为 0.10750 图片准确率为 0.00000 >>> loss 0.0977340937
[验证集] 字符准确率为 0.08750 图片准确率为 0.00000 >>> loss 0.0977340937
第250次训练 >>>
[训练集] 字符准确率为 0.12500 图片准确率为 0.00000 >>> loss 0.0980810747
[验证集] 字符准确率为 0.10250 图片准确率为 0.00000 >>> loss 0.0980810747
第260次训练 >>>
[训练集] 字符准确率为 0.10000 图片准确率为 0.00000 >>> loss 0.0975745544
[验证集] 字符准确率为 0.05250 图片准确率为 0.00000 >>> loss 0.0975745544
第270次训练 >>>
[训练集] 字符准确率为 0.12750 图片准确率为 0.00000 >>> loss 0.0960663259
[验证集] 字符准确率为 0.10750 图片准确率为 0.00000 >>> loss 0.0960663259
root_dir = "../sample/python_captcha/" # 图片储存路径 image_suffix = "png" # 图片储存后缀 characters = "0123456789" # 图片上显示的字符集 # characters = "0123456789abcdefghijklmnopqrstuvwxyz" count = 1000 # 生成多少张样本 char_count = 4 # 图片上的字符数量
# 验证码字符相关参数 sample_conf.char_set = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
图片和干净,但是训练了3000step,
字符准确率为 0.96749999344348907 图片准确率为 0
验证集图片准确率20%左右,训练集准确率99%左右,是否哪里要优化?
刚跑了2000张验证码,验证码网址为http://beian.miit.gov.cn/icp/publish/query/icpMemoInfo_showPage.action#
验证集准确率有点跑不上去了。
由于不太懂python,但是代码成功跑起来了 ,刚开始识别图片响应时间在ms级别,然后一直缓慢下来,大概运行到2万次请求,响应时间到了2s左右
还是标签可以随便写的。
你好,测试了一下中文识别。3600个字,10W张标注好的单字图片。学习很快,99%停止。测试时基本上50%的识别率,请问这个该如何提高识别率呢。
验证码长度不确定,该怎么设置呢
显卡1050ti . 在跑模型的时候,GPU利用率很低 基本在10%以下,但是显存用了3G. 训练大概5W张图片吧.
以下为日志...感觉并没有比CPU快多少,起码,看不出来1小时能够跑完,不知道是为什么?验证码是使用你项目中自带的验证码生成的.其他代码没有改动.我还需要提供其他的信息吗?
我想问,为什么GPU利用率这么低还有训练速度也不高,正常吗?
F:\ANACONDA\python.exe F:/python/platform/cnn_captcha/train_model.py
-->图片尺寸: 60 X 100
-->验证码长度: 5
-->验证码共36类 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
-->使用测试集为 ./data/train/
Start model test
input batch images shape: (100, 6000)
input batch labels shape: (100, 180)
input x: Tensor("Reshape:0", shape=(?, 60, 100, 1), dtype=float32)
convolution 3: (?, 8, 13, 128)
input batch predict shape: (?, 180)
End model test
2019-05-03 22:46:14.018690: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.018859: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE2 instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.019010: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.019196: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.019349: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.019501: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.019653: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.019806: W c:\l\work\tensorflow-1.1.0\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
2019-05-03 22:46:14.416401: I c:\l\work\tensorflow-1.1.0\tensorflow\core\common_runtime\gpu\gpu_device.cc:887] Found device 0 with properties:
name: GeForce GTX 1050 Ti
major: 6 minor: 1 memoryClockRate (GHz) 1.62
pciBusID 0000:01:00.0
Total memory: 4.00GiB
Free memory: 3.30GiB
2019-05-03 22:46:14.416596: I c:\l\work\tensorflow-1.1.0\tensorflow\core\common_runtime\gpu\gpu_device.cc:908] DMA: 0
2019-05-03 22:46:14.416841: I c:\l\work\tensorflow-1.1.0\tensorflow\core\common_runtime\gpu\gpu_device.cc:918] 0: Y
2019-05-03 22:46:14.416942: I c:\l\work\tensorflow-1.1.0\tensorflow\core\common_runtime\gpu\gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050 Ti, pci bus id: 0000:01:00.0)
第10次训练 >>> 字符准确率为 0.030000001192092896 图片准确率为 0.0 >>> loss 0.159394308924675
第20次训练 >>> 字符准确率为 0.07000000029802322 图片准确率为 0.0 >>> loss 0.16239339113235474
第30次训练 >>> 字符准确率为 0.06599999964237213 图片准确率为 0.0 >>> loss 0.14425653219223022
第40次训练 >>> 字符准确率为 0.04800000414252281 图片准确率为 0.0 >>> loss 0.1394306719303131
第50次训练 >>> 字符准确率为 0.056000005453825 图片准确率为 0.0 >>> loss 0.13513873517513275
第60次训练 >>> 字符准确率为 0.04200000315904617 图片准确率为 0.0 >>> loss 0.1354529857635498
第70次训练 >>> 字符准确率为 0.07000000029802322 图片准确率为 0.0 >>> loss 0.1325652152299881
第80次训练 >>> 字符准确率为 0.06600000709295273 图片准确率为 0.0 >>> loss 0.1318882256746292
第90次训练 >>> 字符准确率为 0.07000000774860382 图片准确率为 0.0 >>> loss 0.13114270567893982
第100次训练 >>> 字符准确率为 0.046000003814697266 图片准确率为 0.0 >>> loss 0.1314479410648346
第110次训练 >>> 字符准确率为 0.0560000017285347 图片准确率为 0.0 >>> loss 0.12947437167167664
第120次训练 >>> 字符准确率为 0.05400000512599945 图片准确率为 0.0 >>> loss 0.1295069456100464
第130次训练 >>> 字符准确率为 0.04800000414252281 图片准确率为 0.0 >>> loss 0.12882718443870544
第140次训练 >>> 字符准确率为 0.04000000283122063 图片准确率为 0.0 >>> loss 0.12955181300640106
第150次训练 >>> 字符准确率为 0.06400000303983688 图片准确率为 0.0 >>> loss 0.12943406403064728
第160次训练 >>> 字符准确率为 0.06400000303983688 图片准确率为 0.0 >>> loss 0.12891033291816711
请问一下楼主,这种类型的验证码是用怎样的代码生成的?谢谢
最近在做简单的验证码训练,模型训练好了,测试的时候文件老出错,
借鉴一下您的demo,
convolution 1: Tensor("dropout/mul:0", shape=(?, 27, 65, 32), dtype=float32)
Backend TkAgg is interactive backend. Turning interactive mode on.
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.2.4\helpers\pydev\pydevd.py", line 1668, in
main()
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.2.4\helpers\pydev\pydevd.py", line 1662, in main
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.2.4\helpers\pydev\pydevd.py", line 1072, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm Community Edition 2017.2.4\helpers\pydev_pydev_imps_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "D:/Project/cnn_captcha-master/train_model.py", line 282, in
main()
File "D:/Project/cnn_captcha-master/train_model.py", line 277, in main
tm.train_cnn() # 开始训练模型
File "D:/Project/cnn_captcha-master/train_model.py", line 196, in train_cnn
y_predict = self.model()
File "D:/Project/cnn_captcha-master/train_model.py", line 157, in model
print(">>> convolution 1: ", conv1.shape)
AttributeError: 'Tensor' object has no attribute 'shape'
如果训练集有一万张的话,训练一次是一万张都训练吗,还是随机抽取多少张训练呀,验证的时候是什么情况呢,希望大佬不吝赐教
字符准确率:
acc_char = sess.run(accuracy_char_count, feed_dict={self.X: batch_x_verify, self.Y: batch_y_verify, self.keep_prob: 1.})
图片准确率:
acc_image = sess.run(accuracy_image_count, feed_dict={self.X: batch_x_verify, self.Y: batch_y_verify, self.keep_prob: 1.})
啥是字符准确率?字符准确率和图片准确率的区别是什么?
你好,我想请教一下,应该怎么增加负样本,如果我只训练数字,那么负样本是没有数字的背景还是什么?有没有相关的demo呀
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.