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抓取网页正文的源码
Jun 11 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
Python将string转换到float的实例方法
Jul 29 Python
python opencv实现信用卡的数字识别
Jan 12 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
python中entry用法讲解
Dec 04 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
常用的Python代码调试工具总结
Jun 23 Python
Python面向对象之内置函数相关知识总结
Jun 24 Python
解析python中的jsonpath 提取器
Jan 18 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
合作指挥官:孟斯克
2020/03/16 星际争霸
PHP新手上路(十一)
2006/10/09 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
八大排序算法的Python实现
2021/01/28 Python
Python异常的检测和处理方法
2018/10/26 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
python输出数学符号实例
2020/05/11 Python
Django多个app urls配置代码实例
2020/11/26 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
颁奖晚会主持词
2014/03/25 职场文书
物流专业求职信
2014/06/30 职场文书
总经理聘用协议书
2015/09/21 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
一文带你探究MySQL中的NULL
2021/11/11 MySQL
js前端图片加载异常兜底方案
2022/06/21 Javascript