【身份证识别】BP神经网络身份证号码识别【含Matlab源码 1344期】

news2025/1/13 10:24:10

⛄一、身份证号码识别简介(附课题作业报告)

1 引言
当今是一个信息高度发达的时代,对于每个公民而言身份证那一连串的数字体现了个人信息的唯一性,出于保障公民合法权益和社会治安的考虑,越来越多的行业都开始建立自己的安全保障体系,其中最为关键的就是身份证号码登记管理。身份证号码的录入全部采用手动输入的方式,这是项非常繁琐的工作,手动录入方式一方面耗费了大量的人力,浪费了时间,另一方面又容易出错,录入正确率偏低。因此,如何快速录入身份证号码已成
为迫切需要解决的问题
随着人工神经网络技术的快速发展,神经网络在处理数据方面具备快速性和高效性,图像识别技术的研究和应用也取得了突破性进展,应用神经网络识别身份证号码,可以提高识别的准确性和鲁棒性。因此, 笔者利用MATLAB GUI和神经网络设计开发了一个可快速识别身份证号码的仿真平台。

2 BP神经网络
人工神经网络是对人脑或者生物神经网络若干基本特性的抽象和模拟,使机器拥有和人脑一样的感知、学习和推理能力。神经网络系统是一个复杂而庞大的非线性系统,它的信息主要由若干个结构简单的处理单元按照某种连接方式对数据进行映射来传递。
BP神经网络是一种多层前馈神经网络,已成为应用最广、发展最成熟的一种人工神经网络,由输入层、隐含层和输出层组成,三层BP神经网络的拓扑结构如图1所示,层与层之间采用全互连方式,同一层之间不存在相互连接,隐含层可以有一层或多层。由于BP神经网络具有完善的理论体系、清晰的算法流程、清晰的数据识别和模式功能。绝大部分解决非线性系统问题的神经网络模型都采用BP神经网络或其变化形式。它也是前向网络的核
心部分,体现了人工神经网络的精华。
在这里插入图片描述
图1三层BP神经网络的拓扑结构
MATLAB的神经网络工具箱(Neural NetworkToolbox)功能完善, 提供了神经网络的建立、训练和模拟等函数,以及各种改进训练算法函数,用户可以很容易地设计和模拟神经网络,也可以在MATLAB源代码的基础上进行适当修改, 形成自己的工具包以满足实际需要。本文采用的训练函数是具有较快收敛速度且能避免局部最小问题出现的train gdm函数, BP网络的输入与输出节点数根据实际情况来决定,与网络性能无关,网络结构最关键是确定隐含层节点数,经反复验证,本系统当隐含层节点数为35时,计算误差MSE最小。

⛄二、部分源代码

%根据身份证号码区图像和数字标号,显示该数字对应的图像信息
function I_ID_1 = get_number(I_ID,i)
img_reg_1 = regionprops(I_ID, ‘area’, ‘boundingbox’);%统计被标记的区域的面积分布
rects_1 = cat(1,img_reg_1.BoundingBox);%联结连通域
num_1 = find(rects_1(:,4) > 20);%根据身份证高度信息,筛选身份证数字信息
if length(num_1) ~= 18
disp(‘身份证号码识别错误’);
end
clear;close all;clc;

[filename,filepath]=uigetfile({‘.jpg’;'.bmp’},‘输入一个需要识别的图像’);
file=strcat(filepath,filename);
ID_origin=imread(file);

ID_origin=imresize(ID_origin,[2560 2100]);
ID_normalization = im2double(ID_origin);
ID_binaryzation0 = im2bw(ID_normalization,0.4);
ID_binaryzation1 = im2bw(ID_normalization,0.3);
ID_strel = strel(‘disk’,2);
ID_binaryzation=imdilate(ID_binaryzation1,ID_strel);

figure(‘name’,‘身份证原始图’);
subplot(2,2,1);
imshow(ID_origin);
title(‘身份证原图’);
subplot(2,2,2);
imshow(ID_binaryzation0);
title(‘二值化系数0.4’);
subplot(2,2,3);
imshow(ID_binaryzation1);
title(‘二值化系数0.3’);
subplot(2,2,4);
imshow(ID_binaryzation);
title(‘二值化+膨胀处理’);

ID_contrary = ~ID_binaryzation;
ID_strel = strel(‘line’, 20 , 0);
ID_bulk_1=imdilate(ID_contrary,ID_strel);
ID_bulk_2=imdilate(ID_bulk_1,ID_strel);
ID_bulk_3=imdilate(ID_bulk_2,ID_strel);

figure(‘name’,‘身份证膨胀图像’);
subplot(221),imshow(ID_contrary);
title(‘身份证原始图像’);
subplot(222),imshow(ID_bulk_1);
title(‘身份证1次膨胀后的图像’);
subplot(223),imshow(ID_bulk_2);
title(‘身份证2次膨胀后的图像’);
subplot(224),imshow(ID_bulk_3);
title(‘身份证3次膨胀后的图像’);
suptitle(‘身份证膨胀图像’);%显示主标题

% 获取连通域

rects = cat(1,img_reg.BoundingBox);

figure(‘name’,‘身份证划分区域’),
imshow(ID_bulk_3);
for i = 1:size(rects, 1)
rectangle(‘position’, rects(i, 😃, ‘EdgeColor’, ‘r’);
end

num1 = find(abs(rects(:,3)-1200)<80);
num2 = find(abs(rects(:,4)-62)<10);
num = intersect(num1,num2);%获取相同序列值
rectangle(‘position’, rects(num,:), ‘EdgeColor’,‘g’);
title(‘身份证划分区域’);

%提取身份证号码区域
[I_x,I_y] = size(ID_bulk_3);
ID_x = floor(rects(num,2)):ceil(rects(num,2)+rects(num,4));
ID_y = floor(rects(num,1)):ceil(rects(num,1)+rects(num,3));
I_ID = ID_contrary(ID_x,ID_y);
figure(‘name’,‘身份证号码区’);
imshow(I_ID);
title(‘身份证号码区’);

img_reg_1 = regionprops(I_ID, ‘area’, ‘boundingbox’);
rects_1 = cat(1, img_reg_1.BoundingBox);

figure(‘name’,‘身份证号码数字区’),
imshow(I_ID);
for i = 1:size(rects_1, 1)
rectangle(‘position’, rects_1(i, 😃, ‘EdgeColor’, ‘r’);
end
title(‘身份证号码数字区’);

figure(‘name’,‘身份证数字分割显示’);
suptitle(‘身份证数字分割显示’);
for i = 1:18

I_ID_1 = ~I_ID_1;
JPG = ones(100,100);
[JPG_x,JPG_y] = size(I_ID_1);

subplot(3,6,i);
imshow(JPG); 
name=strcat(int2str(i),'.bmp');
imwrite(JPG,name);

end

clc;
load NET_new net;
for i = 1:18
% name=strcat(‘10 (’,int2str(i),‘).bmp’);
name=strcat(int2str(i),‘.bmp’);
JPG_origin = ~imread(name);

[a,Pf,Af]=sim(net,BMP);           
result(i) = round(a);

end
%% 检验身份证信息
ID_test = result(1:17);
ID_check = [7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ];
ID_sum = sum(ID_test.*ID_check);
TD_mod = mod(ID_sum,11) + 1;
ID_last = [1 0 10 9 8 7 6 5 4 3 2];
ID_18 = ID_last(TD_mod);
%验证身份证信息是否正确,保存文档至txt
if ID_18 == result(18)
disp(‘身份证信息识别成功!’);
fid = fopen(‘身份证号码.txt’,‘wt’);
fprintf(fid,‘%g’,abs(result(1:17)));
if result(18) == 10
fprintf(fid,‘X’);
else
fprintf(fid,‘%g’,abs(result(18)));
fopen(fid);
end
else
disp(‘身份证信息识别错误!’);
end

result

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]李开,陈礼安,曹计昌.基于灰度多值化的身份证号码识别[J].计算机工程与应用. 2015,51(13)
[2]成利敏,孙亮,王宁.基于BP神经网络和GUI的身份证号码识别系统[J].廊坊师范学院学报(自然科学版). 2019,19(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

数据价值深度挖掘,分析服务上线“探索”能力

近日&#xff0c;华为分析服务6.9.0版本发布&#xff0c;正式上线探索能力。开发者可自由定义与配置分析模型&#xff0c;支持报告实时预览&#xff0c;数据洞察体验更加灵活与便捷。 新上线的探索能力中&#xff0c;有漏斗分析、事件归因、会话路径分析三个高级分析模型。在原…

45-Jenkins-Sidebar Link插件实现添加侧边栏

Sidebar Link插件实现添加侧边栏前言安装插件使用插件自由风格项目使用Pipeline项目使用前言 本篇来学习下使用Sidebar Link插件在项目侧边栏添加自定义功能按钮链接 安装插件 Manage Jenkins --> Mangage Plugins --> 可选插件 --> 输出框输入 Sidebar Links 使…

【猿如意】中的『Bluefish』工具详情介绍

目录 一、工具名称 二、下载安装渠道 2.1 什么是猿如意&#xff1f; 2.2 如何下载猿如意&#xff1f; 2.3 如何在猿如意中下载开发工具&#xff1f; 三、Bluefish工具功能简介 四、Bluefish的下载和安装 4.1下载Bluefish 4.2安装Bluefish 五、Bluefish的基本使用 5.1…

Linux学习02-主机管理与磁盘分区

1 Linux与硬件的搭配 实际上&#xff0c;在Linux服务器中&#xff0c;内存的重要性比CPU重要。因为内存不够就会使用到硬盘的内存交换分区。 显卡对于不需要X-Windows的服务器来哦说&#xff0c;是最不重要的一个组件。 各设备在Linux中的文件命名。 在Linux系统中&#xf…

Linux常用调试工具

编译阶段 Linux入门 nm 获取二进制文件包含的符号信息 strings 获取二进制文件包含的字符串常量 strip 去除二进制文件包含的符号 readelf 显示目标文件详细信息 objdump 尽可能反汇编出源代码 addr2line 根据地址查找代码行 运行阶段 gdb 强大的调试工具 ldd 显示程序需…

大咖说|云端即时渲染:下一代互联网的算力基座?

阿里云【大咖说】子系列【计算讲谈社】第十五讲播出&#xff01; 下一代互联网是什么&#xff1f;其算力基座又是什么&#xff1f; 14:00-15:30 全网播出&#xff1a;【计算讲谈社】第十五讲&#xff0c;蔚领时代创始人兼CEO郭建君、蔚领时代数字人事业部总经理费元华、蔚领时…

云工作站这5大新功能不来体验一下吗?

哈喽&#xff0c;大家周五好哇&#xff01;赞奇云工作站又有更新大动作啦&#xff0c;此次更新包括子账号登录设备限制、内客户端控制台视觉优化、新增子账号删除、客户端支持工作区网络的接入方式、桌面名称功能&#xff0c;下面就一起来看看更新的具体内容吧—— 为了提高企业…

直播弹幕系统(四)- 发送弹幕校验登录整合JWT

直播弹幕系统&#xff08;四&#xff09;- 发送弹幕校验登录整合JWT前言一. 整合JWT1.1 改造Socket服务1.2 测试前言 上一篇文章 直播弹幕系统&#xff08;三&#xff09;- 直播在线人数统计 主要讲了利用Redis对一个直播间的在线用户做出统计。那么这篇文章&#xff0c;就要对…

为什么量子力学需要大修? - 易智编译EaseEditing

圣安东尼奥——量子力学是科学的政治两极分化。 选民要么站在一边无休止地争论&#xff0c;要么呆在家里接受政治现状。物理学家要么接受量子力学并进行计算&#xff0c;要么在关于量子力学究竟是如何描述现实的无休止辩论中站队。 史蒂文温伯格(Steven Weinberg)过去对量子力…

Java+MySQL基于SSM的爱心救助车队管理系统的设计与实现 开题 毕业设计

随着我国国民经济的发展和人文素质的不断提高,越来越多的爱心人士出现在了社会的各种角落之中,其中的哥和爱心人士,组织了一种基于交通和车辆之间的互助的民间组织,这种组织叫做雷锋爱心车队,而且雷锋爱心车队已经在我们各大城市相继出现。为了能够帮助车队之间更好的进行管理,…

Linux/macOS 安装 Kaldi

文章目录一、关于 kaldi二、安装1、下载源码2、查看 INSTALL 文件root -- INSTALLtools -- INSTALLsrc -- INSTALL3、处理tools4、处理 src三、测试报错1&#xff1a;Bad FST header报错1&#xff1a;gmm-init-mono: command not found一、关于 kaldi Kaldi is a toolkit for …

OpenMAX——数据格式OMX输入缓冲

开放多媒体加速层&#xff08;英语&#xff1a;Open Media Acceleration&#xff0c;缩写为OpenMAX&#xff09;&#xff0c;一个不需要授权、跨平台的软件抽象层&#xff0c;以C语言实现的软件接口&#xff0c;用来处理多媒体。它是由Khronos Group提出的标准&#xff0c;也由…

[整型/浮点型二分算法详解]二分查找算法真的很简单吗

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、二分查找是什么二、二分查找…

html大作业【NBA篮球介绍 22个页面】学生网页设计源码

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

python教你如何跳过验证识别登录并自动发送弹幕

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 开发环境: Python 3.8 Pycharm 2021.2 谷歌浏览器 谷歌驱动 模块使用: selenium >>> pip install selenium3.141.0 指定版本安装 time 打码平台 安装python第三方模块: win R 输…

程序猿的福音——猿如意使用有感

猿如意介绍&#xff1a; 猿如意是一款面向开发者的辅助开发工具箱&#xff0c;包含了效率工具、开发工具下载&#xff0c;教程文档&#xff0c;代码片段搜索&#xff0c;全网博文搜索等功能模块。帮助开发者提升开发效率&#xff0c;帮你从“问题”找到“答案”。 猿如意的下…

KEIL5软件仿真支持的器件

问题的提出 用KEIL进行软件仿真&#xff0c;想观察一下处理器STM32F091RCY的I2C和DAC引脚输出的波形&#xff0c;发现无法向波形中添加信号&#xff0c;如下图所示 当在命令行中输入 dir vtreg 指令时&#xff0c;仅仅能够显示内核的寄存器&#xff0c;外设的寄存器无法输出&a…

【DevOps实战系列】第九章:详解Sonarqube搭建及集成Jenkins环境

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 质量安全审计&#xff1a;Sonarqube Sonarqube(声呐)大家应该不陌生&#xff0c;通过扫描代码分析代码质量与代码安全&#xff0c;方便我们快速定位代码缺陷、潜在风险。 个人建议&#xff1a;…

希尔贝壳邀您参加 ISCSLP 2022 Program

第十三届中文口语语言处理国际会议将于2022年12月11-14日&#xff08;本周日~下周三&#xff09;正式开启&#xff0c;本次会议中的部分Session将通过语音之家视频号进行线上直播&#xff0c;欢迎大家参加&#xff01; 官网&#xff1a;www.iscslp2022.org 大会简介 中文口语…

别再秃头背锅了,这个小技巧统计第三方接口耗时很安逸

前言 之前我有写过一篇记录生产环境事故的文章&#xff0c;获得了不少好评。 后续&#xff0c;我们团队有做过一些讨论&#xff0c;为了支撑运营维护&#xff0c;搭建了更好的日志平台 GranfaLoki&#xff0c;也引入了 SkyWalking 做链路追踪。 但过程中也遇到了一些问题&#…