from PIL import Image

import requests

import re

splitter = re.compile(r'\d{30}')  # 分割二值化后的图片

# distance('11110000', '00000000')

# 比较两个字符串有多少位不同, 返回不同的位数

def distance(string1, string2):

d_str1 = len(string1)

d_str2 = len(string2)

d_arr = [[0] * d_str2 for i in range(d_str1)]

for i in range(d_str1):

for j in range(d_str2):

if string1[i] == string2[j]:

if i == 0 and j == 0:

d_arr[i][j] = 0

elif i != 0 and j == 0:

d_arr[i][j] = d_arr[i - 1][j]

elif i == 0 and j != 0:

d_arr[i][j] = d_arr[i][j - 1]

else:

d_arr[i][j] = d_arr[i - 1][j - 1]

else:

if i == 0 and j == 0:

d_arr[i][j] = 1

elif i != 0 and j == 0:

d_arr[i][j] = d_arr[i - 1][j] + 1

elif i == 0 and j != 0:

d_arr[i][j] = d_arr[i][j - 1] + 1

else:

d_arr[i][j] = min(d_arr[i][j - 1], d_arr[i - 1][j], d_arr[i - 1][j - 1]) + 1

current = max(d_arr[d_str1 - 1][d_str2 - 1], abs(d_str2 - d_str1))

return current

# 去除字符串里面连续的1

def no_one(string):

n_arr = splitter.findall(string)

n_arr = filter(lambda each_str: each_str != '111111111111111111111111111111', n_arr)

n_result = ''

for n_each in n_arr:

n_result += str(n_each)

return n_result

opener = requests.session()

res = opener.get('http://60.211.254.236:8402/Ajax/ValidCodeImg.ashx').content

with open('verify.gif', 'wb') as v:

v.write(res)

img = Image.open('verify.gif')

img = img.convert('L')

size = img.size

# img = img.point(table, '1')

img_arr = img.load()

# img.save('after.gif')

inc = 0

str1 = ''

str2 = ''

str3 = ''

cur_str = ''

for x in range(size[0]):

for y in range(size[1]):

if img_arr[x, y] > 210:

cur_str += '1'

else:

cur_str += '0'

# print(img_arr[i, j], end='')

# cur_str += str(img_arr[x, y])

inc += 1

if inc == 18:

str1 = cur_str

cur_str = ''

elif inc == 36:

str2 = cur_str

cur_str = ''

elif inc == 54:

str3 = cur_str

cur_str = ''

str1 = str1[:-60]

str2 = str2[:-60]

str3 = str3[:-60]

str1 = no_one(str1)

str2 = no_one(str2)

str3 = no_one(str3)

str1 = str1.strip('1')

str2 = str2.strip('1')

str3 = str3.strip('1')

with open('./dict/plus') as plus:

with open('./dict/minus') as minus:

p = plus.read()

m = minus.read()

is_add = 1 if distance(p, str2) < distance(m, str2) else 0

arr1 = []

arr3 = []

for each in range(1, 10):

with open('./dict/{}'.format(each)) as f:

ff = f.read()

arr1.append([each, distance(ff, str1)])

arr3.append([each, distance(ff, str3)])

arr1 = sorted(arr1, key=lambda item: item[1])

arr3 = sorted(arr3, key=lambda item: item[1])

result = arr1[0][0] + arr3[0][0] if is_add else arr1[0][0] - arr3[0][0]

print(result)

python discuz验证码_Python3简单验证码识别相关推荐

  1. python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤

    字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...

  2. 使用Python PIL库实现简单验证码的去噪处理

    想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图.将灰度图二值化和去除噪点三个基本过程.这里仅以比较简单的验证码为例, ...

  3. php ocr识别验证码,tesserocr 简单验证码自动识别

    简单文字验证码自动识别方法 前言 概述:OCR光学字符识别可以将验证码转换为电子文字,tesserocr是Python的一个OCR识别库,但是是对tesserect做的一层pythonAPI封装.我们 ...

  4. python 微信爬虫_python3简单实现微信爬虫

    使用ghost.py 通过搜搜 的微信搜索来爬取微信公共账号的信息 # -*- coding: utf-8 -*- import sys reload(sys) import datetime imp ...

  5. python抓取图片_Python3简单爬虫抓取网页图片

    现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...

  6. Python基于keras训练简单微笑识别

    文章目录 一.数据预处理 二.训练模型 创建模型 训练模型 训练结果 三.预测 效果 四.源代码 pretreatment.py train.py predict.py 一.数据预处理 实验数据来自g ...

  7. java识别验证码_Java使用test4j识别验证码

    Java使用test4j识别验证码 test4j的集成 此处使用了拷入test4j的项目文件集成到自己的项目中去. 1.去test4j官网下载test4j的zip文件(我下载的是3.4.8的版本); ...

  8. 基于Python的简单验证码识别

    原文链接:有图有真相 摘要:验证码在网络安全方面发挥着关键作用,验证码的主要目的是区分人类和计算机,用来防止自动化脚本对网站的一些恶意行为.目前绝大多数网站都利用验证码来阻止恶意脚本程序的入侵.验证码 ...

  9. 基于TensorFlow的简单验证码识别

    TensorFlow 可以用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 生成验证码 首先生成验证码,这里使用 Pyth ...

  10. eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

最新文章

  1. TCP: time wait bucket table overflow解决方法
  2. Struts2请求参数合法性校验机制
  3. document.getElementsByTagName()方法的返回值
  4. spring和spring_Spring交易可见性
  5. InfoPath Resource Sites
  6. python一行包含if else需要注意的点
  7. 中国移动锁定数据业务新战略
  8. CS224N笔记——反向传播
  9. 小迪安全课程笔记--01基础入门
  10. 软件开发生命周期及各阶段文档
  11. 【Spring练习】Spring+SpringMVC+JdbcTemplate简单练习用户管理
  12. DirectX9 SDK Samples(19) AntiAlias
  13. 《重构》——第二次阅读笔记。golang视角
  14. 易宝支付为二清机构放开通道,导致POS代理机构卷款跑路
  15. DELL r340服务器U盘安装Centos7
  16. 一个看漫画、看资讯、逛论坛、听歌的神器,务必吃下这颗安利!
  17. Javascript:公农历节日周年计算
  18. 文件上传,搞懂这8种场景就够了
  19. B端市场分析报告(一)
  20. 订阅号微信公众号历史文章爬虫php,2019.9月最新爬取微信公众号历史文章的办法...

热门文章

  1. 谷歌编译器收藏网站在哪打开
  2. Flutter学习 — 使用WebSockets
  3. L1-046 整除光棍 (20 分)—团体程序设计天梯赛
  4. 电子书下载:Beginning ASP.NET 2.0 and Databases
  5. php 学习编译扩展
  6. sql or 与and同时有时要注意
  7. java处理日期时间代码
  8. GoogleAdSense高价关键字排行榜
  9. 没事学学docker:在阿里云中部署MYSQL的容器+测试
  10. C++ 从入门到入土(English Version)Section3: Real numbers + bitwise operations