Coder Social home page Coder Social logo

captcha_check's Introduction

captcha_check

author: DYBOY

项目简介:

利用 captcha 库生成的图形验证码,并对其进行内容识别。首先通过对验证码图片进行一个“灰度”处理,使之变为灰度图,灰度图有利于去除杂色,便于提高模型精度,提升训练速度。训练过程中,使用了三层CNN,最终的准确率最高可达到98.75%

运行环境:

USAGE:

  • 训练模型:python3 model_train.py
  • 测试模型:python3 model_test.py

效果:

预测

项目介绍文章地址:

训练过程记录:

[root@VM_96_17_centos captcha]# /usr/local/bin/python3.6 model_train.py 
2018-11-26 09:29:57.038117: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2018-11-26 09:29:57.408852: W tensorflow/core/framework/allocator.cc:122] Allocation of 41943040 exceeds 10% of system memory.
2018-11-26 09:29:57.451278: W tensorflow/core/framework/allocator.cc:122] Allocation of 41943040 exceeds 10% of system memory.
2018-11-26 09:29:57.498523: W tensorflow/core/framework/allocator.cc:122] Allocation of 41943040 exceeds 10% of system memory.
2018-11-26 09:29:57.525206: W tensorflow/core/framework/allocator.cc:122] Allocation of 41943040 exceeds 10% of system memory.
2018-11-26 09:29:57.566340: W tensorflow/core/framework/allocator.cc:122] Allocation of 41943040 exceeds 10% of system memory.
Mon Nov 26 09:30:03 2018  step: 0  accuracy: 0.1
Mon Nov 26 09:33:47 2018  step: 100  accuracy: 0.1175
Mon Nov 26 09:37:29 2018  step: 200  accuracy: 0.1
Mon Nov 26 09:41:11 2018  step: 300  accuracy: 0.095
Mon Nov 26 09:44:53 2018  step: 400  accuracy: 0.1
Mon Nov 26 09:48:32 2018  step: 500  accuracy: 0.105
Mon Nov 26 09:52:11 2018  step: 600  accuracy: 0.0575
Mon Nov 26 09:55:50 2018  step: 700  accuracy: 0.09
Mon Nov 26 09:59:30 2018  step: 800  accuracy: 0.105
Mon Nov 26 10:03:10 2018  step: 900  accuracy: 0.085
Mon Nov 26 10:06:50 2018  step: 1000  accuracy: 0.0875
Mon Nov 26 10:10:31 2018  step: 1100  accuracy: 0.09
Mon Nov 26 10:14:11 2018  step: 1200  accuracy: 0.08
Mon Nov 26 10:17:51 2018  step: 1300  accuracy: 0.0825
Mon Nov 26 10:21:31 2018  step: 1400  accuracy: 0.135
Mon Nov 26 10:25:11 2018  step: 1500  accuracy: 0.18
Mon Nov 26 10:28:51 2018  step: 1600  accuracy: 0.31
Mon Nov 26 10:32:31 2018  step: 1700  accuracy: 0.4225
Mon Nov 26 10:36:09 2018  step: 1800  accuracy: 0.4625
Mon Nov 26 10:39:49 2018  step: 1900  accuracy: 0.4925
Mon Nov 26 10:43:28 2018  step: 2000  accuracy: 0.5475
Mon Nov 26 10:47:07 2018  step: 2100  accuracy: 0.58
Mon Nov 26 10:50:46 2018  step: 2200  accuracy: 0.6725
Mon Nov 26 10:54:25 2018  step: 2300  accuracy: 0.69
Mon Nov 26 10:58:06 2018  step: 2400  accuracy: 0.735
Mon Nov 26 11:01:46 2018  step: 2500  accuracy: 0.735
Mon Nov 26 11:05:27 2018  step: 2600  accuracy: 0.745
Mon Nov 26 11:09:07 2018  step: 2700  accuracy: 0.825
Mon Nov 26 11:12:46 2018  step: 2800  accuracy: 0.7675
Mon Nov 26 11:16:26 2018  step: 2900  accuracy: 0.8425
Mon Nov 26 11:20:05 2018  step: 3000  accuracy: 0.825
Mon Nov 26 11:23:43 2018  step: 3100  accuracy: 0.855
Mon Nov 26 11:27:23 2018  step: 3200  accuracy: 0.8425
Mon Nov 26 11:31:02 2018  step: 3300  accuracy: 0.8375
Mon Nov 26 11:34:41 2018  step: 3400  accuracy: 0.8575
Mon Nov 26 11:38:20 2018  step: 3500  accuracy: 0.8475
Mon Nov 26 11:41:59 2018  step: 3600  accuracy: 0.8775
Mon Nov 26 11:45:38 2018  step: 3700  accuracy: 0.8825
Mon Nov 26 11:49:17 2018  step: 3800  accuracy: 0.9025
Mon Nov 26 11:52:57 2018  step: 3900  accuracy: 0.8625
Mon Nov 26 11:56:37 2018  step: 4000  accuracy: 0.92
Mon Nov 26 12:00:17 2018  step: 4100  accuracy: 0.8925
Mon Nov 26 12:03:56 2018  step: 4200  accuracy: 0.9075
Mon Nov 26 12:07:35 2018  step: 4300  accuracy: 0.91
Mon Nov 26 12:11:15 2018  step: 4400  accuracy: 0.92
Mon Nov 26 12:14:54 2018  step: 4500  accuracy: 0.915
Mon Nov 26 12:18:36 2018  step: 4600  accuracy: 0.9275
Mon Nov 26 12:22:16 2018  step: 4700  accuracy: 0.9375
Mon Nov 26 12:25:56 2018  step: 4800  accuracy: 0.905
Mon Nov 26 12:29:36 2018  step: 4900  accuracy: 0.915
Mon Nov 26 12:33:17 2018  step: 5000  accuracy: 0.945
Mon Nov 26 12:36:56 2018  step: 5100  accuracy: 0.9475
Mon Nov 26 12:40:35 2018  step: 5200  accuracy: 0.9375
Mon Nov 26 12:44:15 2018  step: 5300  accuracy: 0.9675
Mon Nov 26 12:47:57 2018  step: 5400  accuracy: 0.945
Mon Nov 26 12:51:37 2018  step: 5500  accuracy: 0.96
Mon Nov 26 12:55:16 2018  step: 5600  accuracy: 0.93
Mon Nov 26 12:58:56 2018  step: 5700  accuracy: 0.9
Mon Nov 26 13:02:36 2018  step: 5800  accuracy: 0.9425
Mon Nov 26 13:06:15 2018  step: 5900  accuracy: 0.9275
Mon Nov 26 13:09:54 2018  step: 6000  accuracy: 0.9225
Mon Nov 26 13:13:34 2018  step: 6100  accuracy: 0.945
Mon Nov 26 13:17:13 2018  step: 6200  accuracy: 0.945
Mon Nov 26 13:20:52 2018  step: 6300  accuracy: 0.9475
Mon Nov 26 13:24:32 2018  step: 6400  accuracy: 0.9675
Mon Nov 26 13:28:13 2018  step: 6500  accuracy: 0.95
Mon Nov 26 13:31:51 2018  step: 6600  accuracy: 0.9375
Mon Nov 26 13:35:30 2018  step: 6700  accuracy: 0.9475
Mon Nov 26 13:39:09 2018  step: 6800  accuracy: 0.95
Mon Nov 26 13:42:49 2018  step: 6900  accuracy: 0.96
Mon Nov 26 13:46:29 2018  step: 7000  accuracy: 0.955
Mon Nov 26 13:50:09 2018  step: 7100  accuracy: 0.9425
Mon Nov 26 13:53:48 2018  step: 7200  accuracy: 0.9625
Mon Nov 26 13:57:27 2018  step: 7300  accuracy: 0.94
Mon Nov 26 14:01:10 2018  step: 7400  accuracy: 0.97
Mon Nov 26 14:04:52 2018  step: 7500  accuracy: 0.9675
Mon Nov 26 14:08:31 2018  step: 7600  accuracy: 0.9575
Mon Nov 26 14:12:11 2018  step: 7700  accuracy: 0.96
Mon Nov 26 14:15:51 2018  step: 7800  accuracy: 0.9425
Mon Nov 26 14:19:31 2018  step: 7900  accuracy: 0.965
Mon Nov 26 14:23:11 2018  step: 8000  accuracy: 0.9725
Mon Nov 26 14:26:51 2018  step: 8100  accuracy: 0.9825
Mon Nov 26 14:30:32 2018  step: 8200  accuracy: 0.975
Mon Nov 26 14:34:11 2018  step: 8300  accuracy: 0.9625
Mon Nov 26 14:37:49 2018  step: 8400  accuracy: 0.9775
Mon Nov 26 14:41:29 2018  step: 8500  accuracy: 0.955
Mon Nov 26 14:45:09 2018  step: 8600  accuracy: 0.9675
Mon Nov 26 14:48:47 2018  step: 8700  accuracy: 0.96
Mon Nov 26 14:52:27 2018  step: 8800  accuracy: 0.9625
Mon Nov 26 14:56:06 2018  step: 8900  accuracy: 0.9525
Mon Nov 26 14:59:45 2018  step: 9000  accuracy: 0.9575
Mon Nov 26 15:03:24 2018  step: 9100  accuracy: 0.9675
Mon Nov 26 15:07:02 2018  step: 9200  accuracy: 0.9725
Mon Nov 26 15:10:41 2018  step: 9300  accuracy: 0.9575
Mon Nov 26 15:14:19 2018  step: 9400  accuracy: 0.97
Mon Nov 26 15:17:57 2018  step: 9500  accuracy: 0.9775
Mon Nov 26 15:21:36 2018  step: 9600  accuracy: 0.9775
Mon Nov 26 15:25:14 2018  step: 9700  accuracy: 0.97
Mon Nov 26 15:28:53 2018  step: 9800  accuracy: 0.98
Mon Nov 26 15:32:32 2018  step: 9900  accuracy: 0.9825
Mon Nov 26 15:36:10 2018  step: 10000  accuracy: 0.9775
Mon Nov 26 15:39:48 2018  step: 10100  accuracy: 0.97
Mon Nov 26 15:43:26 2018  step: 10200  accuracy: 0.9575
Mon Nov 26 15:47:05 2018  step: 10300  accuracy: 0.9625
Mon Nov 26 15:50:42 2018  step: 10400  accuracy: 0.9675
Mon Nov 26 15:54:21 2018  step: 10500  accuracy: 0.9725
Mon Nov 26 15:57:59 2018  step: 10600  accuracy: 0.9825
Mon Nov 26 16:01:39 2018  step: 10700  accuracy: 0.9825
Mon Nov 26 16:05:18 2018  step: 10800  accuracy: 0.985
Mon Nov 26 16:08:57 2018  step: 10900  accuracy: 0.9625
Mon Nov 26 16:12:38 2018  step: 11000  accuracy: 0.965
Mon Nov 26 16:16:18 2018  step: 11100  accuracy: 0.97
Mon Nov 26 16:19:58 2018  step: 11200  accuracy: 0.9875
Mon Nov 26 16:23:37 2018  step: 11300  accuracy: 0.98
Mon Nov 26 16:27:17 2018  step: 11400  accuracy: 0.9625
Mon Nov 26 16:30:58 2018  step: 11500  accuracy: 0.975
Mon Nov 26 16:34:39 2018  step: 11600  accuracy: 0.985
Mon Nov 26 16:38:18 2018  step: 11700  accuracy: 0.9775
Mon Nov 26 16:41:58 2018  step: 11800  accuracy: 0.9825
Mon Nov 26 16:45:38 2018  step: 11900  accuracy: 0.98
Mon Nov 26 16:49:18 2018  step: 12000  accuracy: 0.9825
Mon Nov 26 16:52:57 2018  step: 12100  accuracy: 0.985
Mon Nov 26 16:56:36 2018  step: 12200  accuracy: 0.98
Mon Nov 26 17:00:15 2018  step: 12300  accuracy: 0.9725
Mon Nov 26 17:03:54 2018  step: 12400  accuracy: 0.955
Mon Nov 26 17:07:35 2018  step: 12500  accuracy: 0.97
Mon Nov 26 17:11:14 2018  step: 12600  accuracy: 0.9775
Mon Nov 26 17:14:53 2018  step: 12700  accuracy: 0.985
...

captcha_check's People

Contributors

dyboy2017 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar AQQ avatar  avatar  avatar zsfyyds avatar  avatar  avatar Covid19sp avatar Komomon avatar  avatar  avatar  avatar liqiang0330 avatar dream avatar muyeliuyun avatar imsotiredoflovesong avatar  avatar JimmyMo avatar MikeLuck avatar  avatar jeffrey avatar adminsun avatar  avatar  avatar pistachio avatar wxiaowar avatar ZhouZZ avatar Ben Du avatar  avatar  avatar weihua avatar  avatar  avatar  avatar 姜伟 avatar len avatar  avatar  avatar  avatar 0w3 avatar 没咸鱼的梦想 avatar Y4er avatar

Watchers

James Cloos avatar

captcha_check's Issues

could not convert string to float

Traceback (most recent call last):
File "model_test.py", line 34, in
image = captcha2text('img/2uB3.jpg')
File "model_test.py", line 27, in captcha2text
vector_list = sess.run(predict, feed_dict={x: image_list, keep_prob: 1})
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 889, in run
run_metadata_ptr)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1089, in _run
np_val = np.asarray(subfeed_val, dtype=subfeed_dtype)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/numpy/core/numeric.py", line 501, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: could not convert string to float: 'img/2uB3.jpg'

我自己定义的图片路径 报错诶,不用gen_captcha_text_and_image生成的图片
image = captcha2text('img/2uB3.jpg')

[已解决]转换成pb模型输出层应该怎么写呢?

我遍历output_graph_def.node,打印每一个node的name,最后一个节点名字是init,但是使用pb模型的时候init层并没有数据,请问输出层应该怎没写呢?

转换脚本

# -*-coding: utf-8 -*-
"""
    参考自:
    @Project: tensorflow_models_nets
    @File   : convert_pb.py
    @Author : panjq
    @E-mail : [email protected]
    @Date   : 2018-08-29 17:46:50
    @info   :
    -通过传入 CKPT 模型的路径得到模型的图和变量数据
    -通过 import_meta_graph 导入模型中的图
    -通过 saver.restore 从模型中恢复图中各个变量的数据
    -通过 graph_util.convert_variables_to_constants 将模型持久化
"""

import tensorflow as tf
from tensorflow.python.framework import graph_util


def freeze_graph(input_checkpoint, output_graph):
    '''
    :param input_checkpoint:
    :param output_graph: PB模型保存路径
    :return:
    '''
    # checkpoint = tf.train.get_checkpoint_state(model_folder) #检查目录下ckpt文件状态是否可用
    # input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路径

    # 指定输出的节点名称,该节点名称必须是原模型中存在的节点
    output_node_names = ["init"]
    # output_node_names = [ "YoloV3/pred_sbbox/concat_2", "YoloV3/pred_mbbox/concat_2", "YoloV3/pred_lbbox/concat_2"]
    saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)

    with tf.Session() as sess:
        saver.restore(sess, input_checkpoint)  # 恢复图并得到数据
        output_graph_def = graph_util.convert_variables_to_constants(  # 模型持久化,将变量值固定
            sess=sess,
            input_graph_def=sess.graph_def,  # 等于:sess.graph_def
            output_node_names=output_node_names)  # 如果有多个输出节点,以逗号隔开

        # fix nodes
        for node in output_graph_def.node:
            if node.op == 'RefSwitch':
                node.op = 'Switch'
                for index in range(len(node.input)):
                    if 'moving_' in node.input[index]:
                        node.input[index] = node.input[index] + '/read'
            elif node.op == 'AssignSub':
                node.op = 'Sub'
                if 'use_locking' in node.attr: del node.attr['use_locking']
            elif node.op == 'AssignAdd':
                node.op = 'Add'
                if 'use_locking' in node.attr: del node.attr['use_locking']
            elif node.op == 'Assign':
                node.op = 'Identity'
                if 'use_locking' in node.attr: del node.attr['use_locking']
                if 'validate_shape' in node.attr: del node.attr['validate_shape']
                if len(node.input) == 2:
                    # input0: ref: Should be from a Variable node. May be uninitialized.
                    # input1: value: The value to be assigned to the variable.
                    node.input[0] = node.input[1]
                    del node.input[1]
        for node in output_graph_def.node:
            print(node.name)




        with tf.gfile.GFile(output_graph, "wb") as f:  # 保存模型
            f.write(output_graph_def.SerializeToString())  # 序列化输出
        print("%d ops in the final graph." % len(output_graph_def.node))  # 得到当前图有几个操作节点

        # for op in sess.graph.get_operations():
        #    print(op.name, op.values())


if __name__ == '__main__':
    # 输入ckpt模型路径
    input_checkpoint = 'model/captcha.model-0'
    # 输出pb模型的路径
    out_pb_path = "model/frozen_model.pb"
    # 调用freeze_graph将ckpt转为pb
    freeze_graph(input_checkpoint, out_pb_path)

调用脚本:

import tensorflow as tf
from tensorflow.python.platform import gfile

from captcha_gen import CAPTCHA_LIST, CAPTCHA_LEN
from util import get_next_batch

sess = tf.Session()
with gfile.FastGFile('model/frozen_model.pb', 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    sess.graph.as_default()
    tf.import_graph_def(graph_def, name='')  # 导入计算图

sess.run(tf.global_variables_initializer())


x = tf.placeholder(tf.float32, [None, 160 * 60])
y = tf.placeholder(tf.float32, [None, len(CAPTCHA_LIST) * CAPTCHA_LEN])
keep_prob = tf.placeholder(tf.float32)
batch_x, batch_y = get_next_batch(64)

op = sess.graph.get_tensor_by_name('init:0')

ret = sess.run(op, feed_dict={x: batch_x, y: batch_y, keep_prob: 1.0})
print(ret)

调用报错:

KeyError: "The name 'init:0' refers to a Tensor which does not exist. The operation, 'init', exists but only has 0 outputs."

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.