简介

图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是:

灰度处理&二值化

降噪

字符分割

标准化

识别

灰度化:在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫做灰度值,因此,灰度图像每个像素值只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。

二值化:二值化可以把灰度图片转换成二值图像,把大于某个临界灰度值的像素灰度设置为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。

降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只留下需要识别的字符,让图片变成2进制点阵,方便代入模型训练。

灰度处理:

灰度化:在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫做灰度值,因此,灰度图像每个像素值只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。

from PIL import Image # 用于打开图片和对图片处理

def img_to_gray(path):

"""

图片转灰度

:param path:

:return:

"""

img = Image.open(path)

img = img.convert('L') #转灰度

img.show() #显示图片

return img

path = '../files/verifyimg_edit_1.jpg'

im = img_to_gray(path)

path = path.replace('jpg','png')

im.save(path) #保存图片

处理前后的图片:

输入原始图片:

输出转灰度后的图片:

二值化:

二值化:二值化可以把灰度图片转换成二值图像,把大于某个临界灰度值的像素灰度设置为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。

from PIL import Image # 用于打开图片和对图片处理

def processing_image(path):

img = Image.open(path)

pixdata = img.load()

w, h = img.size

threshold = 160 # 该阈值不适合所有验证码,具体阈值请根据验证码情况设置

# 遍历所有像素,大于阈值的为黑色

for y in range(h):

for x in range(w):

if pixdata[x, y] < threshold:

pixdata[x, y] = 0

else:

pixdata[x, y] = 255

return img

path = '../files/verifyimg_edit_1.png' #已经完成转灰度的图片

im = processing_image(path)

path = path.replace('png','jpeg')

im.save(path)

输入转灰度后的图片:

输出二值化后的图片:

降噪

降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只留下需要识别的字符,让图片变成2进制点阵,方便代入模型训练。

from PIL import Image, ImageDraw

# 二值数组

t2val = {}

def twoValue(image, G):

for y in xrange(0, image.size[1]):

for x in xrange(0, image.size[0]):

g = image.getpixel((x, y))

if g > G:

t2val[(x, y)] = 1

else:

t2val[(x, y)] = 0

# 根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0

# G: Integer 图像二值化阀值

# N: Integer 降噪率 0

# Z: Integer 降噪次数

# 输出

# 0:降噪成功

# 1:降噪失败

def clearNoise(image, N, Z):

for i in xrange(0, Z):

t2val[(0, 0)] = 1

t2val[(image.size[0] - 1, image.size[1] - 1)] = 1

for x in xrange(1, image.size[0] - 1):

for y in xrange(1, image.size[1] - 1):

nearDots = 0

L = t2val[(x, y)]

if L == t2val[(x - 1, y - 1)]:

nearDots += 1

if L == t2val[(x - 1, y)]:

nearDots += 1

if L == t2val[(x - 1, y + 1)]:

nearDots += 1

if L == t2val[(x, y - 1)]:

nearDots += 1

if L == t2val[(x, y + 1)]:

nearDots += 1

if L == t2val[(x + 1, y - 1)]:

nearDots += 1

if L == t2val[(x + 1, y)]:

nearDots += 1

if L == t2val[(x + 1, y + 1)]:

nearDots += 1

if nearDots < N:

t2val[(x, y)] = 1

def saveImage(filename, size):

image = Image.new("1", size)

draw = ImageDraw.Draw(image)

for x in xrange(0, size[0]):

for y in xrange(0, size[1]):

draw.point((x, y), t2val[(x, y)])

image.save(filename)

path = u'../files/verifyimg_edit_二值化.jpg' #已经完成二值化的图片

image = Image.open(path)

twoValue(image, 100)

clearNoise(image, 2, 1)

path1 = u'../files/verifyimg_edit_降噪11.jpg'

saveImage(path1, image.size)

输入二值化后的图片:

输出降噪后图片:

文字识别

def image_recognition(image):

'''

文字识别

:param image:

:return:

'''

pytesseract.pytesseract.tesseract_cmd = r"d:\Program Files\Tesseract-OCR\tesseract.exe" # 设置pyteseract路径

result = pytesseract.image_to_string(image) # 图片转文字

print(result)

path = u'../files/verifyimg_edit_降噪11.jpg' #已经完成降噪的图片

image = Image.open(path)

image_recognition(image)

输出:6032

python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr相关推荐

  1. python验证码识别库_Python验证码识别

    注意:若使用云服务器 (Windows Server版) 遇到闪退,请按照步骤:我的电脑--属性--管理--添加角色和功能--勾选桌面体验,点击安装,安装之后重启即可. 2020/06/01编外: 想 ...

  2. python实现验证码识别_Python实现验证码识别

    大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验 ...

  3. python tensorflow验证码识别_Tensorflow简单验证码识别应用

    简单的Tensorflow验证码识别应用,供大家参考,具体内容如下 1.Tensorflow的安装方式简单,在此就不赘述了. 2.训练集训练集以及测试及如下(纯手工打造,所以数量不多): 3.实现代码 ...

  4. python验证码识别api_python实现验证码识别功能

    本文实例为大家分享了python实现验证码识别的具体代码,供大家参考,具体内容如下 1.通过二值化处理去掉干扰线 2.对黑白图片进行降噪,去掉那些单独的黑色像素点 3.消除边框上附着的黑色像素点 4. ...

  5. python调用百度识别文字接口_python调用百度通用文字识别接口进行验证码识别

    官方文档入口 https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E7.AE.80.E4.BB.8B 安装 pip3 install baidu- ...

  6. python 验证码识别库_python验证码识别

    写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也有使用汉字的.在这个基础上增加噪点.干扰线. ...

  7. python爬虫-古诗文网验证码识别

    文章目录 一.前期准备 二.示例代码 一.前期准备 古诗文网验证码识别,是通过对古诗文网登陆界面的验证码图片进行识别的,利用专门的验证码识别网站,可以提取验证码图片中的验证码 网站推荐:超级鹰 注册登 ...

  8. 次世代 php验证码识别,次世代验证码识别系统,自动识别验证码不用愁

    下面简单介绍下这款软件的简单用法. 首先我们要找到验证码图片地址,这里我找的是中金博客验证码地址,在验证码图片上右键复制图片地址即可. 然后打开次世代验证码识别系统程序. 将验证码地址粘贴到次世代验证 ...

  9. 图文识别(一):验证码识别---中、英文、数字混合的单行文字识别等

    最近有位大神分享了一个验证码库,试用一下发现非常实用,特做个分享记录. Github地址:GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版 Pip地址:dd ...

最新文章

  1. python函数应用_Python 函数及其应用
  2. mysql为数据库表起别名的注意事项
  3. CvMat与LIplmage之间的相互转换__cvConvert()
  4. 比尔·盖茨,让骆驼穿过针眼的人
  5. VS2015配置Opencv
  6. java vc_vc++与 java有什么不同
  7. 自学python好找工作么-转行去培训班学Python好找工作吗?老男孩教育
  8. 【动态规划】P1057 传球游戏
  9. 社会达尔文主义 盛行时间_新达尔文主义的心理理论
  10. MYSQL闪退的解决方法
  11. 关于光伏行业的测试及测试标准
  12. [中医经络学习一]足阳明胃经
  13. Android Google Play 支付SDK接入指南
  14. 蓝桥杯:跳蚂蚱【BFS】【Python】
  15. 开箱 | 小度智能音箱初体验
  16. Visio复制的图片在Word中不显示
  17. 关于冲正,需要知道的那点事
  18. 数据挖掘—逻辑回归分类—信用卡欺诈分析
  19. 深入理解计算机系统笔记_程序的机器级表示_3.9异质的数据结构
  20. 【转载】数据在计算机中是如何存储的

热门文章

  1. 关于webservice的经典理解
  2. BZOJ-1923-外星千足虫-SDOI2010
  3. 【NOIP2013模拟9.29】密码
  4. 2017年9月9日普级组 买礼物的艰辛
  5. wifi定位算法 java_记一次APP的so层算法逆向(七)
  6. 华为如何拍火烧云_华为手机拍照功能介绍-设置通用功能
  7. python 进位_Python小课堂(第一讲)
  8. python websocket server_Python Websocket服务端
  9. fota mcsync洛达检测_【科普篇】华强北洛达1536U芯片下的苹果Airpods,与正品差距还有多少...
  10. python中的break+while break+for