本文适合于所有层次的Python学习者,包括AI爱好者和技术爱好者来学习。诚然,人工智能是个有着深刻数学逻辑的知识体系,包括机器学习,搜索问题,知识表示等等等等的理论。本文,严禁的说,我们只是简单调用了百度AI的成果,jacky通过本文希望给大家一个启发吧,毕竟理论是理论,实际是实际,赚钱是赚钱,就这样。

本文视频演示如下(由于环境因素的限制,这段演示视频是无声的,后期jacky 在Gitchat ,阿里云以及抖音都会有直播的分享,请大家关注):
视频演示链接

(一)先看看系统的效果

(二)系统实现的大致思路

本文的视频演示如下:

系统开发环境要求:
1.开发工具:Pycharm 、PyQt5
2.开发模块: urllib、urllib.request、Base64、json、PyQt5
3.API 接口:百度API

2.1 图片识别工具界面

  • PyQt5 桌面 GUI 开发

    • 这部分,是 jacky 上次主要的分享内容,不是很熟悉的朋友可以参见《Python 智能银行卡识别系统的实现 (1)— PyQt5 实现登陆功能》,也可以配合本次视频前面的操作演示来看。

2.2 选择识别类型

  • 我们要设定识别的银行卡,信用卡还是身份证等等

2.3 选择要识别的图片

  • 这里的主要难点就是要搞懂这句代码:self.label_3.setPixmap(scarePixmap),具体的代码注解可以参见第三部分的完整代码,其他的技巧点都是Qt 里东西,关于QPixmap的用法等等,因为不是逻辑性的东西,大家可以自行百度。

2.4 识别结果

  • 这里用到的就是百度的AI 接口,

2.5 复制到粘贴板

  • 这是PyQt5 的一些小功能,我们自行百度即可。

(三)完整代码

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ocr.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!# 原创:朱元禄(jacky)首发:数据分析部落(datashuju)from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import json
# 我们是Python3 ,在调用百度AI token 的时候不用官方文档中的urllib2,替换成 urllib.request
import urllib, urllib.request, sys
import ssl
import base64
# 这里输入自己获取的AK以及SK
API_KEY = "jacky提醒你,这里要输入你自己申请的AK,不要忘记"
SECRET_KEY = "jacky提醒你,这里要输入你自己申请的AK,不要忘记"class Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(793, 452)self.widget = QtWidgets.QWidget(Form)self.widget.setGeometry(QtCore.QRect(80, 41, 631, 371))self.widget.setObjectName("widget")self.gridLayout = QtWidgets.QGridLayout(self.widget)self.gridLayout.setContentsMargins(0, 0, 0, 0)self.gridLayout.setObjectName("gridLayout")self.pushButton = QtWidgets.QPushButton(self.widget)self.pushButton.setObjectName("pushButton")self.gridLayout.addWidget(self.pushButton, 2, 2, 1, 1)self.lineEdit = QtWidgets.QLineEdit(self.widget)self.lineEdit.setObjectName("lineEdit")self.gridLayout.addWidget(self.lineEdit, 2, 1, 1, 1)self.label_2 = QtWidgets.QLabel(self.widget)self.label_2.setObjectName("label_2")self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)self.label_3 = QtWidgets.QLabel(self.widget)self.label_3.setObjectName("label_3")self.label_3.setStyleSheet("background-color:gray")self.gridLayout.setObjectName("label_3")self.gridLayout.addWidget(self.label_3, 3, 0, 1, 3)self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)self.lineEdit_2.setObjectName("lineEdit_2")self.gridLayout.addWidget(self.lineEdit_2, 7, 0, 1, 2)self.pushButton_2 = QtWidgets.QPushButton(self.widget)self.pushButton_2.setObjectName("pushButton_2")self.gridLayout.addWidget(self.pushButton_2, 7, 2, 1, 1)self.label = QtWidgets.QLabel(self.widget)self.label.setObjectName("label")self.gridLayout.addWidget(self.label, 0, 0, 1, 1)self.comboBox = QtWidgets.QComboBox(self.widget)self.comboBox.setObjectName("comboBox")self.comboBox.addItem("")self.gridLayout.addWidget(self.comboBox, 0, 1, 1, 1)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "智能银行卡识别系统_v1.0"))self.pushButton.setText(_translate("Form", "选择"))self.label_2.setText(_translate("Form", "选择要识别的图片"))self.label_3.setText(_translate("Form", ""))self.lineEdit_2.setText(_translate("Form", "显示识别结果"))self.pushButton_2.setText(_translate("Form", "复制"))self.label.setText(_translate("Form", "需要识别的类型:"))self.comboBox.setItemText(0, _translate("Form", "银行卡"))self.comboBox.setItemText(1, _translate("Form", "身份证"))self.comboBox.setItemText(2, _translate("Form", "车牌号"))# 第一步,我们要让系统可以点击选择来获取我们要上传的图片self.pushButton.clicked.connect(self.openfile)# 第二步,设置选择图片的路径def openfile(self):self.download_path = QFileDialog.getOpenFileName(self.widget,"请选择需要识别的图片","/","Image File(*.jpg *.png)")# 判断是否选择了图片if not self.download_path[0].strip():passelse:self.lineEdit.setText(self.download_path[0])# 自动解析图像pixmap = QPixmap(self.download_path[0])# 选择图片,图片可能有大有小,我们简单的处理一下图片scarePixmap = pixmap.scaled(QSize(629,271),aspectRatioMode=Qt.KeepAspectRatio)# 把图片设置到我们的控件里self.label_3.setPixmap(scarePixmap)self.typeTp()# 第三步:选择类型def typeTp(self):if self.comboBox.currentIndex()==0:self.get_token()self.get_bankcard(self.get_token())def get_token(self):# client_id 为官网获取的AK, client_secret 为官网获取的SKhost = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+API_KEY+'&client_secret='+SECRET_KEYrequest = urllib.request.Request(host)request.add_header('Content-Type', 'application/json; charset=UTF-8')response = urllib.request.urlopen(request)content = response.read()if (content):print(content)# 解释返回的 token 数据self.access_token = json.loads(content)['access_token']return self.access_tokendef get_bankcard(self,access_token):url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard?access_token=' + access_tokenf = open(self.download_path[0], 'rb')  # 二进制方式打开图文件img = base64.b64encode(f.read())params = {"image": img}# 百度AI给的示例是Python2# params = urllib.urlencode(params)params = urllib.parse.urlencode(params).encode('utf-8')request = urllib.request.Request(url, params)request.add_header('Content-Type', 'application/x-www-form-urlencoded')response = urllib.request.urlopen(request)content = response.read()if (content):print(content)bankcards = json.loads(content)stover = '识别结果:\n'try:if bankcards['result']['bank_card_type'] == 0:bank_card_type = "不能识别"elif bankcards['result']['bank_card_type'] == 1:bank_card_type = "借记卡"elif bankcards['result']['bank_card_type'] == 2:bank_card_type = "信用卡"stover += '卡号: {}\n 银行:{}\n 类型:{}'.format(bankcards['result']['bank_card_number'],bankcards['result']['bank_name'],bank_card_type)except BaseException:stover += '解析错误'self.lineEdit_2.setText(stover)
if __name__ == "__main__":import sysfrom PyQt5.QtGui import QIconapp = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindowwidget = QtWidgets.QWidget()ui = Ui_Form()ui.setupUi(widget)# widget.setWindowIcon(QIcon('web.png'))#增加icon图标,如果没有图片可以没有这句widget.show()sys.exit(app.exec_())

Python 智能银行卡识别系统的实现 (2)—系统的实现相关推荐

  1. Python 智能银行卡识别系统的实现

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 本文视频演示如下: (一)先看看系统的效果 (二)系统实现的大致思路 系统开发环境要求: 1. ...

  2. Python 智能银行卡识别系统的实现 (1)— PyQt5实现登陆功能

    jacky 的一贯理念,学东西不要学表面,而要学本质.技术之上,永远都是哲学. 本文的视频演示如下: https://v.qq.com/x/page/v0890lmkjfo.html (一)PyQt5 ...

  3. python智能图片识别系统(图片切割、图片识别、区别标识)

    目录 技术介绍 运行效果 关键代码 写在最后 技术介绍 你好! python flask图片识别系统使用到的技术有:图片背景切割.图片格式转换(pdf转png).图片模板匹配.图片区别标识. 运行效果 ...

  4. 能“读懂”古文还可反诈骗, 合合信息智能文字识别“黑科技”亮相2022WAIC

    挑战"大师级"阅读理解,合合信息智能文字识别技术亮相2022世界人工智能大会 "克曰穆朕文且師華父悤譲氒心宁静于猷淑哲氒"要怎么断句?世界人工智能大会期间,一篇 ...

  5. 应用移动端银行卡识别技术,实现APP端快捷绑定银行卡号

    手机支付.网络支付已经非常成熟,消费者已经习惯了使用手机支付宝进行支付,用手机银行进行消费和转账.但是,整个线上支付流程中,还存在一个关键的步骤:输入绑定银行卡卡号.于是对于商业移动应用服务商来说,个 ...

  6. APP嵌入手机拍照银行卡识别接口,实现快速绑定银行卡号

    受支付宝银行卡识别的启发,腾讯随后在微信.QQ中添加银行卡识别功能,通过技术上的创新提升用户支付的体验,均得到用户的肯定.为此,更多的行业用户希望在其业务系统中集成手机拍照银行卡识别功能,比如:证券公 ...

  7. 中安银行卡识别服务介绍

    (一)产品概述 中安银行卡识别服务为用户提供了一个将海量影像资料快速转化为可以格式化存储的解决方案,达到数据采集.影像检索的目的,中安银行卡识别服务以世界领先水平的中安TH-OCR技术为基础,具备准确 ...

  8. 基于SpringBoot+Python多语言银行卡识别系统

    计算机视觉(Computer Vision)又称为机器视觉(Machine Vision),顾名思义是一门"教"会计算机如何去"看"世界的学科.在机器学习大热的 ...

  9. 【Python实现人脸比对】——打造智能人脸识别系统

    [Python实现人脸比对]--打造智能人脸识别系统 人脸比对是指对两张或多张人脸图像进行对比,判断它们是否属于同一个人的过程.在现代化社会的各个领域中,如金融.安防.旅游等等,人脸识别技术得到广泛应 ...

  10. Python OpenCV开发MR智能人脸识别打卡系统(一、需求分析与系统设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下链接 Python OpenCV开发MR智能人脸识别打卡系统(二.文件系统.数据实体模块设计) Python OpenCV开发MR智能人脸 ...

最新文章

  1. 商品秒杀,防并发解决思路
  2. 产权分割商铺,太坑人!
  3. torch 多进程队列 问题
  4. Android - N级树形结构实现
  5. pagerank数据集_从小白视角理解数据挖掘十大算法
  6. 因为安全层不能与远程计算机协商兼容的参数,L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误(转)...
  7. HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画
  8. FastGitHub for Mac(GitHub下载扩展工具)
  9. 关于 idea 快捷键 alt + f7 无法使用的一些尝试
  10. 引用nbsp;TDA2030功放电路图
  11. linux双网卡连不上网,linux 双网卡配置问题
  12. Oracle安装过程中出现的错误指令
  13. 织梦5.7登陆注册实现
  14. 【C++实战 】标准库
  15. 北京熊通科技 招聘FPGA研发工程师
  16. Spring 实战最新版中文版
  17. libvirt零知识学习3 —— libvirt源码编译安装(1)
  18. 软著申请材料,软著申请文件,软著登记材料,软著登记文件
  19. 动态时间规整DWT(Dynamic Time Warping)
  20. 超高清晰电影寻觅及下载技巧汇集

热门文章

  1. 穿戴-智能穿戴-ProjectGlass:谷歌眼镜(Google Project Glass)
  2. 取地址符和指针*的认识
  3. Racket编程指南——2 Racket概要
  4. 关于延拓定理的一点注解
  5. 春招面试的总结与自我反省
  6. 告“抄袭”花粥做号露露们,内容创业赛道的得利者,也是牺牲品
  7. opencv小案例 --- 证件照背景替换
  8. 有些参考文献找不到页码和期号怎么解决?
  9. 计算log以二为底的x用计算机,log以二为底x>1的解法
  10. 坚果pro2刷回官方_锤子坚果Pro2手机降回6.0.3版本教程