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基础入门学习笔记(Python环境搭建)
Jan 13 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
Python中shape计算矩阵的方法示例
Apr 21 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
python实现图片识别汽车功能
Nov 30 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
Python最小二乘法矩阵
Jan 02 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
如何基于Django实现上下文章跳转
Sep 16 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 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日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python实现读取json文件到excel表
2017/11/18 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
python实现ftp文件传输功能
2020/03/20 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
keras 权重保存和权重载入方式
2020/05/21 Python
python db类用法说明
2020/07/07 Python
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
市场部规章制度
2014/01/24 职场文书
退休感言
2014/01/28 职场文书
技校毕业生自荐信范文
2014/03/07 职场文书
请假条的格式
2014/04/11 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
行政前台岗位职责
2015/04/16 职场文书