Python Tesseract-orc 识别简单验证码
1 对图片进行二值化处理
二值化就是将图片的颜色转换成非黑即白的图片
from PIL import Imageim = Image.open('yzm.jpg') # 用pil打开这个图片
im = im.convert('L') # 将图像转换为“L”模式, 即黑白。
yuzhi = 127 # 根据需要自行更改阈值
im = im.point(lambda x: 0 if x < yuzhi else x >= yuzhi, '1') # 二值化 127为分割灰度的点(阀值)
im.show() # 查看图片
图片资源:
经过上述处理应该这样的生成图片:
如果显示的图片效果不理想,可以调整阀值来进行调整(但是依然会留有小黑点)
2 去除噪点
把图片中的黑点去掉
from PIL import ImageDraw, Imagedef getPixel(image, x, y):"""去除黑点:param image: 图片路径:param x: 像素点x轴坐标:param y: 像素点y轴坐标:return:"""L = image.getpixel((x, y)) # 获取当前像素点的像素if L == 0: # 判读此像素点是否为黑,因为如果是白的就没必要处理了nearDots = 0 # 初始化记录周围有没有黑像素数量的值# 判断周围像素点(白色 +1)for i in range(1, 4): # 根据点的大小自行选择周围像素点层数# try 防止越界try:if L - image.getpixel((x - i, y - i)):nearDots += 1except:passtry:if L - image.getpixel((x - i, y)):nearDots += 1except:passtry:if L - image.getpixel((x - i, y + i)):nearDots += 1except:passtry:if L - image.getpixel((x, y - i)):nearDots += 1except:passtry:if L - image.getpixel((x, y + i)):nearDots += 1except:passtry:if L - image.getpixel((x + i, y - i)):nearDots += 1except:passtry:if L - image.getpixel((x + i, y)):nearDots += 1except:passtry:if L - image.getpixel((x + i, y + i)):nearDots += 1except:pass# 根据需求自行调节if nearDots > 16: # 这里如果周围16个是白点那么就返回一个白点,实现去黑点的操作return 1 # 返回白点else:return 0 # 返回黑点else:return 1def clearNoise(image):"""清除噪点"""draw = ImageDraw.Draw(image)# 循环遍历每个像素点for x in range(0, image.size[0]):for y in range(0, image.size[1]):color = getPixel(image, x, y)draw.point((x, y), color)return imageif __name__ == '__main__':im = Image.open("./yzm_gai.png")im = clearNoise(im)im.show()
经过上述处理应该这样的生成图片:
3 OCR识别
import pytesseractfrom PIL import Imageimage = Image.open('yzm_gai.png')
# chi_sim 是中文识别包,equ 是数学公式包,eng 是英文包
code = pytesseract.image_to_string(image, lang="chi_sim")
print(code)
识别结果:
M8K2
成功,完美!!!
虽然本次识别成功,并不代表每次都可以识别成功,对于较复杂的验证码识别成功率更低,那该怎么办呢???
当然是训练!!!(待续。。。)
完整代码:
import pytesseract
from PIL import Image, ImageDrawdef img_to_L(img_path):"""将图片转化为非黑即白的图片:param img_path: 图片路径:return:"""im = Image.open(img_path) # 用pil打开这个图片im = im.convert('L')yuzhi = 127im = im.point(lambda x: 0 if x < yuzhi else x >= yuzhi, '1') # 二值化 100为分割灰度的点(阀值),二值化就是将图片的颜色转换成非黑即白的图片im.show()return imdef getPixel(image, x, y):"""去除黑点:param image: 图片路径:param x: 像素点x轴坐标:param y: 像素点y轴坐标:return:"""L = image.getpixel((x, y)) # 获取当前像素点的像素if L == 0: # 判读此像素点是否为黑,因为如果是白的就没必要处理了nearDots = 0 # 初始化记录周围有没有黑像素数量的值# 判断周围像素点(白色 +1)for i in range(1, 4):try:if L - image.getpixel((x - i, y - i)):nearDots += 1except:passtry:if L - image.getpixel((x - i, y)):nearDots += 1except:passtry:if L - image.getpixel((x - i, y + i)):nearDots += 1except:passtry:if L - image.getpixel((x, y - i)):nearDots += 1except:passtry:if L - image.getpixel((x, y + i)):nearDots += 1except:passtry:if L - image.getpixel((x + i, y - i)):nearDots += 1except:passtry:if L - image.getpixel((x + i, y)):nearDots += 1except:passtry:if L - image.getpixel((x + i, y + i)):nearDots += 1except:passif nearDots > 16: # 这里如果周围10个是白点那么就返回一个白点,实现去黑点的操作return 1 # 返回白点else:return 0 # 返回黑点else:return 1def clearNoise(image):"""清除噪点:param image: 图像路径:return: """draw = ImageDraw.Draw(image)# 循环遍历每个像素点for x in range(0, image.size[0]):for y in range(0, image.size[1]):color = getPixel(image, x, y)draw.point((x, y), color)return imagedef OCR(im):# chi_sim 是中文识别包,equ 是数学公式包,eng 是英文包code = pytesseract.image_to_string(im, lang='eng')return codeif __name__ == '__main__':# 图像路径im = "yzm.jpg"# # 将图片转化为非黑即白的图片im = img_to_L(im)# 将上一步处理完成的im对象传给clearNoise()函数im = clearNoise(im)im.show()# 进行OCR识别code = OCR(im)print(code)
Python Tesseract-orc 识别简单验证码相关推荐
- python代码标识码_代码分享:使用Python和Tesseract来识别图形验证码
原标题:代码分享:使用Python和Tesseract来识别图形验证码 *本文原创作者:ipenox,本文属FreeBuf原创奖励计划,未经许可禁止转载 各位在企业中做Web漏洞扫描或者渗透测试的朋友 ...
- python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤
字符型图片验证码识别完整过程及Python实现的博主,我的大部分知识点都是从他那里学来的. 想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括: ...
- 一种识别简单验证码的方法
本文主要讲述了一种识别简单验证码的方法,本文重点不是识别这些简单的数字,而是通过识别数字这个过程理解到图片的数字构造.任何一张图片都是由三个图层构成的,每个图层是一张二维矩阵表,三张表上位置相同的三个 ...
- python识别中文验证码_Python识别简单验证码
12.1 更新 已经有完整的代码了 ======================================= 新手, 多多指教 大概思路: 1. 转换图片为黑白, 2. 去除干扰, 3. 切割, ...
- python实现OCR识别图片验证码
用cv2模块读取和显示模块 #导包cv2拓展模块 import cv2#先给窗体起名字 cv2.namedWindow("ShowImage1") cv2.namedWindow( ...
- Python Tesseract 图片识别-小操练
小科普 光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息. Tesseract的OCR引擎最先由 ...
- 使用Python PIL库实现简单验证码的去噪处理
想要识别验证码,收集足够多的样本后,首先要做的就是对验证码原始图片进行处理,对验证码识别分类之前,一般包括:将彩色图片转换成灰度图.将灰度图二值化和去除噪点三个基本过程.这里仅以比较简单的验证码为例, ...
- python3识别简单验证码
准备工作 1.下载OCR识别库tesseract ,下载地址:https://digi.bib.uni-mannheim.de/tesseract/,根据自己的系统选择合适的版本. 2.下载完成后执行 ...
- Tesseract图文识别--简单
下载该安装包,安装tesseract, 安装之后 配置环境变量,将安装路径与路径下的tessdata路径放到边境变量的path下 D:\installed_study_software\tessera ...
- 使用pytesseract识别简单验证码
from PIL import Image import pytesseract from pytesseract import *rep={'O':'0', #替换列表'I':'1','L':'1' ...
最新文章
- 数字货币 BCH的混币神器CashShuffle
- 64位虚拟机安装64位ubuntu出现问题
- luogu P2679——子串
- 【生成函数基础题】hdu1085 hdu1028
- java中实现选择文件_Java实现选择文件并显示文件内容代码
- 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布
- 双向控制引脚的控制代码
- ffmpeg加环境变量
- javabeans_膨胀的JavaBeans –不要在您的API中添加“ Getters”
- C语言标识符、关键字和注释
- Android中数据的存储操作
- csgo天津服务器维护怎么办,CSGO华北赛区在天津落下帷幕
- Smarty中文手册
- java 数据字典使用_java中数据字典怎么用?图文详解
- (转)一个偷食禁果的女孩--一件我亲眼目睹的真实感人故事
- 【C语言基础学习笔记】一、初始C语言(2)
- java大文件md5快速计算_java 计算文件MD5值 大文件
- vue 使用qrcode生成二维码功能
- 计算机没有有效的ip配置,win7电脑没有有效的ip配置怎么办
- 还原《魔兽争霸3》场景全过程
热门文章
- 如何用java获取网页源代码
- 刻录光驱不能访问出现函数不正确问题解决
- 为什么程序员喜欢养猫?
- netty系列之:真正的平等–UDT中的Rendezvous
- collect2: error: ld returned 1 exit status(解决方案大总结)
- 当yum安装包时显示系统空间不足,求指教
- leetcode **773. 滑动谜题(拼图)(2021.6.26)
- 5.学城项目 支付宝支付
- antd 时间选择器,设置显示为中文
- 13946 问题 E: 积木游戏