python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr
简介
图片验证码识别的可以分为几个步骤,一般用 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相关推荐
- python验证码识别库_Python验证码识别
注意:若使用云服务器 (Windows Server版) 遇到闪退,请按照步骤:我的电脑--属性--管理--添加角色和功能--勾选桌面体验,点击安装,安装之后重启即可. 2020/06/01编外: 想 ...
- python实现验证码识别_Python实现验证码识别
大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验 ...
- python tensorflow验证码识别_Tensorflow简单验证码识别应用
简单的Tensorflow验证码识别应用,供大家参考,具体内容如下 1.Tensorflow的安装方式简单,在此就不赘述了. 2.训练集训练集以及测试及如下(纯手工打造,所以数量不多): 3.实现代码 ...
- python验证码识别api_python实现验证码识别功能
本文实例为大家分享了python实现验证码识别的具体代码,供大家参考,具体内容如下 1.通过二值化处理去掉干扰线 2.对黑白图片进行降噪,去掉那些单独的黑色像素点 3.消除边框上附着的黑色像素点 4. ...
- python调用百度识别文字接口_python调用百度通用文字识别接口进行验证码识别
官方文档入口 https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E7.AE.80.E4.BB.8B 安装 pip3 install baidu- ...
- python 验证码识别库_python验证码识别
写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种:图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也有使用汉字的.在这个基础上增加噪点.干扰线. ...
- python爬虫-古诗文网验证码识别
文章目录 一.前期准备 二.示例代码 一.前期准备 古诗文网验证码识别,是通过对古诗文网登陆界面的验证码图片进行识别的,利用专门的验证码识别网站,可以提取验证码图片中的验证码 网站推荐:超级鹰 注册登 ...
- 次世代 php验证码识别,次世代验证码识别系统,自动识别验证码不用愁
下面简单介绍下这款软件的简单用法. 首先我们要找到验证码图片地址,这里我找的是中金博客验证码地址,在验证码图片上右键复制图片地址即可. 然后打开次世代验证码识别系统程序. 将验证码地址粘贴到次世代验证 ...
- 图文识别(一):验证码识别---中、英文、数字混合的单行文字识别等
最近有位大神分享了一个验证码库,试用一下发现非常实用,特做个分享记录. Github地址:GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版 Pip地址:dd ...
最新文章
- python函数应用_Python 函数及其应用
- mysql为数据库表起别名的注意事项
- CvMat与LIplmage之间的相互转换__cvConvert()
- 比尔·盖茨,让骆驼穿过针眼的人
- VS2015配置Opencv
- java vc_vc++与 java有什么不同
- 自学python好找工作么-转行去培训班学Python好找工作吗?老男孩教育
- 【动态规划】P1057 传球游戏
- 社会达尔文主义 盛行时间_新达尔文主义的心理理论
- MYSQL闪退的解决方法
- 关于光伏行业的测试及测试标准
- [中医经络学习一]足阳明胃经
- Android Google Play 支付SDK接入指南
- 蓝桥杯:跳蚂蚱【BFS】【Python】
- 开箱 | 小度智能音箱初体验
- Visio复制的图片在Word中不显示
- 关于冲正,需要知道的那点事
- 数据挖掘—逻辑回归分类—信用卡欺诈分析
- 深入理解计算机系统笔记_程序的机器级表示_3.9异质的数据结构
- 【转载】数据在计算机中是如何存储的
热门文章
- 关于webservice的经典理解
- BZOJ-1923-外星千足虫-SDOI2010
- 【NOIP2013模拟9.29】密码
- 2017年9月9日普级组 买礼物的艰辛
- wifi定位算法 java_记一次APP的so层算法逆向(七)
- 华为如何拍火烧云_华为手机拍照功能介绍-设置通用功能
- python 进位_Python小课堂(第一讲)
- python websocket server_Python Websocket服务端
- fota mcsync洛达检测_【科普篇】华强北洛达1536U芯片下的苹果Airpods,与正品差距还有多少...
- python中的break+while break+for