身份证识别系统(安卓)

设计内容与要求:

  • 通过手机摄像头捕获身份证信息,将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中。
  • 1)所开发Apps软件至少需由3-5个以上功能性界面组成。要求:界面美观整洁、方便应用;可以使用Android原生XML布局或者综合使用H5技术(综合使用Html5、CSS3和ES6技术或使用开源框架uni-app或Weex)来实现。
  • 2)在系统设计上要充分考虑后期扩展和需求变化的可能,软件因进行合理分层抽象设计,Apps应用系统采用MVC模式。
  • 3)合理使用ListView、Button、ImageView、WebView等用户控件进行数据提交;
  • 4)根据功能需要使用SqlLite数据库保存应用信息,完成数据的添加、删除和更新操作;
  • 5)界面跳转时需要用到Intent技术;
  • 6)根据功能需要合理使用网络编程技术;
  • 7)使用Service技术完成后台服务;
  • 8)最终客户端程序需要部署在手机上进行应用功能检查。

前言

        本课题为基于Android平台的身份证识别应用程序开发。其目的是掌握Android开发技术和调用图像处理接口,实现一个功能完善、界面友好、操作简便的身份证识别应用程序。

        在整个项目的设计中要实现的任务有:调用阿里云OCR接口完成识别、调用相机、获取内部存储图片、数据提取、数据库操作、识别相关界面编写、我的页面编写、首页页面编写以及界面优化等。

        本项目最终实现了如下主要功能:拍照识别身份证信息、从相册选择照片识别身份证信息、显示身份证信息及头像、保存识别结果、查询识别结果等。

     项目采用MVC架构设计,将应用程序分为三个模块:视图(View)、控制器(Controller)和模型(Model)。其中,视图模块负责用户界面设计和与用户的交互;控制器模块负责控制应用程序的流程和业务逻辑;模型模块负责实现算法和业务数据处理。

  • 开发环境:JDK11
  • 开发语言:Java
  • 开发工具:Android Studio
  • 目标 API 版本:31

 一、需求分析

1.1 可行性分析

        身份证识别技术已经发展较为成熟,具备高准确性和稳定性。通过计算机视觉、图像处理和深度学习等技术手段,可以有效地实现身份证信息的自动识别和提取。

        身份证作为个人重要的身份证明,其信息必须准确无误。身份证识别技术在设计和实现时,需要充分考虑不同类型、不同格式的身份证,并保证对各种情况下的身份信息都能进行准确的识别和提取。

        身份证识别一般需要使用身份证阅读器或者相应的摄像设备进行图像采集。目前,各类设备已经广泛应用于自助服务终端、门禁系统等场景,提供了便捷的硬件设备支持。

        通过手机摄像头捕获身份证信息,并将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中是完全可行的。目前,阿里等公司已经提供了很多AI SDK,如OCR、Face++等,这些SDK能够快速准确地识别身份证上的文字和数字。而且,利用移动端的相机和阿里等公司提供的云计算服务,将身份证信息上传到服务器上也可以实现。因此,该功能的可行性是非常高的。

1.2 功能需求分析

  • 实现身份证信息的捕获:需要通过手机摄像头获取身份证上的姓名、性别、出生年月、身份证号码等信息。
  • 利用AI SDK进行身份证信息识别:利用阿里等公司提供的OCR SDK实现对身份证上文字和数字的快速准确识别,并将其转换为字符串。
  • 将识别结果保存在数据库中:将OCR识别得到的身份证信息存储在数据库中,以供后续查询和使用。
  • 建立用户界面:建立移动端程序的用户界面,让用户可以轻松方便地捕获身份证信息并进行信息确认。
  • 数据库管理:确保数据库的稳定性,数据的安全性和保密性。
  • 对程序进行测试和优化:在完成开发之后,对程序进行测试,发现问题及时解决,确保程序的稳定性和流程的顺畅性。优化程序的响应速度和用户体验,提高程序的易用性。
  • 结果展示和保存:系统需要将识别出的身份证信息展示给用户,并提供保存等功能。

二、系统设计

2.1 整体结构介绍

图2-1 产品整体结构图

该产品结构主要包括数据采集、数据处理层、数据显示层等,如图2-1所示。进行系统划分得系统架构图如图2-2所示。

图2-2 系统架构图

2.2 系统功能图

图2-3 系统功能图

身份证识别系统的功能如图2-3所示,主要包括:

  • (1)身份证信息采集检测功能: 通过相机对身份证信息进行采集。
  • (2)上传身份证照片功能:通过本地文件选取向App上传身份证照片
  • (3)拍照识别功能: 通过拍照向App上传身份证照片
  • (4)数据管理功能:用摄像头采集身份证图片,上传到阿里云服务器。服务器通过识别,将数据返回。硬件得到相应的数据之后,结合Android中的SQLite对识别的信息进行管理和存储。
  • (5)免费领取次数:新用户可以免费领取一定数量的识别次数
  • (6)购买识别次数功能:次数耗尽后可以根据自己需求购买不同数量的次数
  • (7)新手手册功能:详细讲解此APP各功能的使用和注意事项
  • (8)常见故障和解决功能:常见故障的举例以及处理方式
  • (9)我的信息功能:可以查询并修改个人用户的信息
  • (10)联系客服功能:如果需要反馈意见可以从此处获取软件客服的联系方式
  • (11)帮助功能:跳转到新手手册页面
  • (12)隐私功能:设置用户多方面的隐私权限
  • (13)稍后阅读功能:了解更多此软件未来可能开发的功能

2.3 系统主流程图

系统主流程如图2-4所示.

图2-4 系统主流程图

系统流程图说明:首先我们识别时,可以选择是拍照还是选择本地照片,来进行识别身份证,是YES的话,就说明是选择身份证,否则是拍照。之后对这个照片进行判断是否为身份证照片,这一步在识别时,在代码中进行判断,传回的信息为身份证信息才会显示身份证识别成功,否则进入返回选项。识别成功后,我们可以选择是否存储识别到的身份证数据,YES存储,否则进行返回确认,不返回,就可以重新执行上述操作,返回的话就退出识别,可以选择是否进入数据管理,是的话,就进入,否则结束。进入数据管理后,我们可以根据姓名或者身份证号查询身份证信息,或者直接查看全部信息,也可以根据身份证号删除信息,也可删除全部数据,之后我们不选择退出的话可以一直进行数据管理,否则就结束。

2.4 拍照识别流程图

图2-5 拍照流程图

拍照识别流程说明:首先我们点击拍照,会判断我们有没有权限,没有的话就申请权限,申请成功后,进入拍照界面,然后拍完照片,返回一个照片的路径,并把该路径传递给我们的编写身份证识别函数,如果照片出现失真,就会弹出识别失败,照片正常就会显示识别结果。


三、详细设计与实现

3.1 代码结构

图3-1 Java代码结构图

图3-2 布局代码结构图

3.2 核心技术

  • Android 的应用间通信(Inter-Component Communication)技术
  • CRUD(SQLite的增删改查)
  • 云计算核心应用

3.3 实现过程

3.3.1 调用阿里云OCR接口

首先我们需要找到阿里云的身份证识别服务,要开通身份证识别服务可以访问此网址阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台,之后访问网址RecognizeIdcard_印刷文字识别_API调试-阿里云OpenAPI开发者门户,可以获得SDK代码示例,我们将其拷贝到项目中,进行调用,需要我们的accessKeyId和accessKeySecret,我们可以在阿里云个人主页中进行获取。之后我们按照流程可以编写函数,使其传入一张图片的路径,然后在内部调用我们的身份证识别接口来对图片进行识别。

因为识别完成后返回的数据为JSON数据,需要进行二次处理,来获得我们想要的身份证信息的数据。所以编写一个处理JSON数据的函数获取我们想要的特定的身份证信息。

3.3.2 拍照识别
  • 首先,在需要进行拍照的地方,比如按钮点击事件中,你可以创建一个用于处理拍照结果的回调方法。
  • 创建保存照片的 Uri(Uniform Resource Identifier),它是用来标识照片保存位置的唯一标识符。在 Android 中,可以根据 Android 版本的不同采用不同的方式来创建 Uri。
  • 在 Android Q (10.0)及以上的版本中,可以使用 MediaStore 类提供的 API 来创建 Uri,并将其存储到公共的媒体库中。
  • 创建拍照的 Intent 对象,并指定启动相机应用的动作为 ACTION_IMAGE_CAPTURE。通过调用 Intent 的 putExtra() 方法,可以将照片的保存位置信息封装在 Intent 中,以便相机应用在拍摄完成后保存照片到指定的位置。
  • 如果运行在 Android Q 及以上版本,可以通过调用 Intent 的 addFlags() 方法添加 FLAG_GRANT_WRITE_URI_PERMISSION 标志,以授予相机应用访问指定 Uri 的写入权限。这样可以确保相机应用能够顺利地将照片保存到指定位置。
  • 启动相机应用,通过调用 startActivityForResult() 方法传入相机 Intent 和请求码来启动相机应用,并等待相机应用返回结果。
  • 在回调方法中的 onActivityResult() 中,可以获取拍照结果。根据返回的 resultCode 判断拍照是否成功或被取消,根据 requestCode 判断是哪个请求的结果,进而处理相应的逻辑。
  • 将传回的Uri转化成真实物理路径,代入阿里云身份识别API模块进行信息提取并决定是否存储
3.3.3 图片文件识别
  • 首先创建了一个 Intent 对象,并指定了动作为 Intent.ACTION_PICK,表示我们要从系统的内容提供者中选择某种类型的数据。然后使用 setDataAndType() 方法设置了要选择的数据类型和数据源。MediaStore.Images.Media.EXTERNAL_CONTENT_URI 表示我们要选择的数据源是存储在外部存储器上的图片媒体文件,而第二个参数 "image/*" 指定了需要从图库中选择的数据类型为所有图片类型。
  • 接下来,调用了 startActivityForResult() 方法启动图库应用,并传入创建的 Intent 和一个自定义的请求码 ACTION_CHOOSE_IMAGE。这个请求码将在结果返回时用于识别该结果。
  • 通过设置点击事件监听器,在用户点击 chooseLocalImage 视图时,会触发上述代码逻辑,从而打开系统的图库应用界面,让用户选择一张图片。选择完成后,图库应用将返回结果给原始的 Activity,并触发 onActivityResult() 回调方法。将传回的Uri转化成真实物理路径,代入阿里云身份识别API模块进行信息提取并决定是否存储
3.3.1 数据管理
  • 通过Android自带的SQLite实现对数据的管理,主要实现了部分查询、全部查询、部分删除,全部删除四个模块。

3.4 结果展示

图3-3 首页

图3-4 识别页面

图3-5 识别结果

图3-6 查询结果(多个可滑动)

图3-7 我的页面


四、系统测试

4.1 测试原理

在确立测试目标和测试方法的前提下,根据测试对象和测试要求,借助测试工具和测试环境的辅助手段,通过计划、设计、执行和评估等测试活动,发现并纠正软件系统中的错误和缺陷,提高软件系统的可靠性、稳定性和安全性。

4.2 采用的测试技术

在本系统测试中,我们将采用以下测试技术:

(1)功能测试:对系统的所有功能进行测试,包括身份证信息的捕获、识别、保存、查询等功能,以保证系统的功能满足用户需求。

(2)兼容性测试:对系统在不同操作系统、设备或浏览器上的运行情况进行测试,以确保系统的兼容性和稳定性。

4.3 测试过程

(1)计划测试:测试身份证信息JSON数据二次处理功能、测试系统的识别身份证号功能、测试环境为JUNIT。测试软件在华为平板上运行结果是否正常。

(2)设计测试用例:

图4-1 测试用例

(3)执行测试用例:

图4-2 识别身份证号功能正常

图4-3 对返回JSON数据二次处理正常

(4)评估测试结果:经多次测试,结果均符合期望。

(5)缺陷修复和验证:根据测试结果和异常报告,修复缺陷和异常,并进行验证和确认。

(6)重复测试:在修复缺陷和异常后,重新进行测试,直到所有测试用例通过。


ps:本项目代码地址为:

身份证识别app: 本课题为基于Android平台的身份证识别应用程序开发。其目的是掌握Android开发技术和调用图像处理接口,实现一个功能完善、界面友好、操作简便的身份证识别应用程序。         在整个项目的设计中要实现的任务有:调用阿里云OCR接口完成识别、调用相机、获取内部存储图片、数据提取、数据库操作、识别相关界面编写、我的页面编写、首页页面编写以及界面优化等。 (gitee.com)icon-default.png?t=N7T8https://gitee.com/olws/id-card-recognition-app

如果您对此感兴趣的话,可以前往代码仓库链接查看更多详情并点个赞支持一下(●ˇ∀ˇ●)!别忘了给项目点个star哦( •̀ ω •́ )✧

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候,有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点: ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏,Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

VMwareWorkstation17.0虚拟机安装搭建PcDos2000虚拟机(完整图文详细步骤教程)

VMwareWorkstation17.0虚拟机安装搭建PcDos2000虚拟机(完整图文详细步骤教程) 一、PcDos20001.PcDos2000简介2.PcDos2000下载 二、创建PcDos2000虚拟机1.新建虚拟机2.类型配置3.类型配置4.选择版本5.命名、存位置6.磁盘容量7.调整虚拟配置7.1 调整虚拟配…

【python】堆排序

堆的概念 堆:一种特殊完全二叉树,也就是二叉树必须全部是满的,但是最后一排可以从右向左缺失。 大根堆:每个节点都比他的子节点大 小根堆:每个节点都比子节点小 堆在代码中的形式 堆在代码中实际上就是列表&#…

蓝桥杯倒计时 41天 - KMP 算法

KMP算法 KMP算法是一种字符串匹配算法,用于匹配模式串P在文本串S中出现的所有位置。 例如S“ababac,P“aba”,那么出现的所有位置是13。 在初学KMP时,我们只需要记住和学会使用模板即可,对其原理只需简单理解&#xff…

一文搞懂Stable Diffusion中的提示词

欢迎来到Stable Diffusion的世界,这里是AI和创意的交汇点。在这里,我们将一起探索如何通过精心设计的提示词,指引这一强大的AI工具创造出令人叹为观止的图像。无论你是技术爱好者,还是对AI艺术充满好奇的初学者,这里都…

excel数值无法左对齐

右键,单元格格式 修改为常规 解决

力扣--动态规划64.最小路径和

思路分析: 基本思路: 本算法采用动态规划的思想,通过构建一个额外的二维矢量 dp 来存储每个位置的最小路径和。最终目标是求得右下角位置的最小路径和,即整个网格的最小路径和。 初始化: 初始化矢量的行数和列数&…

【AI视野·今日Sound 声学论文速览 第五十一期】Mon, 4 Mar 2024

AI视野今日CS.Sound 声学论文速览 Mon, 4 Mar 2024 Totally 6 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers VoxGenesis: Unsupervised Discovery of Latent Speaker Manifold for Speech Synthesis Authors Weiwei Lin, Chenhang He, Man Wai Mak, …

Stable Diffusion——Animate Diff一键AI图像转视频

前言 AnimateDiff 是一个实用框架,可以对文本生成图像模型进行动画处理,无需进行特定模型调整,即可为大多数现有的个性化文本转图像模型提供动画化能力。而Animatediff 已更新至 2.0 版本和3.0两个版本,相较于 1.0 版本&#xff…

【学位论文】上海交通大学 研究生学位论文 本地保存

上海交大研究生学位论文网:http://thesis.lib.sjtu.edu.cn/ (只能校内访问或SJTU VPN访问) 如果希望下载论文,需要参考:https://github.com/olixu/SJTU_Thesis_Crawler 安装过程 安装过程的几个坑: &a…

RabbitMQ-TTL/死信队列/延迟队列高级特性

文章目录 TTL死信队列消息成为死信的三种情况队列如何绑定死信交换机 延迟队列RabbitMQ如何实现延迟队列 总结来源B站黑马程序员 TTL TTLTTL(Time To Live):存活时间/过期时间当信息到达存活时间后,还没有被消费,会被自动清除。RabbitMQ可以对消息设置过…

vue修改打包后静态资源路径的修改

不得不说,ai是真的强大,直接自己生成。

【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制

本系列文章跟随《MetaGPT多智能体课程》(https://github.com/datawhalechina/hugging-multi-agent),深入理解并实践多智能体系统的开发。 本文为该课程的第四章(多智能体开发)的第一篇笔记。主要记录下多智能体的运行…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

HTML---表单验证

文章目录 目录 本章目标 一.表单验证概述 二.表单选择器 属性过滤选择器 三.表单验证 表单验证的方法 总结 本章目标 掌握String对象的用法会使用表单选择器的选择页面元素会使用JQuery事件进行表单验证Ajax的概念和作用 一.表单验证概述 前端中的表单验证是在用户提交表…

vs2022 qt 关于lnk2001和2019同时报错的问题

需要像qt中添加模块,这里,缺少qtopenglwidgets模块

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB) 论坛为局域网论坛,仅供内部同事交流使用! 使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M)…

01. Nginx入门-Nginx简介

Web基础知识 Web协议通信原理 Web协议通信过程 浏览器本身是一个客户端,当输入URL后,首先浏览器会请求DNS服务器,通过DNS获取相应的域名对应的IP。通过IP地址找到对应的服务器后,监理TCP连接。等浏览器发送完HTTP Request&…

掘根宝典之C语言字符串输入函数(gets(),fgets(),get_s())

字符串输入前的注意事项 如果想把一个字符串读入程序,首先必须预留该字符串的空间,然后用输入函数获取该字符串 这意味着必须要为字符串分配足够的空间。 不要指望计算机在读取字符串时顺便计算它的长度,然后再分配空间(计算机不会这样做&a…

#QT(网络编程-UDP)

1.IDE:QTCreator 2.实验:UDP 不分客户端和服务端 3.记录 (1)做一个UI界面 (2)编写open按钮代码进行测试(用网络调试助手测试) (3)完善其他功能测试 4.代码 …