目录

  • 1.作者介绍
  • 2.基于百度API的身份证识别
    • 2.1 百度ORC接口简介
    • 2.2 算法介绍
      • 2.2.1图像预处理
      • 2.2.2身份证图像粗定位
      • 2.2.3细定位各种信息和分割
      • 2.2.4识别信息
  • 3.实验
    • 3.1实验准备
    • 3.2实验过程
  • 4. 完整代码

1.作者介绍

薛凯,男,西安工程大学电子信息学院,2021级研究生
研究方向:机器视觉与人工智能
电子邮件:1142268929@qq.com

刘帅波,男,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1461004501@qq.com

2.基于百度API的身份证识别

2.1 百度ORC接口简介

光学识别符Optical Character Recognition(ORC),其目标是对图像中的字符进行分析识别,将其转换为文本格式的字符序列。利用模式识别和数字图像处理技术解决文字输入问题。主要应用领域:牌照,票据,文稿,名片,身份证,驾驶执照,汽车制造业。

2.2 算法介绍

一个典型的身份证识别算法流程图如下:

2.2.1图像预处理

身份证图像的预处理是指对采集到的身份证图像进行灰度化和去噪处理,以使身份证图像图像的质量得到改善,同时保留和增强身份证中纹理和颜色的信息,去除可能影响身份证区域纹理和颜色信息的噪点,为身份证图像定位提供方便。主要方法:图像灰度化;图像灰度拉伸;空域滤波之中值滤波。

2.2.2身份证图像粗定位

使原始图像经过各种算法的处理后能够清楚地显示出身份证图像区域,同时使图像中的非身份证区域减弱,从而能准确有效地定位出身份证在图像中的位置。算法主要有:边缘检测法、数学形态学法、基于纹理分析的定位方法、行检测和边缘统计法、遗传算法,Hough变化和轮廓线法、基于小波变换的方法、神经网络法等。

2.2.3细定位各种信息和分割

由于身份证的信息位置固定,可直接指定ROI区域的子图像;或采用垂直投影和水平投影定位。

2.2.4识别信息

识别信息是计算量比较大的一部分。方法有模板匹配字符识别算法;统计特征匹配法(13线法);神经网络字符识别算法;SVM+特征提取;以及最近比较火的深度学习之CNN。测试时模板匹配识别率较低,利用SVM+特征提取识别较好。

3.实验

3.1实验准备

本次实验我们采用的是百度API进行识别,故需要安装baidu-aip模块
首先打开命令行,在里面输入pip install baidu-aip。

如上图,即是安装成功。
因为本项目采用pyqt5进行了界面编写,故还需要安装pyqt5模块。
打开命令行,在里面输入pip install pyqt5即可安装。
接下来需要去百度AI的官网去创建应用,获取AppID,APIKey,Secret Key。

3.2实验过程

本次实验采用的是网上搜集来的虚假身份证图片进行识别。首先打开图片,界面中会显示打开的身份证图片,点击开始识别,等待几秒,信息会出现在下方的文本框中。

如上图所示,成功识别到姓名、民族、住址、出生、性别等信息。

4. 完整代码

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *from aip import AipOcr#注意;开代理,无法连接至百度服务器,程序会崩溃。APP_ID = '*******'   # 填自己的APP_ID
API_KEY = '********'  # 填自己的API_KEY
SECRET_KEY = '********' # 填自己的SECRET_KEYclass picture(QWidget):def __init__(self):super(picture, self).__init__()self.resize(1200, 800)self.setWindowTitle("身份证识别")self.setWindowIcon(QIcon('1.png'))self.setWindowFlags(Qt.FramelessWindowHint)  # 去边框#self.setAttribute(Qt.WA_TranslucentBackground)  # 设置窗口背景透明window_pale = QtGui.QPalette()window_pale.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap("E:/IDcard/png/2333.png")))self.setPalette(window_pale)button_red = QPushButton(self)button_red.move(20, 20)button_red.setFixedSize(20, 20)button_red.setStyleSheet("QPushButton{\n""    background:#CE0000;\n""    color:white;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""QPushButton:hover{                    \n""    background:red;\n""}\n""QPushButton:pressed{\n""    border: 1px solid #3C3C3C!important;\n""    background:black;\n""}")button_red.clicked.connect(self.quit_button)button_orange = QPushButton(self)button_orange.move(50, 20)button_orange.setFixedSize(20, 20)button_orange.setStyleSheet("QPushButton{\n""    background:orange;\n""    color:white;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""QPushButton:hover{                    \n""    background:yellow;\n""}\n""QPushButton:pressed{\n""    border: 1px solid #3C3C3C!important;\n""    background:black;\n""}")button_green = QPushButton(self)button_green.move(80, 20)button_green.setFixedSize(20, 20)button_green.setStyleSheet("QPushButton{\n""    background:green;\n""    color:white;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""QPushButton:hover{                    \n""    background:#08BF14;\n""}\n""QPushButton:pressed{\n""    border: 1px solid #3C3C3C!important;\n""    background:black;\n""}")button_green.clicked.connect(self.min_button)self.label1 = QLabel(self)self.label1.setText("         图片显示区")self.label1.setFixedSize(500, 400)self.label1.move(350, 75)# self.label1.setStyleSheet("QLabel{background:white;}"#                          "QLabel{color:rgb(300,300,300,120);font-size:48px;font-weight:bold;font-family:微软雅黑;}"#                          )self.label1.setStyleSheet("QLabel{\n""    background:white;\n""    font-family:微软雅黑;\n""    color:black;\n""font-size:48px;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""}")self.text1 = QLineEdit(self)self.text1.setText("身份证信息")self.text1.setFixedSize(1140, 50)self.text1.move(30, 550)#self.text1.setFixedWidth(800);self.text1.setStyleSheet("QLineEdit{\n""    background:white;\n""    font-family:微软雅黑;\n""    color:black;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""QPushButton:hover{                    \n""    background:#00BFFF;\n""}\n""QPushButton:pressed{\n""    border: 1px solid #3C3C3C!important;\n""    background:black;\n""}")btn1 = QPushButton(self)btn1.setText("打开图片")btn1.resize(200, 100)btn1.move(150, 650)btn1.setStyleSheet("QPushButton{\n""    background:#6495ED;\n""    font-family:微软雅黑;\n""    color:white;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""QPushButton:hover{                    \n""    background:#00BFFF;\n""}\n""QPushButton:pressed{\n""    border: 1px solid #3C3C3C!important;\n""    background:black;\n""}")btn1.clicked.connect(self.openimage)btn2 = QPushButton(self)btn2.setText("开始识别")btn2.resize(200, 100)btn2.move(750, 650)btn2.setStyleSheet("QPushButton{\n""    background:#6495ED;\n""    font-family:微软雅黑;\n""    color:white;\n""    box-shadow: 1px 1px 3px;border-radius: 10px;\n""}\n""QPushButton:hover{                    \n""    background:#00BFFF;\n""}\n""QPushButton:pressed{\n""    border: 1px solid #3C3C3C!important;\n""    background:black;\n""}")btn2.clicked.connect(self.checkimage)def quit_button(self,event):reply = QtWidgets.QMessageBox.question(self,'身份证识别',"是否要退出程序?",QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,QtWidgets.QMessageBox.No)if reply == QtWidgets.QMessageBox.Yes:event.accept()else:event.ignore()#quit()def full_button(self):self.showMaximized()def mid_button(self):self.showNormal()def min_button(self):self.showMinimized( )def openimage(self):global imgNameimgName, imgType = QFileDialog.getOpenFileName(self, "打开图片", "", "*.jpg;;*.png;;All Files(*)")jpg = QtGui.QPixmap(imgName).scaled(self.label1.width(), self.label1.height())self.label1.setPixmap(jpg)def checkimage(self):#os.chdir(r'E:\IDcard')#print(imgName)picture = open(imgName, mode='rb')img = picture.read()# 读取图片idCardSide = 'front'  # 身份证正面#idCardSide = 'back'   #身份证反面options = {}options['detect_direction'] = 'true'  # 是否检测图像朝向,默认不检测options['detect_risk'] = 'false'  # 是否开启身份证风险类型client = AipOcr(APP_ID, API_KEY, SECRET_KEY)text = client.idcard(img, idCardSide, options)print(text)# 识别图片中的信息concat_text = []if isinstance(text, dict):words = text['words_result']for k, v in words.items():# print(u'{k}:{v}'.format(k=k, v=v['words']))tt = u'{k}:{v}'.format(k=k, v=v['words'])concat_text.append(tt)len1 = len(concat_text)if len1 >= 5:print(concat_text)self.text1.setText(concat_text[0]+"\n"+concat_text[1]+"\n"+concat_text[2]+"\n"+concat_text[3]+"\n"+concat_text[4]+"\n"+concat_text[5])if len1 <= 3:print(concat_text)self.text1.setText(concat_text[0] + "\n" + concat_text[1] + "\n" + concat_text[2])# 把字典解析成我们熟悉的形式def mousePressEvent(self, e):if e.button() == Qt.LeftButton:self.m_drag = Trueself.m_DragPosition = e.globalPos() - self.pos()e.accept()def mouseReleaseEvent(self, e):if e.button() == Qt.LeftButton:self.m_drag = Falsedef mouseMoveEvent(self, e):try:if Qt.LeftButton and self.m_drag:self.move(e.globalPos() - self.m_DragPosition)e.accept()except:print("错误代码:000x0")if __name__ == "__main__":app = QtWidgets.QApplication(sys.argv)my = picture()my.show()sys.exit(app.exec_())

Python调用百度API进行身份证识别相关推荐

  1. Python使用阿里API进行身份证识别

    Python使用阿里API进行身份证识别 1. 作者介绍 2. 身份证识别介绍 3. 调用阿里智能云API 4. 代码解析 4.1导入库 4.2 完整代码 4.3 实验结果 参考 1. 作者介绍 孟莉 ...

  2. python3调用百度API完成人脸识别,检测人种-年龄-性别-颜值-眼镜

    https://ai.baidu.com/docs#/Face-Detect/top 这个是百度人脸识别api 参考博客:https://blog.csdn.net/qq_38412868/artic ...

  3. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  4. Python实例之调用百度API实现车牌识别

    目录 1.作者介绍 2.车牌识别API介绍 3.实现过程 3.1 调用API 3.2 代码 参考 1.作者介绍 王世豪,男,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组. 研究 ...

  5. python调用百度接口实现ocr识别_Python 3调用百度OCR API实现剪贴板文字识别

    本程序调用百度OCR API对剪贴板的图片文字识别,配合CaptureScreen软件,可快速识别文字. #!python3 import urllib.request, urllib.parse i ...

  6. uniapp调用百度智能云身份证识别

    第一步:注册登录百度智能云平台https://login.bce.baidu.com/ 第二步:选择产品服务-人工智能-文字识别-创建应用 第三步:获取应用的API Key 和Secret Key 代 ...

  7. 关于调用百度云OCR身份证识别接口,用Java语言,识别结果缺少身份证号码的问题解决

    问题描述: 最近项目系统开发,使用到了相关证件的信息提取.识别,由于是学校科研使用,选择了百度云OCR文字识别的API.具体的相关识别身份等证件的代码将在另一篇文章中叙述,最近真的太忙了,草稿箱中还有 ...

  8. python调用百度api判断两张图片是否相同_python如何调用百度识图api

    一.先去百度识别官网注册开通服务且获得ak和sk 二.代码模板 import cv2 import base64 import requests import numpy as np import t ...

  9. 保姆级——Java调用百度OCR实现身份证识别

    具体实现功能和参数,可以看百度的API开发文档:https://ai.baidu.com/ai-doc/OCR/rk3h7xzck 其实我是看不懂API文档的 文章中的请求参数 调用百度的OCR需要做 ...

最新文章

  1. 从Android界面开发谈起(转)
  2. grails 转为java_创建一个grails项目,然后转成maven项目
  3. php socket 不能用,PHP无法用Socket方式连接MySQ
  4. php session有什么用,session有什么作用?
  5. 在C语言中,SetConsoleTextAttribute(参数1,参数2)是设置控制台窗口字体颜色和背景颜色的函数。GetStdHandle(参数)函数用于获得句柄
  6. 德鲁伊 oltp oltp_深入研究内存中OLTP表的哈希索引
  7. shell取得文件行数6法
  8. Java网络编程:TCP实现聊天
  9. mysql自增序列nextval并发_[DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题...
  10. iview render设置属性_iView 发布 3.4.0 版本,代号 BestLuck
  11. javascript 实现简单计算器
  12. python提取图像HOG特征
  13. 电脑开机没反应怎么办?
  14. matlab清除历史数据,以前在MATLAB中打开过的m文件的历史记录
  15. 笔记本电脑计计算机硬盘分区,笔记本电脑如何分区,教您笔记本电脑如何分盘...
  16. entity framework migration
  17. 区分当前用户SIM卡是移动还是联通
  18. C#之字符串公式计算
  19. Microsoft ODBC Driver 17 for SQL Server: 以前的某个安装需要重新引导计算机以便使更改生效。若要继续,请重新启动计算机,然后再次运行安装程序
  20. 倒计时1天 | 大势智慧2022新品发布会全面而来!

热门文章

  1. 产品项目分析之竞品分析
  2. 半导体ISO26262功能安全合规性开发的3P法则(下)
  3. UNITY与Mac⭐三、Unity打包苹果应用的教程
  4. 成功解决:Module build failed: Error: Vue packages version mismatch
  5. 计算机主板后的底座,更换损坏的CPU底座的方法
  6. java小程序:阿里巴巴自动登入获取cookie2
  7. 根据 MOB/vSphere APIs 获取 ESXi 服务器证书
  8. 一款通过人工智能AI计算无损放大图像软件
  9. 标准的淘宝买家必读写法(衣服篇)
  10. 拼多多2020秋招【提前批】笔试