毕业设计-深度学习身份证号码检测识别-python-opencv

news2024/11/22 15:43:34

目录

前言

课题背景和意义

实现技术思路

实现效果图样例


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯深度学习身份证号码检测识别

课题背景和意义

前1、2位数字表示所在省份的代码;第3、4位数字表示所在城市的代码;第5、6位数字表示所在区县的代码;第7~14位数字表示出生年、月、日;第15、16位数字表示所在地的派出所的代码;第17位数字表示性别,奇数表示男性,偶数表示女性;第18位数字是校检码,一般是随计算机随机产生, 用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。身份证号码自动识别在日常生活中有重大意义。

实现技术思路

识别流程

流程图

 

灰度图获取

读取图片之后,对图片进行处理,获得图片的灰度图。方法有二:
 
  1)使用imread读取图片的时候,第二个参数可以直接设置为0,即直接读取一张灰度图
  2)使用cvtColor函数,设置参数将彩色图转换为灰度图。(具体方法请百度)但若是前面imread读入的图片就已是灰度图,就不能使用cvtColor函数再进行转换,因为该函数不能转换单通道图片,会报错。
  获取了灰度图之后,对图片进行大小调整,调整为(450,600),方便后续获取身份证号码区域。

定位身份证号码区域

 获得图片之后,对图片进行二值化,然后进行闭运算。(定义结构元素后,可用morphologyEx函数进行闭运算)再用findContours函数检测外轮廓,找到每个轮廓的最小界矩形区域。由于身份证号码区域长宽比为一个常数(约为18),设置一定的误差值之后,便可找到符合这一长宽比的矩形,就是身份证号码区域。(图中画出黑框)


裁剪身份证区域

 

前一步找到身份证的区域,并且可以通过RotatedRect类(该类表示平面上的旋转矩形,有质心、边长、旋转角度三个属性)存储矩形区域。使用getRectSubPix函数从图片中裁剪出指定的矩形区域,然后再用resize函数调整图片的尺寸,变为(20,300),便于后面的数字切割。


 号码切割

 

对号码图片进行二值化后(若之前已进行二值化则不需要再进行),将每一个号码单独切割开来,进行识别。

切割的原理:先创建一个等同于图片列数的flag向量。遍历每一列,对于每一列中,再遍历每一行。若该列中存在一行有黑色像素点,则将该列对应的flag标注为true,否则为false,标注为true的列表示属于数字的一部分。
  然后遍历flag向量,找到标注为true,并且后两个标注为false的那一列,可以认为是到了数字的边缘。同时在遇到true时,应该设置一个变量,记录数字的宽度为多少列,目的是通过找到后边缘与列数,算出前边缘的x坐标,便于后续切割。
  举个例子:如下图,flag为T的表示该列有像素,count统计有像素的列数,由于我们能得到count=14处的x坐标,x-14就为count=0处的坐标,之后便可以使用Rect函数进行切割。并保存在图片数组中。

 

提取号码特征

号码的特征为梯度分布特征、灰度分布特征、水平/垂直方向直方图,每个字符最后都能得到一个1*72的特征向量。计算机主要就是依靠号码的特征,与已经训练好的神经网络进行匹配,以此达到对数字进行辨别。

找到训练样本及提取样本特征

使用与上一步相同的函数对样本进行特征提取,包括0~9和X,每个数字有50个样本。提取后将其存到trainData中,将trainData和样本的类的标识classes存储到文件ann_xml.xml中,之后便可以直接调用而不需要再次运行该函数。

神经网络训练

读入ann_xml.xml文件。创建一个3层的神经网络,输入层结点数设置为72,隐藏层结点数为24,输出层结点数为10。(因最后一位为矫正位,并且最后一位识别难度较大,因此只识别前17位,最后一位可通过公式计算出)设置训练方法、激活函数、迭代次数和误差最小值等,使用ann->train对神经网络进行训练。并将训练好的神经网络保存为文件,之后便可直接调用已经训练好的网络,大大节省程序运行的时间。


比对分类

使用训练好的神经网络对数字进行分类,输入的数字为第五步切割得到的数字图片。使用ann->predict对输入的图片进行预测,找出与输入图片的特征最相似的结果,就是结果。

实现效果图样例

 

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Security HTTP认证

本文内容来自王松老师的《深入浅出Spring Security》,自己在学习的时候为了加深理解顺手抄录的,有时候还会写一些自己的想法。 HTTP提供了用户权限控制和认证的通用方式,这种认证方式通过HTTP请求头来提供认证信息,而不是通过表单…

[附源码]计算机毕业设计基于Springboot校园运动会管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

opencv c++ 霍夫圆检测

1、原理 a)对某点,以其为圆心的圆为无数(一圈圈的圆),将其从x-y平面坐标系上转换到r-θ极坐标系上后,则变成了以r、θ为自变量,为固定值,x、y为因变量的式子: b&#xff…

一文带你走进JS语法(最全笔记)

目录 基本语法 1.引入方式 2.注释 3.输入输出语句 4.变量和常量 5.原始数据类型 6.运算符 7.流程控制语句 8.数组 9.函数 DOM 1.概述 2.元素对象的操作 3.元素内属性操作 4.元素内文本操作 事件 面向对象 1.定义类的方式 2.继承 内置对象 1.Number对象 2…

matlab贝叶斯隐马尔可夫hmm模型实现

贝叶斯隐马尔可夫模型是一种用于分割连续多变量数据的概率模型。该模型将数据解释为一系列隐藏状态生成。每个状态都是重尾分布的有限混合,具有特定于状态的混合比例和共享的位置/分散参数。 相关视频:马尔可夫链原理可视化解释与R语言区制转换Markov r…

java面试总结

文章目录JVM类的加载过程类加载器有哪些什么是双亲委派双亲委派的好处如何打破双亲委派java内存模型栈帧的结构java堆的分代设计对象内存分配对应的GC为什么需要Survivor区?只有Eden不行吗?为什么要有两个Survivor区对象创建过程对象内存布局对象头Mark Word对象大…

提高 K8S 容器运行时的可观察性最佳方法之一

当谈到云原生可观察性时,可能每个人都会提到OpenTelemetry (OTEL),因为社区需要依赖标准来将所有集群组件开发指向到同一方向。OpenTelemetry 使我们能够将日志、指标(metrics)、跟踪(traces)和其他上下文信…

内容爆炸时代,如何打造品牌经营的“弹药库”?

👆点击一键预约本周三主题直播👆2017年,华为总裁办发布《华为之熵,光明之矢》的内部学习邮件,将热力学中“熵”的概念应用到企业管理中,成为被人们津津乐道的“熵减哲学”。对于“熵”的概念,大…

[附源码]计算机毕业设计基于vuejs的文创产品销售平台app

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]计算机毕业设计甜品购物网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【OpenCV-Python】教程:4-2 Harris角点检测

OpenCV Python Harris 角点检测 【目标】 理解Harris角点检测背后的概念;cv2.cornerHarris(), cv2.cornerSubPix() 【理论】 上一章节中,我们看到在图像中每个方向变化都很大的区域就是角点,一个早期的尝试是由 Chris Harris & Mike …

关闭图片窗口

关闭图片窗口 结果演示 概述 通过事件的绑定来实现&#xff0c;关闭网页中某个图片窗口的效果。 构建HTML框架 <body><div class"box">图片<img src"https://upload-bbs.mihoyo.com/upload/2021/03/11/73281682/f810fbc2e4806aab8176e96feee…

关于数据分析知识的干货分享

数据分析的出现是因为人类难以理解海量数据所呈现出来的信息&#xff0c;不能从中找到相应的规律来对现实中的事物进行对应&#xff0c;我们都知道数据有很高的价值&#xff0c;但不能利用的价值&#xff0c;没有任何意义。 为了解决这一问题&#xff0c;数据分析在长期的数据…

超透镜与超表面全息

超透镜和超表面因其操纵电磁场的独特特性而在科学上声名鹊起&#xff0c;如今它们的制造已经变得可行。但它们的设计难度远远超过了传统镜片&#xff0c;因为必须考虑到纳米级构件的特性。 VirtualLab Fusion的优势  统一的平台&#xff1a;具有将纳米级构建模块和大尺…

JAVA-GUI工具的编写-----事件篇

上一节介绍了HTTP以及HTTPS请求&#xff0c;那么这里我们就接着讲解事件与请求联动。 关于POC以及EXP最大的区别就是&#xff0c;EXP是附带利用功能&#xff0c;而POC仅仅是检测功能&#xff0c;所以这里我们需要动起来&#xff0c;GUI小工具能用上的事件功能其实就两个&#…

【vue3】代码自动格式化和volar卡顿问题解决

一、格式化策略 用eslint做代码检查和格式化是很方便的东西&#xff1b; 这里我们使用vscode完成这些操作&#xff1b; 在代码保存的时候&#xff0c;顺便完成格式化操作 1)装上eslint和prettier插件 2)装完插件之后&#xff0c;我们需要配置一下 打开 文件 > 首选项 >…

为什么阿里巴巴建议HashMap初始化时需要指定容量大小?

为什么阿里巴巴建议HashMap初始化时需要指定容量大小&#xff1f; 为什么&#xff1f; 关于集合类&#xff0c;《阿里巴巴Java开发手册》中写道&#xff1a; 我们先来写一段代码在JDK 1.7 &#xff08;jdk1.7.0_80&#xff09;下面来分别测试下&#xff0c;在不指定初始化容量…

Docker harbor私有仓库部署与管理

Docker harbor私有仓库部署与管理Docker harbor私有仓库部署与管理一、Docker 私有仓库1、下载registry镜像2、修改配置文件/etc/docker/daemon.json &#xff0c;添加私有仓库配置&#xff0c;修改完后重启docker3、创建私有仓库容器4、推送镜像到私有仓库中5、查看当前仓库的…

使用 Lua 脚本和海康 VisionMaster 进行 TCP 通信

说明&#xff1a;因任务需求&#xff0c;需要进行海康VisionMaster服务端和Lua脚本客户端进行TCP通信传输数据。因为之前从未接触过Lua语言&#xff0c;所以也趁机学习一波。 内容Lua教程手册LuaSocket使用方法一方法二报错&#xff1a;“attempt to compare number with strin…

高级_09.性能分析工具的使用

第09章_性能分析工具的使用 1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1f;这里把思考的流程整理成下面这张图。 整个流程划分成了观察&#xff08;Show status&#xff09;和行动&#xff08;Action&#xff09;两个部分。…