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统计cpu利用率的方法
Jun 02 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
浅析python中的迭代与迭代对象
Oct 08 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python编写简单端口扫描器
Sep 04 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
Python垃圾回收机制三种实现方法
Apr 27 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设计聊天室步步通
2006/10/09 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
php简单截取字符串代码示例
2016/10/19 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
js 分栏效果实现代码
2009/08/29 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
python中管道用法入门实例
2015/06/04 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
python如何实现数据的线性拟合
2019/07/19 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
python中uuid模块实例浅析
2020/12/29 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
高中生活自我鉴定
2014/01/18 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
聚美优品广告词改编
2014/03/14 职场文书
求职信结尾怎么写
2014/05/26 职场文书
应届大专生求职信
2014/06/26 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
社区结对共建协议书
2016/03/23 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers