身份证识别系统(安卓)

设计内容与要求:

  • 通过手机摄像头捕获身份证信息,将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中。
  • 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.mzph.cn/news/718239.shtml

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

相关文章

JS 对象数组排序方法测试

输出 一.Array.prototype.sort() 1.默认排序 sort() sort() 方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序。 由于它取决于具体实现,因此无法保证排序的时…

数据可视化基础与应用-02-基于powerbi实现医院数据集的指标体系的仪表盘制作

总结 本系列是数据可视化基础与应用的第02篇,主要介绍基于powerbi实现医院数据集的指标体系的仪表盘制作。 数据集描述 医生数据集doctor 医生编号是唯一的,名称会存在重复 医疗项目数据projects 病例编号是唯一的,注意这个日期编号不是真…

面试时如何回答接口测试怎么进行

一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 …

【C++ 07】string 类的常用接口介绍

文章目录 🌈 Ⅰ string 类对象的常见构造函数🌈 Ⅱ string 类对象的容量相关操作🌈 Ⅲ string 类对象的访问及遍历1. 下标访问及遍历2. 正向迭代器访问3. 反向迭代器访问 🌈 Ⅳ string 类对象的修改操作1. 插入字符或字符串2. 字符…

Vue前端的工作需求

加油&#xff0c;新时代打工人&#xff01; 需求&#xff1a; 实现带树形结构的表格&#xff0c;父数据显示新增下级&#xff0c;和父子都显示编辑。 技术&#xff1a; Vue3 Element Plus <template><div><el-table:data"tableData"style"width…

了解游戏中的数据同步

目录 数据同步 通过比较来看状态同步和帧同步 状态同步 帧同步 帧同步实现需要的条件 两者相比较 数据同步 在联机游戏中&#xff0c;我的操作和数据要同步给同一局游戏中其他所有玩家&#xff0c;其他玩家的操作和数据也会同步给我。这叫做数据同步&#xff0c;目前数据…

国产数据库概述

这是ren_dong的第33篇原创 1、什么是数据库&#xff1f; 1.1、基本概念 定义&#xff1a;数据库是 按照一定的数据结构组织、存储和管理数据的仓库。可视为电子化的文件柜&#xff0c;用户可以对文件中的数据进行新增、查询、更新、删除等操作。 作用&#xff1a;业务数据 存储…

kettle下载及安装

JDK下载 安装kettle之前需要安装JDK JDK下载链接&#xff1a;JDK下载 配置环境变量&#xff1a; 新建系统变量&#xff1a;变量值为JDK安装路径 Path新增&#xff1a; kettle下载 链接地址&#xff1a;PDI&#xff08;kettle&#xff09; 点击下载 同意 Click here to a…

【XIAO ESP32S3 sense 通过 ESPHome 与 Home Assistant 连接】

XIAO ESP32S3 sense 通过 ESPHome 与 Home Assistant 连接 1. 什么是 ESPHome 和 Home Assistant&#xff1f;2. 软件准备3. 开始4. 将 Grove 模块与 ESPHome 和 Home Assistant 连接5. Grove 连接和数据传输6. Grove -智能空气质量传感器 &#xff08;SGP41&#xff09;7. OV2…

Filter(过滤器)

文章目录 过滤器的编写&#xff1a;过滤器 APIFilterFilterConfigFilterChain 生命周期过滤器核心方法的细节多个过滤器执行顺序<br /> 过滤器——Filter&#xff0c;它是JavaWeb三大组件之一。另外两个是Servlet和Listener。 它是在2000年发布的Servlet2.3规范中加入的一…

百度文库旋转验证码识别

最近研究了一下图像识别&#xff0c;一直找到很好的应用场景&#xff0c;今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好&#xff0c;下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫&#xff0c;对验证码图片进行采…

区块链媒体发布推广10个热门案例解析-华媒舍

区块链技术的发展已经引起了媒体的广泛关注&#xff0c;越来越多的区块链媒体纷纷发布推广相关的热门案例。本文将介绍10个成功的区块链媒体推广案例&#xff0c;并分享它们的成功秘诀&#xff0c;帮助读者更好地了解区块链媒体推广的方法与技巧。 随着区块链技术的成熟和应用场…

第二证券:富时罗素扩容 A股引入国际增量资金

日前&#xff0c;英国富时罗素指数公司&#xff08;FTSE Russell&#xff0c;简称“富时罗素”&#xff09;公布的全球股票指数&#xff08;FTSE Global Equity Index Series&#xff09;半年度指数检查陈述显现&#xff0c;将新调入A股76只、调出1只。此前&#xff0c;富时罗素…

【LeetCode】升级打怪之路 Day 12:单调队列

今日题目&#xff1a; 239. 滑动窗口最大值 | LeetCode 今天学习了单调队列这种特殊的数据结构&#xff0c;思路很新颖&#xff0c;值得学习。 Problem&#xff1a;单调队列 【必会】 与单调栈类似&#xff0c;单调队列也是一种特殊的数据结构&#xff0c;它相比与普通的 que…

Get Your Back Covered! Coverage, CodeCov和Tox

1. Coverage - 衡量测试的覆盖率 我们已经掌握了如何进行单元测试。接下来,一个很自然的问题浮现出来,我们如何知道单元测试的质量呢?这就提出了测试覆盖率的概念。覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分已被测试过,哪些没有。 coverage.py …

智慧公厕:打造智慧城市的环卫明珠

在城市建设中&#xff0c;公共卫生设施的完善和智能化一直是重要环节。而智慧公厕作为智慧城市建设的重要组成部分&#xff0c;发挥着不可替代的作用。本文以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景实图&#xff0c;解读智慧公厕如何助力打…

【数据结构】B树

1 B树介绍 B树&#xff08;英语&#xff1a;B-tree&#xff09;&#xff0c;是一种在计算机科学自平衡的树&#xff0c;能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作&#xff0c;都在对数时间内完成。B树&#xff0c;概括来说是一个一般化的…

MySQL高可用性攻略:快速搭建MySQL主从复制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主从复制集群 &#xff01; MySQL基础知识&#xff1a;介绍MySQL数据库的基本概念和常用命令&#xff0c;如何创建数据库、表、用户和权限管理等。 MySQL安装教程&#xff1a;Centos7 安装MySQL5.7.29详细安装手册 MySQL数据类型&…

【大厂AI课学习笔记NO.63】模型的维护

说是模型的维护&#xff0c;其实这堂课都是在讲“在工业环境中开发和部署机器学习模型的流程”。 上图来自于我的笔记思维脑图&#xff0c;已经上传&#xff0c;要链接的访问的主页查看资源。 一路走来&#xff0c;我们学习了数据管理、模型学习、模型验证、模型部署等重要的步…

arm板运行程序时寻找动态库的路径设置

问题&#xff1a;error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file&#xff1f; 第一种方法---- 解决&#xff1a; ①复制需要用到的arm库到板子上。 ②pwd指令获取该库的绝对路径&#xff0c;把路径复制到/etc/ld.so.conf文件 ③输…