python 图片验证码识别
采用pytesseract
解决,属于 Python 当中比较简单的OCR识别库。
使用pytesseract之前,你需要通过 pip 安装一下对应的模块
pip install pytesseract
pip install pillow
如果你安装了这两个库之后,编写一个识别代码,发现会报错时,你需要
安装一个 Tesseract-OCR 软件。这个软件是由 Google 维护的开源的 OCR 软件。
下载地址 > https://github.com/tesseract-ocr/tesseract/wiki
中文包的下载地址 > https://github.com/tesseract-ocr/tessdata
选择你需要的版本进行下载即可
命令 | 解释 |
open() |
打开一个图片 from PIL import Image im = Image.open(“1.png”) im.show() |
save() |
保存文件 image.save('b.png',None) |
convert() |
convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种: · 1 (1-bit pixels, black and white, stored with one pixel per byte) · L (8-bit pixels, black and white) · P (8-bit pixels, mapped to any other mode using a colour palette) · RGB (3x8-bit pixels, true colour) · RGBA (4x8-bit pixels, true colour with transparency mask) · CMYK (4x8-bit pixels, colour separation) · YCbCr (3x8-bit pixels, colour video format) · I (32-bit signed integer pixels) · F (32-bit floating point pixels) |
Filter
from PIL import Image, ImageFilter
im = Image.open(‘1.png’)
# 高斯模糊
im.filter(ImageFilter.GaussianBlur)
# 普通模糊
im.filter(ImageFilter.BLUR)
# 边缘增强
im.filter(ImageFilter.EDGE_ENHANCE)
# 找到边缘
im.filter(ImageFilter.FIND_EDGES)
# 浮雕
im.filter(ImageFilter.EMBOSS)
# 轮廓
im.filter(ImageFilter.CONTOUR)
# 锐化
im.filter(ImageFilter.SHARPEN)
# 平滑
im.filter(ImageFilter.SMOOTH)
# 细节
im.filter(ImageFilter.DETAIL)
format 属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为 None;
size 属性是一个 tuple,表示图像的宽和高(单位为像素);
mode 属性为表示图像的模式,常用的模式为:L 为灰度图,RGB 为真彩色,CMYK 为 pre-press 图像。如果文件不能打开,则抛出 IOError 异常。
import pytesseract
from PIL import Imagedef main():image = Image.open("a.jpg")text = pytesseract.image_to_string(image,lang="chi_sim")print(text)if __name__ == '__main__':main()
如果你的图片是带有干扰性的验证码时,识别不出来时你需要进行处理,
其基本原理都是完全一样的
- 彩色转灰度
- 灰度转二值
- 二值图像识别
improt tesserocr
from PIL improt Imageimage =Image.open(路径)
#将图片转化为灰度图像
image =image.convert('L')
#二值化
threshold=127
table =[]
for i in range(256):if i < threshold:table.append(0)else:table.append(1)
image.image.point(table,'1')
result = tesserocr.image_to_text(image)
print(result)
#将部分进行简单封装
import pytesseract
from PIL import Imagedef initTable(threshold=127):#将图片转化为灰度图像#image =image.convert('L')#二值化#threshold=127table =[]for i in range(256):if i < threshold:table.append(0)else:table.append(1)return tableimage =Image.open(图片路径)
#将图片转化为灰度图像
image =image.convert('L')
image=image.point(initTable,'1')
result = tesserocr.image_to_text(image)
print(result)
普通没有干扰的验证码,我们直接识别即可,但是有的验证码还是有干扰的,在识别之前,需要对它进行基本的处理,我们采用和上面代码类似的办法进行,对它进行灰度处理和二值化操作。部分代码我直接硬编码了,不过最终识别的效果并没有比想象的优化多少。
class Image_opt:def init_table(self,threshold=128):table = []for i in range(256):if i < threshold:table.append(0)else:table.append(1)return tabledef opt_image(self):im = Image.open("66.png")im = im.convert('L') #将图片转化为灰度图像im = im.point(self.init_table(), '1') im.save('66_s.png') #保存图片return "66_s.png"
调用验证码接口
def get_file_content(self,file_path):with open(file_path, 'rb') as fp:base64_data = base64.b64encode(fp.read())s = base64_data.decode()data = {}data['image'] = sdecoded_data = urllib.parse.urlencode(data)return decoded_datadef show_code(self):image = self.get_file_content(self.opt_image())headers = {"Content-Type": "application/x-www-form-urlencoded"}res = requests.post(self.api.format(self.get_accesstoken()),headers=headers,data=image)print(res.text)
通过百度模块调用验证码识别,首先还是要安装模块
pip install baidu-aip
from aip import AipOcr# 定义常量
APP_ID = '15736693'
API_KEY = '你的KEY'
SECRET_KEY = '你的SECRET'# 初始化文字识别
aipOcr=AipOcr(APP_ID, API_KEY, SECRET_KEY)# 读取图片
filePath = "1.jpg"def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()# 定义参数变量
options = {'detect_direction': 'true','language_type': 'CHN_ENG',
}# 网络图片文字文字识别接口
result = aipOcr.webImage(get_file_content(filePath),options)print(result)
借用第三方平台解决验证码
def get_accesstoken(self):res = requests.post(self.url.format(self.key,self.secret),headers=self.header)content = res.textif (content):return json.loads(content)["access_token"]import requests
import jsonimport base64import urllib.request, urllib.parseclass GetCode(object):def __init__(self):self.url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}"self.api = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}"self.header = {"Content-Type":'application/json; charset=UTF-8'}self.key = "你的KEY"self.secret = "你的SECRET"
python 图片验证码识别相关推荐
- python 图片验证码识别,较实用
""" 图鉴官网:http://www.ttshitu.com/ 每次消耗 0.002积分 """ import base64 import ...
- 字符识别Python实现 图片验证码识别
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- 字符型图片验证码识别完整过程及Python实现
1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程 ...
- 微博模拟登陆的方法 + 图灵图像图片验证码识别平台 识别验证码(97%正确率)Python + Selenium+Chrome
最近遇到一个问题,需要频繁切换账号登陆微博,但是需要识别微博的验证码,比较麻烦.而且因为需要24h不间断的操作,所以没法使用人工打码平台,而且打码平台也比较贵,延迟又高.最后找到了一个可以机器识别出来 ...
- 基于Python的验证码识别技术
基于Python的验证码识别技术 作者:强哥 概述 前言 准备工作 识别原理 图像处理 切割图像 人工标注 训练数据 检测结果 搞笑一刻 福利一刻 推荐阅读 前言 很多网站登录都需要输入验证码,如果要 ...
- 关于利用python进行验证码识别的一些想法
关于利用python进行验证码识别的一些想法 - 小五义 - 博客园 关于利用python进行验证码识别的一些想法 转载请注明:@小五义http://www.cnblogs.com/xiaowuyi ...
- 【成长笔记】图片验证码识别
记得很早以前,我对如携程飞猪等第三方平台购买火车票不用输入验证码感到很--牛!百度后发现其可能是实现了自动打码,或者说机器自动识别验证码,我很好奇. 后来,当我觉得我必须要给自己找些有趣的知识来学习的 ...
- python 实现验证码识别
python 实现验证码识别 环境安装 1.1 python安装(此处不详细介绍,自行百度) 1.2 安装Tesseract-OCR 第一步:依赖安装 第二步:下载安装Leptonica 第三步: 下 ...
- 基于python的验证码识别
基于python的验证码识别 在利用python对一些网站进行批量操作的时候,验证码是个绕不过去的东西,虽然现在网上有很多图像识别的api,但是可能不适用于你的项目,我为了批量爬取班上同学的学分绩点写 ...
最新文章
- 双柱状图柱子数量比较多_微生物组数据冲击图和柱状图一条代码解决
- 计算机模拟热处理,计算机模拟在热处理中的应用
- Caddy-基于go的微型serve用来做反向代理和Gateway
- 语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库
- 干货|在美国不要读博的12条理由
- python语言type board_Micropython TPYBoard开发板控制无线加速度小车
- 二、Linux系统目录和文件基本操作
- 了解 svg 图像和元素创建
- 快慢指针算法及其应用
- Ubuntu 查看 Cuda 及 版本
- 为什么越来越多的企业选择云数据存储而放弃本地数据存储?
- 基于 smart-config技术实现
- ArcMap制作TPK文件
- java 替换空白字符串
- 小玩童童装骗子加盟骗局
- Ubuntu18.04.4安装与配置,让老机焕发青春
- linux test1
- 软件测试职业发展三步曲之一
- Visual Studio 2022 v17.5 正式发布
- 计算机网络知识初步教案,高中信息技术教案(网络)-计算机网络基础知识
热门文章
- 设字符型变量 x 的值是 064,表达式....的值是
- springsession原理及redis缓存处理
- MGR Switch single-Primary to Muti_primary
- 无法编辑或保存PPT文档
- ss fping.php,WordPress wpSS插件'ss_handler.php' SQL注入漏洞
- 电脑开机没反应怎么办,如何解决?
- Vue跨域请求post\get
- 2023年了,私域会员才是增长发力点
- 不要糊涂的度日 记录点东西
- android京东ui,2019京东金机奖最佳UI、交互设计:这3款“当之无愧”