import numpy as npimport tensorflow as tfimport cv2import osimport randomimport timeimport structimport requestsfrom Convert import Convertimport reimport socket# numbernumber = ['1', '2', '3', 'b', 'c', 'm', 'n', 'v', 'x', 'z']# 图像大小IMAGE_HEIGHT = 22 # 80IMAGE_WIDTH = 62 # 160MAX_CAPTCHA = 4char_set = numberCHAR_SET_LEN = len(char_set) #10model_path = "model/"URL_PATH = "http://XXXXXXXXXXXXXXXXXXXXX/jsxsd/"X = tf.placeholder(tf.float32, [None, IMAGE_HEIGHT * IMAGE_WIDTH])Y = tf.placeholder(tf.float32, [None, MAX_CAPTCHA * CHAR_SET_LEN])keep_prob = tf.placeholder(tf.float32) # dropout# 定义CNNdef crack_captcha_cnn(w_alpha=0.01, b_alpha=0.1):x = tf.reshape(X, shape=[-1, IMAGE_HEIGHT, IMAGE_WIDTH, 1])# 3 conv layerw_c1 = tf.Variable(w_alpha * tf.random_normal([3, 3, 1, 32]))b_c1 = tf.Variable(b_alpha * tf.random_normal([32]))conv1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, w_c1, strides=[1, 1, 1, 1], padding='SAME'), b_c1))conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')conv1 = tf.nn.dropout(conv1, keep_prob)w_c2 = tf.Variable(w_alpha * tf.random_normal([3, 3, 32, 64]))b_c2 = tf.Variable(b_alpha * tf.random_normal([64]))conv2 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(conv1, w_c2, strides=[1, 1, 1, 1], padding='SAME'), b_c2))conv2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')conv2 = tf.nn.dropout(conv2, keep_prob)w_c3 = tf.Variable(w_alpha * tf.random_normal([3, 3, 64, 64]))b_c3 = tf.Variable(b_alpha * tf.random_normal([64]))conv3 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(conv2, w_c3, strides=[1, 1, 1, 1], padding='SAME'), b_c3))conv3 = tf.nn.max_pool(conv3, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')conv3 = tf.nn.dropout(conv3, keep_prob)# Fully connected layerw_d = tf.Variable(w_alpha * tf.random_normal([3 * 8 * 64, 1024]))b_d = tf.Variable(b_alpha * tf.random_normal([1024]))dense = tf.reshape(conv3, [-1, w_d.get_shape().as_list()[0]])dense = tf.nn.relu(tf.add(tf.matmul(dense, w_d), b_d))dense = tf.nn.dropout(dense, keep_prob)w_out = tf.Variable(w_alpha * tf.random_normal([1024, MAX_CAPTCHA * CHAR_SET_LEN]))b_out = tf.Variable(b_alpha * tf.random_normal([MAX_CAPTCHA * CHAR_SET_LEN]))out = tf.add(tf.matmul(dense, w_out), b_out)# out = tf.nn.softmax(out)return out# 向量转回文本def vec2text(vec):char_pos = vec.nonzero()[0]text = []for i, c in enumerate(char_pos):text.append(char_set[c % 10])return "".join(text)def predict_captcha(captcha_image):output = crack_captcha_cnn()saver = tf.train.Saver()with tf.Session() as sess:saver.restore(sess, tf.train.latest_checkpoint(model_path))predict = tf.argmax(tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN]), 2)text_list = sess.run(predict, feed_dict={X: [captcha_image], keep_prob: 1})text = text_list[0].tolist()vector = np.zeros(MAX_CAPTCHA * CHAR_SET_LEN)i = 0for n in text:vector[i * CHAR_SET_LEN + n] = 1i += 1return vec2text(vector)if __name__ == '__main__':output = crack_captcha_cnn()saver = tf.train.Saver()with tf.Session() as sess:saver.restore(sess, tf.train.latest_checkpoint(model_path))predict = tf.argmax(tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN]), 2)cvt = Convert()session = requests.Session()count = 1acceptCount = 1headers = {}while True:try:IP = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))headers['X-FORWARDED-FOR'] = IPheaders['CLIENT-IP'] = IPreq = session.get(URL_PATH,headers = headers)req = session.get(URL_PATH + "verifycode.servlet",headers = headers)img = cvt.run(req.content)cv2.imwrite("vvvv.jpg",img)image = np.float32(img)image = image.flatten() / 255text_list = sess.run(predict, feed_dict={X: [image], keep_prob: 1})text = text_list[0].tolist()vector = np.zeros(MAX_CAPTCHA * CHAR_SET_LEN)i = 0for n in text:vector[i * CHAR_SET_LEN + n] = 1i += 1predict_text= vec2text(vector)# predict_text = input()print(predict_text)params={"encoded": "MjAyMDE2MTIyMzU=%%%MjAyMDE2MTIyMzU=","RANDOMCODE": predict_text}req = session.post(URL_PATH + "xk/LoginToXk",data=params,headers = headers)if not re.search("验证码错误", req.text) :print("Load",acceptCount,count,acceptCount/count)acceptCount += 1cv2.imwrite("TrainImg/%s.jpg" % (predict_text),img)count += 1time.sleep(0.3) #稍微延时一下except Exception as e:print(e)pass
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。