身份证识别系统(安卓)

设计内容与要求:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

徽标键锁定问题

徽标键锁定问题 1. 锁定徽标键2. 解锁徽标键 无意中发现键盘除了左右徽标键,其余键都正常。相关的组合键也都失效。 自己的键盘是ikbc w210款的键盘。一直使用都没有任何问题。 搜索发现使用 Fn和 徽标键组合就能锁定和解锁 徽标键。 1. 锁定徽标键 左徽标键Fn …

[项目设计] 从零实现的高并发内存池(一)

🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[高并发内存池] ❤️ 前置学习专栏:[Linux学习] ⏰ 我们仍在旅途 ​ 目录 前言 项目介绍 1.内存池 1.1 什么是内存池 池化技术 内存池 1.2 为什…

思科网络设备监控

思科是 IT 行业的先驱之一,提供从交换机到刀片服务器的各种设备,以满足中小企业和企业的各种 IT 管理需求。管理充满思科的 IT 车间涉及许多管理挑战,例如监控可用性和性能、管理配置更改、存档防火墙日志、排除带宽问题等等,这需…

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

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

常用的电阻、电容的种类和应用场合?

电阻的 a.按阻值特性:固定电阻、可调电阻、特种电阻(敏感电阻),不能调节的,我们称之为固定电阻,而可以调节的,我们称之为可调电阻.常见的例如收音机音量调节的,主要应用于电压分配的,我们称之为电位器. b.按制造材料:碳膜电阻、金属膜电阻、线绕电阻,捷…

Qt/C++音视频开发67-保存裸流加入sps/pps信息/支持264/265裸流/转码保存/拉流推流

一、前言 音视频组件除了支持保存MP4文件外,同时还支持保存裸流即264/265文件,以及解码后最原始的yuv文件。在实际使用过程中,会发现部分视频文件保存的裸流文件,并不能直接用播放器播放,查阅资料得知原来是缺少sps/p…

2023年,我的年终总结

序言 2023年的年终总结一直拖到现在,想来是有多个原因吧:第一个应该是年底还有些事情没有完成,内心有所不甘;第二个应该是这一年似乎是很忙碌的一年,不知从何说起;第三个应该是对于自己这一年的收获&#…

Learning from Unlabeled 3D Environments forVision-and-Language Navigation

这篇论文是关于高级指令的 摘要 在视觉和语言导航 (VLN) 中,实体代理需要按照自然语言指令在真实的 3D 环境中进行导航。现有 VLN 方法的一个主要瓶颈是缺乏足够的训练数据,导致对未见过的环境的泛化效果不理想。虽然 VLN 数据通常是手动收集的&#x…

动态SQL的处理

学习视频:3001 动态SQL中的元素_哔哩哔哩_bilibili 目录 1.1为什么学 1.2动态SQL中的元素 条件查询操作 if 元素 choose、when、otherwise元素 where、trim元素 更新操作 set元素使用场景 复杂查询操作 foreach 元素中的属性 ​编辑 迭代数组 迭代List 迭代Map 1…

RocketMQ - 深入研究一下Broker是如何持久化存储消息的

1. CommitLog消息顺序写入机制 首先思考一下,当生产者的消息发送到一个Broker上的时候,他接收到了一条消息,接着他会对这个消息做什么事情? 首先第一步,他会把整个消息直接写入磁盘上的一个日志文件,叫做CommitLog,直接顺序写入这个文件,如下图: 这个CommitLog是很…

Python用类实现抽象和封装

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 路在脚下,勇往直前&#x…

mac报错:zsh: command not found: npm

1、问题概述? 在mac系统中使用npm命令的时候,mac os报错提示: zsh: command not found: npm 一般出现发这种情况的原因时没有安装npm,而npm这命令时集成在nodejs中的,所以安装nodejs就可以了。 2、解决办法 本质就是需要安装…

Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web:语言/CMS/中间件/数据库/系统/WAF等 系统:操作系统/端口服务/网络环境/防火墙等 应用:APP对象/API接…

聊一聊Python量化交易

在金融领域,量化交易已经成为一种越来越受欢迎的交易方式。它通过使用数学模型来分析市场,自动化执行交易决策,以此来获取超额回报。近年来,Python因其简洁易学、功能强大而成为量化交易领域的首选编程语言。本文将详细介绍Python…

Vue 前端开发 v-for和v-if两个指令不能混合使用

原由: 在进行项目开发的时候因为在一个标签上同时使用了v-for和v-if两个指令导致的报错。 提示错误:The undefined variable inside v-for directive should be replaced with a computed property that returns filtered array instead. You should no…

NOC2023软件创意编程(学而思赛道)python初中组初赛真题

软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认定的选手所属学段为准。 二、…

【新书推荐】11.1 子程序设计

第十一章 子程序及参数传递 本章先讲述子程序设计的方法,然后介绍在子程序调用中参数的四种传递方法。 11.1 子程序设计 在前面的示例和练习中,会发现程序中会有一些反复使用到的代码片段。我们将程序中反复出现的程序片段设计成子程序,这样…

蓝桥杯备赛 day1 | 1. 门牌制作, 2. 迷宫, 3. 乘积尾零

最近正好在刷算法题&#xff0c;报了一个蓝桥杯体验一下&#xff0c;但是钱都交了&#xff0c;高低混个奖好吧&#xff0c;今天做的都是一些填空推理题&#xff0c;相当于用程序写下正解&#xff0c;代码是在Dev C上面写的 #include<iostream> #include<bits/stdc.h&g…

ABAP - SALV教程13 使用自定义的状态栏

有时候SALV的默认标准按钮无法满足用户需求,需要在状态栏中添加自定义的按钮解决方法1&#xff1a;在默认的标准按钮上调用方法增加按钮&#xff1a;http://t.csdnimg.cn/rB7my解决方法2&#xff1a;使用自定义的状态栏&#xff0c;报错问题的解决&#xff1a;http://t.csdnimg…

Spring Boot整合Mybatis配置多数据源

Spring Boot 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9278145.html Spring Cloud 专栏&#xff1a;https://blog.csdn.net/dkbnull/category_9287932.html GitHub&#xff1a;https://github.com/dkbnull/SpringBootDemo Gitee&#xff1a;https://gitee.com/…