百度技术文档

首先要注册百度云账号:

在首页,找到图像识别创建应用,选择相应的功能,创建

安装接口模块:

pip install baidu-aip

简单识别一:

简单图形验证码:

图片:

from aip import AipOcr

 # 你的 APPID AK SK
APP_ID = '你的APPID'
API_KEY = '你的AK'
SECRET_KEY = '你的SK' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 读取图片
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 测试文件也可以写路径
image = get_file_content('test.jpg') # 调用通用文字识别, 图片参数为本地图片
result = client.basicGeneral(image) # 定义参数变量
options = {
# 定义图像方向
'detect_direction' : 'true',
# 识别语言类型,默认为'CHN_ENG'中英文混合
'language_type' : 'CHN_ENG',
} # 调用通用文字识别接口
results = client.basicGeneral(image,options)
print(results)
# 遍历取出图片解析的内容
# for word in result['words_result']:
# print(word['words'])
try:
code = results['words_result'][0]['words']
except:
code = '验证码匹配失败' print(code)

结果为:

{'log_id': **************, 'direction': 0, 'words_result_num': 1, 'words_result': [{'words': ''}]}
526

返回数据的参数详解:

输出结果中,各字段分别代表:

  • log_id : 唯一的log id,用于定位问题
  • direction : 图像方向,传入参数时定义为true表示检测,0表示正向,1表示逆时针90度,2表示逆时针180度,3表示逆时针270度,-1表示未定义。
  • words_result_num : 识别的结果数,即word_result的元素个数
  • word_result : 定义和识别元素数组
  • words : 识别出的字符串

二.很明显结果不太正确,(部分代码可能和官网不太一样,因为在python3中有些模块被替代了)然后就继续在百度技术文档中寻找答案,于是又找到了一个方案(其余的功能调用方法相同)

代码如下:

# 第一步:获取百度access_token
import urllib, sys
from urllib import request
import ssl # client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的API_KEY】&client_secret=【你的SECRET_KEY】'
requests = request.Request(host)
requests.add_header('Content-Type', 'application/json; charset=UTF-8')
response = request.urlopen(requests)
content = response.read()
# 获取返回的数据
if (content):
print(content) # 第二步 通用文字识别(高精度版)识别
# 与百度技术文档上的部分代码不同,在python3中urllib2和urllib合并成了urllib
import base64
from urllib import request,parse
import json access_token = '第一步获取的token'
url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=' + access_token
# 二进制方式打开图文件
f = open(r'test.jpg', 'rb')
# 参数image:图像base64编码
img = base64.b64encode(f.read())
params = {"image": img}
# 将图像转化为可携带的参数
params = parse.urlencode(params)
# 构造请求对象
requests = request.Request(url, bytes(params, encoding='utf-8'))
# 添加请求头
requests.add_header('Content-Type', 'application/x-www-form-urlencoded')
#发起请求
response = request.urlopen(requests)
# 读取返回的内容并解码
content = response.read().decode('utf-8')
# 将数据转换为字典
res = json.loads(content) try:
# 尝试从数据中获取图片解析的结果,如果没有则证明没有解析成功
code = res['words_result'][0]['words']
except:
code = '验证码匹配失败' print(code)

结果为:

5526

对于特别复杂的图片,需要经过处理才能识别,使用PIL和Tesseract-OCR

from PIL import Image
import subprocess
def cleanFile(filePath, newFilePath):
image = Image.open(filePath)
# 对图片进行阈值过滤,然后保存
image = image.point(lambda x: 0 if x<143 else 255)
image.save(newFilePath)
# 调用系统的tesseract命令对图片进行OCR识别 可以使用绝对路径,也可将程序添加到系统环境变量中
subprocess.call(['C:\\Program Files (x86)\\Tesseract-OCR\\tesseract', newFilePath, "output"])
# 打开文件读取结果
with open("output.txt", 'r') as f:
print(f.read()) cleanFile("text.jpg", "text2clean.png")

但是呢,不知道为什么识别率太低了,求大神指教

使用云打码识别,识别率会高很多,但也是有代价的,就是需要花钱,但是挺便宜的

  https://www.cnblogs.com/mswei/p/9392530.html

python爬虫_简单使用百度OCR解析验证码的更多相关文章

  1. Python爬虫-尝试使用人工和OCR处理验证码模拟登入

    刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我 ...

  2. Python爬虫的简单入门(一)

    Python爬虫的简单入门(一) 简介 这一系列教学是基于Python的爬虫教学在此之前请确保你的电脑已经成功安装了Python(本教程使用的是Python3).爬虫想要学的精通是有点难度的,尤其是遇 ...

  3. Python爬虫教程-07-post介绍(百度翻译)(上)

    Python爬虫教程-07-post介绍(百度翻译)(上) 访问网络两种方法 get: 利用参数给服务器传递信息 参数为dict,使用parse编码 post :(今天给大家介绍的post) 一般向服 ...

  4. python练习_简单登录

    python练习_简单登录 需求: 做一个登录的小程序,验证用户与密码 要求登录三次错误后锁定 以下代码实现的功能与思路: 功能: 1.除admin以外的用户累计登录失败次数超过三次则锁定,此时需要管 ...

  5. Python爬虫_百度贴吧

    # 本爬虫为爬取百度贴吧并存储HTMLimport requests class TiebaSpider: def __init__(self, tieba_name): self.tieba_nam ...

  6. Python爬虫教程-08-post介绍(百度翻译)(下)

    Python爬虫教程-08-post介绍(下) 为了更多的设置请求信息,单纯的通过urlopen已经不太能满足需求,此时需要使用request.Request类 构造Request 实例 req = ...

  7. 这个Python爬虫的简单入门及实用的实例,你会吗?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:HOT_and_COOl 利用爬虫可以进行数据挖掘,比如可以爬取别人的网 ...

  8. 利用百度OCR实现验证码自动识别

    在爬取网站的时候都遇到过验证码,那么我们有什么方法让程序自动的识别验证码呢?其实网上已有很多打码平台,但是这些都是需要money.但对于仅仅爬取点数据而接入打码平台实属浪费.所以百度免费ocr正好可以 ...

  9. Python爬虫之简单的爬取百度贴吧数据

    首先要使用的第类库有 urllib下的request  以及urllib下的parse  以及 time包  random包 之后我们定义一个名叫BaiduSpider类用来爬取信息 属性有 url: ...

随机推荐

  1. Chatbot中的填槽(Slot Filling)(转)

    以下内容是学习了@我偏笑发布在公众号hanniman文章后,加上自己观点重新输出配图的文章 原文链接:http://t.cn/RE0FkgD 跳槽,吐槽,匹诺曹都听过,这个填槽,emmmm,黑人问号脸 ...

  2. JAVA 实验报告

        石家庄铁道大学信息科学与技术学院       实验报告 2018年----2019年  第一学期               题目:   四则运算.生成验证码 课程名称:  JAVA语言程序设 ...

  3. python 删除模块

    import systry:    import librabbitmqexcept Exception:    passelse:    version = getattr(librabbitmq, ...

  4. .html() 与.text() 获取值、取值 区别

    1.html代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  5. ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法

    原文链接:https://www.cnblogs.com/kaid/p/8616385.html 在ubuntu系统的termial下,用apt-get install 安装软件的时候,如果在未完成下 ...

  6. Spark Streaming之五:Window窗体相关操作

    SparkStreaming之window滑动窗口应用,Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作.每次掉落在窗口内的RDD的数据,会被聚 ...

  7. NO_DATA_FOUND ORACL NVL函数,当第一个为空时显示第二个参数值

    ORA-01403: no data foundORA-06512: at "STG.SAP_SO_QM_CUSTOMER_ADDBOM", line 50 NVL函数的格式如下: ...

  8. Fiddler抓包域名过滤(转载)

    转载自 http://www.cnblogs.com/111testing/p/6440480.html Fiddler抓包域名过滤 我们在用Fiddler抓包的时候会抓到很多不需要的数据包,我们怎样 ...

  9. Java 中位移运算符 >>,>>>,<<

    Java 中的三种位移运算符 java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     ...

  10. 最短路 poj1125

    输入一个n表示有n个点,接下来n行,每行(假设是u)第一个数字m表示有m对数字(每一对两个数字v,w,表示u到v的时间w),后面接m对数字.找一个起点,它到其他点所花费的时间(求起点到其他点距离的最大 ...