Python 识别12306图片验证码物品的实现示例


Posted in Python onJanuary 20, 2020

1、PIL介绍以及图片分割

Python 3 安装:  pip3 install Pillow

1.1 image 模块

Image模块是在Python PIL图像处理中常见的模块,主要是用于对这个图像的基本处理,它配合open、save、convert、show…等功能使用。

from PIL import Image
#打开文件代表打开pycharm中的文件
im = Image.open('1.jpg')
#展示图片
im.show()

1、Crop类

拷贝这个图像。如果用户想粘贴一些数据到这张图,可以使用这个方法,但是原始图像不会受到影响。

im.crop(box) ⇒ image

从当前的图像中返回一个矩形区域的拷贝。变量box是一个四元组,定义了左、上、右和下的像素坐标。用来表示在原始图像中截取的位置坐标,如box(100,100,200,200)就表示在原始图像中以左上角为坐标原点,截取一个100*100(像素为单位)的图像。

from PIL import Image
im = Image.open("pic1.jpg")
##确定拷贝区域大小
box = (5, 41, 72, 108)
##将im表示的图片对象拷贝到region中,大小为box
region = im.crop(box)
region.show()

Python 识别12306图片验证码物品的实现示例

实战一:12306图像分割并保存

from PIL import Image
#切割图像,由于下载的图片都是有固定的位置,所以直接控制像素进行切割就行了
def cut_img(im, x, y):
  assert 0 <= x <= 3
  assert 0 <= y <= 2
  left = 5 + (67 + 5) * x
  top = 41 + (67 + 5) * y
  right = left + 67
  bottom = top + 67
  return im.crop((left, top, right, bottom))
 
if __name__ == '__main__':
  im = Image.open("./pic1.jpg")
  #控制y轴
  for y in range(2):
    #控制x轴
    for x in range(4):
      im2 = cut_img(im, x, y)
      im2.save('./images/%s_%s.png'%(y,x))

Python 识别12306图片验证码物品的实现示例

2、百度平台接口实现

2.1.平台接入:

1.打开https://ai.baidu.com/进入控制台,选择文字识别服务。

Python 识别12306图片验证码物品的实现示例

2.创建应用,如图示:

Python 识别12306图片验证码物品的实现示例

3.输入应用名称、描述,并选择应用类型,之后点击“立即创建”按钮。

Python 识别12306图片验证码物品的实现示例

 4.创建完毕,点击“返回应用列表”。

Python 识别12306图片验证码物品的实现示例

5.此处显示AK,SK,后面程序中会用到

Python 识别12306图片验证码物品的实现示例

3. 官方文档的读取

1.打开https://ai.baidu.com/docs#/OCR-API/top 文档说明

Python 识别12306图片验证码物品的实现示例

Python 识别12306图片验证码物品的实现示例

需要用到的信息有:

(1)图像识别URL: https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general

(2)Header格式:Content-Type:application/x-www-form-urlencoded

(3) 请求参数:image和multi_detect两个参数,image为图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M。

(4)返回参数:车牌颜色Color、车牌号码number等。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import base64
import requests
import os
import time
#todo:获取百度权限验证码access_token
def get_token():
  get_token_url = "https://aip.baidubce.com/oauth/2.0/token"
  params = {
    "grant_type": "client_credentials",
    "client_id": "7ax98QuWU5l2zTbaOkzvKgxE",
    "client_secret": "INugQTM2DAfNFgfxtvgR7eF8AHPFGP5t",
  }
  res = requests.get(get_token_url, params).json()
  return res["access_token"]
#todo:通过权限验证码和图片进行识别物品
def get_result(access_token,image):
  url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general"
  #打开文件并进行编码
  with open(image, 'rb')as f:
    image = base64.b64encode(f.read())
  # image =
  #头部信息
  headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
  #发送数据
  data = {
    "access_token": access_token,
    "image": image
  }
  #发送请求,并返回识别数据
  res = requests.post(url, headers=headers, data=data).json()
  if res:
    result = res['result']
    return result
#todo:获取图片关键物品
def get_keywords(result):
  #按照最大匹配率进行排序,并获取左最后一个
  max_score = sorted(result,key=lambda x:x['score'])[-1]
  # print(max_score['keyword'])
  keyword = max_score['keyword']
  return keyword
 
if __name__ == '__main__':
  access_token = get_token()
  get_result(access_token,'pic1.jpg')
  datas = []
  for root,dir,files in os.walk('images'):
    for file in files:
      image = os.path.join(root,file)
      result = get_result(access_token,image)
      keyword = get_keywords(result)
      print(keyword)
      time.sleep(1)
      datas.append(keyword)
  print(datas)

Python 识别12306图片验证码物品的实现示例

总结:

  • PIL介绍以及图片分割
  • 百度AI图像识别实例搭建
  • 识别12306类别码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python切片知识解析
Mar 06 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
python如何生成网页验证码
Jul 28 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
python的几种矩阵相乘的公式详解
Jul 10 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
Python 图片添加美颜效果
Apr 28 Python
如何基于python实现归一化处理
Jan 20 #Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
Jan 20 #Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 #Python
python如何通过pyqt5实现进度条
Jan 20 #Python
python super用法及原理详解
Jan 20 #Python
tensorflow 变长序列存储实例
Jan 20 #Python
在tensorflow中实现去除不足一个batch的数据
Jan 20 #Python
You might like
php使用百度翻译api示例分享
2014/01/31 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
php解析xml方法实例详解
2015/05/12 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
使用canvas进行图像编辑的实例
2017/08/29 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
跟老齐学Python之网站的结构
2014/10/24 Python
Python Requests 基础入门
2016/04/07 Python
解决Mac下使用python的坑
2019/08/13 Python
python中format函数如何使用
2020/06/22 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
python/golang 删除链表中的元素
2020/09/14 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
一些网络技术方面的面试题
2014/05/01 面试题
我的教育故事演讲稿
2014/05/04 职场文书
企业年度评优方案
2014/06/02 职场文书
合伙经营协议书范本
2014/09/13 职场文书
平安建设汇报材料
2014/12/29 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
小学体育课教学反思
2016/02/16 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python