采用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

选择你需要的版本进行下载即可

pillow 库的基本操作
命令 解释
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()

如果你的图片是带有干扰性的验证码时,识别不出来时你需要进行处理,

其基本原理都是完全一样的

  1. 彩色转灰度
  2. 灰度转二值
  3. 二值图像识别
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 图片验证码识别相关推荐

  1. python 图片验证码识别,较实用

    """ 图鉴官网:http://www.ttshitu.com/ 每次消耗 0.002积分 """ import base64 import ...

  2. 字符识别Python实现 图片验证码识别

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  3. 字符型图片验证码识别完整过程及Python实现

    1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程 ...

  4. 微博模拟登陆的方法 + 图灵图像图片验证码识别平台 识别验证码(97%正确率)Python + Selenium+Chrome

    最近遇到一个问题,需要频繁切换账号登陆微博,但是需要识别微博的验证码,比较麻烦.而且因为需要24h不间断的操作,所以没法使用人工打码平台,而且打码平台也比较贵,延迟又高.最后找到了一个可以机器识别出来 ...

  5. 基于Python的验证码识别技术

    基于Python的验证码识别技术 作者:强哥 概述 前言 准备工作 识别原理 图像处理 切割图像 人工标注 训练数据 检测结果 搞笑一刻 福利一刻 推荐阅读 前言 很多网站登录都需要输入验证码,如果要 ...

  6. 关于利用python进行验证码识别的一些想法

    关于利用python进行验证码识别的一些想法 - 小五义 - 博客园 关于利用python进行验证码识别的一些想法 转载请注明:@小五义http://www.cnblogs.com/xiaowuyi ...

  7. 【成长笔记】图片验证码识别

    记得很早以前,我对如携程飞猪等第三方平台购买火车票不用输入验证码感到很--牛!百度后发现其可能是实现了自动打码,或者说机器自动识别验证码,我很好奇. 后来,当我觉得我必须要给自己找些有趣的知识来学习的 ...

  8. python 实现验证码识别

    python 实现验证码识别 环境安装 1.1 python安装(此处不详细介绍,自行百度) 1.2 安装Tesseract-OCR 第一步:依赖安装 第二步:下载安装Leptonica 第三步: 下 ...

  9. 基于python的验证码识别

    基于python的验证码识别 在利用python对一些网站进行批量操作的时候,验证码是个绕不过去的东西,虽然现在网上有很多图像识别的api,但是可能不适用于你的项目,我为了批量爬取班上同学的学分绩点写 ...

最新文章

  1. 双柱状图柱子数量比较多_微生物组数据冲击图和柱状图一条代码解决
  2. 计算机模拟热处理,计算机模拟在热处理中的应用
  3. Caddy-基于go的微型serve用来做反向代理和Gateway
  4. 语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库
  5. 干货|在美国不要读博的12条理由
  6. python语言type board_Micropython TPYBoard开发板控制无线加速度小车
  7. 二、Linux系统目录和文件基本操作
  8. 了解 svg 图像和元素创建
  9. 快慢指针算法及其应用
  10. Ubuntu 查看 Cuda 及 版本
  11. 为什么越来越多的企业选择云数据存储而放弃本地数据存储?
  12. 基于 smart-config技术实现
  13. ArcMap制作TPK文件
  14. java 替换空白字符串
  15. 小玩童童装骗子加盟骗局
  16. Ubuntu18.04.4安装与配置,让老机焕发青春
  17. linux test1
  18. 软件测试职业发展三步曲之一
  19. Visual Studio 2022 v17.5 正式发布
  20. 计算机网络知识初步教案,高中信息技术教案(网络)-计算机网络基础知识

热门文章

  1. 设字符型变量 x 的值是 064,表达式....的值是
  2. springsession原理及redis缓存处理
  3. MGR Switch single-Primary to Muti_primary
  4. 无法编辑或保存PPT文档
  5. ss fping.php,WordPress wpSS插件'ss_handler.php' SQL注入漏洞
  6. 电脑开机没反应怎么办,如何解决?
  7. Vue跨域请求post\get
  8. 2023年了,私域会员才是增长发力点
  9. 不要糊涂的度日 记录点东西
  10. android京东ui,2019京东金机奖最佳UI、交互设计:这3款“当之无愧”