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中IPYTHON入门实例
May 11 Python
Python中Random和Math模块学习笔记
May 18 Python
详细介绍Python的鸭子类型
Sep 12 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
python中数组和矩阵乘法及使用总结(推荐)
May 18 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
详解Python常用的魔法方法
Jun 03 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
操作Oracle的php类
2006/10/09 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
Javascript &amp; DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
js判断变量是否空值的代码
2008/10/26 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
Javascript中Eval函数的使用
2010/03/23 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
javascript数组排序汇总
2015/07/07 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
python中实现字符串翻转的方法
2018/07/11 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
宾馆仓管员岗位职责
2014/07/27 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
领导干部失职检讨书
2015/05/05 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python
Python之matplotlib绘制饼图
2022/04/13 Python