身份证识别系统(安卓)

news2024/11/15 18:28:16

设计内容与要求:

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

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

相关文章

基于springboot+vue的校园爱心捐赠互助管理系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 随着经济水平和生活水平的提高在校大学生在校需要处理的物品也在不断增加,同时校园内还存在很多贫困生,可以通过线上平台实现资源的整合和二次利用,通过线上平台求助信…

c语言内存分配知识,堆,栈,全局静态,常量,代码

c语言中一些内存的作用 参考:https://blog.csdn.net/m0_49768044/article/details/131391832,其他

CSS列表属性

CSS列表属性 列表相关的属性&#xff0c;可以作用在 ul、ol、li 元素上。 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>列表相关属性</title><style>ul {/* …

C++:类与对象(3)

创作不易&#xff0c;感谢三连 一、深入解析构造函数 如上图&#xff0c;在一般情况下&#xff0c;我们认为A类中的_a1和_a2只不过是声明&#xff0c;并没有开空间&#xff0c;而真正的空间开辟是在【定义】的时候&#xff0c;也就是我们根据这个类实例化出整个对象的时候。 …

深入分析Android运行时环境ART:原理、特点与优化策略

摘要 随着移动互联网的快速发展&#xff0c;智能手机的性能和功能日益强大&#xff0c;其中Android操作系统因其开放性和灵活性而占据主导地位。Android运行时环境&#xff08;ART&#xff09;作为执行应用程序代码的关键组件&#xff0c;在系统性能和用户体验方面起着至关重要…

【Web安全靶场】xss-labs-master 1-20

xss-labs-master 其他靶场见专栏 文章目录 xss-labs-masterlevel-1level-2level-3level-4level-5level-6level-7level-8level-9level-10level-11level-12level-13level-14level-15level-16level-17level-18level-19level-20 level-1 第一关没有进行任何限制&#xff0c;get请求…

服务器感染了.ma1x0勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 网络安全成为至关重要的议题。.ma1x0勒索病毒是当前网络威胁中的一种恶意软件&#xff0c;它的出现给用户带来了极大的困扰。然而&#xff0c;正如任何挑战一样&#xff0c;我们也有方法来面对并克服.ma1x0勒索病毒。本文将全面介绍这种病毒的特点&#xff0…

挑战杯 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

Eclipse也可以轻松创建JSP动态Web项目 绿色、免费、神器、就是好用一大截!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

本地安装部署Flask并结合内网穿透实现远程访问本地web界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

树莓集团董事长王凯带队拜访国家超级计算成都中心,探索数字经济高质量发展新路径

随着数字经济时代全面开启&#xff0c;算力作为新型生产力&#xff0c;已成为支撑数字经济发展的“新底座”、驱动经济社会数字化转型的“新引擎”。 2024年3月1日&#xff0c;树莓科技&#xff08;成都&#xff09;集团有限公司董事长王凯、副总裁吴晓平、天府产城投资部部长…

Centos7.9双网卡绑定操作

同事整理的安装文档参考&#xff1a; 首先要有两块物理网卡 我用的虚机模拟两块物理网卡 先查看一下bonging模块有没有启动 lsmod | grep bonding 如没启动 modprobe bonding 查看两块网卡名字 创建物理网卡网口配置文件 vi /etc/sysconfig/network-scripts/if…

力扣 第 387 场周赛 解题报告 | 珂学家 | 离散化树状数组 + 模拟场

前言 整体评价 手速场模拟场&#xff0c;思路和解法都蛮直接的。 所以搞点活 如果T2&#xff0c;如果不固定左上角&#xff0c;批量查询某个点为左上角&#xff0c;求满足总和 ≤ k \le k ≤k的子矩阵个数 如果T2&#xff0c;如果不固定左上角&#xff0c;求总和 ≤ k \le k…

手写分布式配置中心(二)实现分布式配置中心的简单版本

这一篇文章比较简单&#xff0c;就是一个增删改查的服务端和一个获取配置的客户端&#xff0c;旨在搭建一个简单的配置中心架构&#xff0c;代码在 https://gitee.com/summer-cat001/config-center 服务端 服务端选择用springboot 2.7.14搭建&#xff0c;设计了4个接口/confi…

每天一道leetcode:20.有效的括号(简单;栈的经典题目)

⭐今日份题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对…

【数据结构与算法设计】上机课习题一

基础知识 勾画 1.存储结构是逻辑结构的&#xff08;&#xff09;实现 2.一个算法的时空性能是指该算法的&#xff08;&#xff09;和&#xff08;&#xff09; 3.在一般算法下一个算法的事件复杂性是&#xff08;&#xff09;的函数 4.用python设计一个算法&#xff0c;计算 …

输入文章id,爬取小红书某文章下所有评论

import requests import time import csvf open(小红书评论.csv,mode a,encodingutf-8,newline) csv_writer csv.DictWriter(f,fieldnames[内容,点赞数量,发布时间,昵称,头像链接,用户id]) csv_writer.writeheader()def spider(url):headers {"Cookie":"abR…

程序员竟然还有职业规划手册?

《程序员职业规划手册》不是一本具体的书&#xff0c;而是由前阿里技术总监雪梅老师讲授的一个专栏课程&#xff0c;总共有20讲&#xff0c;内容基本都是图片和文字形式&#xff0c;也有对应的语音讲述。 回顾了下毕业工作的这几年&#xff0c;我买过很多学习课程&#xff0c;…

【Python】进阶学习:pandas--read_csv()用法详解

&#x1f680;【Python】进阶学习&#xff1a;pandas–read_csv()用法详解&#x1f680; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…