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中使用OpenCV进行人脸检测的例子
Apr 18 Python
Python常用模块用法分析
Sep 08 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
Python3数字求和的实例
Feb 19 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
python创建学生成绩管理系统
Nov 22 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
如何使用flask将模型部署为服务
May 13 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
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
PHP 七大优势分析
2009/06/23 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
详解JS面向对象编程
2016/01/24 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
pytorch加载自己的图像数据集实例
2020/07/07 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
办公室助理岗位职责
2013/12/25 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
公司投资建议书
2014/05/16 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
党员读书活动心得体会
2016/01/14 职场文书
电力安全学习心得体会
2016/01/18 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
Nginx服务器如何设置url链接
2021/03/31 Servers