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排序方法实例分析
Apr 30 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
python使用thrift教程的方法示例
Mar 21 Python
python元组的概念知识点
Nov 19 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
python输出数学符号实例
May 11 Python
Python改变对象的字符串显示的方法
Aug 01 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
Flask搭建一个API服务器的步骤
May 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 URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
PHP里的中文变量说明
2011/07/23 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python爬取天气数据的实例详解
2020/11/20 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
英国标准协会商店:BSI Shop
2019/02/25 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
大气污染防治方案
2014/05/19 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
2015年司法所工作总结
2015/04/27 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
成绩单家长意见
2015/06/03 职场文书
信用卡工资证明范本
2015/06/19 职场文书
《将心比心》教学反思
2016/02/23 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers