当前位置: 首页 > news >正文

身份证识别系统(安卓)

设计内容与要求:

  • 通过手机摄像头捕获身份证信息,将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中。
  • 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哦( •̀ ω •́ )✧

相关文章:

身份证识别系统(安卓)

设计内容与要求: 通过手机摄像头捕获身份证信息,将身份证上的姓名、性别、出生年月、身份证号码保存在数据库中。1)所开发Apps软件至少需由3-5个以上功能性界面组成。要求:界面美观整洁、方便应用;可以使用Android原生…...

Python教程——最后一波来喽

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.使用__slots__2. property3.多重继承 4.定制类5.枚举类6.错误处理7.调试8. 文档测试9.单元测试10. 文件读写11. StringIO和BytesIO12. 操作文件和目录13.序列化14…...

学生管理系统(python实现)

新增学生显示学生查找学生删除学生存档到文件 约定好数据的存储格式: 约定把数据保存在和py文件同级目录中,文件名为record.txt 文件内容按照行文本的方式来表示 首先这是一个文本文件,里面包含了很多行,每一行代表一个学生 …...

Java读取文件

读取文件为String 、访问链接直接跳转html 环境:SpringMVC 、前端jsp InputStreamReader FileInputStream fileInputStream new FileInputStream(formatFile.getHtmlpath());InputStreamReader reader new InputStreamReader(fileInputStream, StandardCharsets…...

曾桂华:车载座舱音频体验探究与思考| 演讲嘉宾公布

智能车载音频 I 分论坛将于3月27日同期举办! 我们正站在一个前所未有的科技革新的交汇点上,重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融,智慧、便捷与未来的探索之旅正式扬帆起航。 在驾驶的旅途中&#xff0…...

面试题HTML+CSS+网络+浏览器篇

文章目录 Css预处理sass less是什么?为什么使用他们怎么转换 less 为 css?重绘和回流是什么http 是什么?有什么特点HTTP 协议和 HTTPS 区别什么是 CSRF 攻击HTML5 新增的内容有哪些Css3 新增的特性flex VS grid清除浮动的方式有哪些&#xff…...

wordpress外贸独立站

WordPress外贸电商主题 简洁实用的wordpress外贸电商主题,适合做外贸跨境的电商公司官网使用。 https://www.jianzhanpress.com/?p5025 华强北面3C数码WordPress外贸模板 电脑周边、3C数码产品行业的官方网站使用,用WordPress外贸模板快速搭建外贸网…...

[python] 构建数据流水线(pipeline)

Plum 是一个用于构建数据流水线(pipeline)的 Python 库,它旨在简化和优化数据处理流程,使得数据流转和处理变得更加清晰、高效和可维护。下面我将更详细地介绍 Plum 的特点、功能和使用方法。 Plum 的主要特点和功能:…...

计算机网络-网络互连和互联网(五)

1.路由器技术NAT: 网络地址翻译,解决IP短缺,路由器内部和外部地址进行转换。静态地址转换:静态NAT(一对一) 静态NAT,内外一对一转换,用于web服务器,ftp服务器等固定IP的…...

【深度学习】Pytorch基础

张量 运算与操作 加减乘除 pytorch中tensor运算逐元素进行,或者一一对应计算 常用操作 典型维度为N X C X H X W,N为图像张数,C为图像通道数,HW为图高宽。 sum() 一般,指定维度,且keepdimTrue该维度上元…...

C++模拟揭秘刘谦魔术,领略数学的魅力

新的一年又开始了,大家新年好呀~。在这我想问大家一个问题,有没有同学看了联欢晚会上刘谦的魔术呢? 这个节目还挺有意思的,它最出彩的不是魔术本身,而是小尼老师“念错咒语”而导致他手里的排没有拼在一起,…...

JAVA语言编写一个方法,两个Long参数传入,使用BigDecimal类,计算相除四舍五入保留2位小数返回百分数。

在Java中,你可以使用BigDecimal类来执行精确的浮点数计算,并且可以指定结果的小数位数。以下是一个方法,它接受两个Long类型的参数,并使用BigDecimal来计算它们的商,然后将结果四舍五入到两位小数,并返回一…...

SQL教学:掌握MySQL数据操作核心技能--DML语句基本操作之“增删改查“

大家好,今天我要给大家分享的是SQL-DML语句教学。DML,即Data Manipulation Language,也就是我们常说的"增 删 改 查",是SQL语言中用于操作数据库中数据的一部分。作为MySQL新手小白,掌握DML语句对于数据库数…...

【性能测试】Jmeter性能压测-阶梯式/波浪式场景总结(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、阶梯式场景&am…...

前端面试 跨域理解

2 实现 2-1 JSONP 实现 2-2 nginx 配置 2-2 vue 开发中 webpack自带跨域 2 -3 下载CORS 插件 或 chrome浏览器配置跨域 2-4 通过iframe 如:aaa.com 中读取bbb.com的localStorage 1)在aaa.com的页面中,在页面中嵌入一个src为bbb.com的iframe&#x…...

JetBrains TeamCity 身份验证绕过漏洞复现(CVE-2024-27198)

0x01 产品简介 JetBrains TeamCity是一款由JetBrains开发的持续集成和持续交付(CI/CD)服务器。它提供了一个功能强大的平台,用于自动化构建、测试和部署软件项目。TeamCity旨在简化团队协作和软件交付流程,提高开发团队的效率和产品质量。 0x02 漏洞概述 JetBrains Team…...

设计模式—单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心思想是确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。单例模式主要用于控制资源的访问,比如配置文件的读取,数据库的连接等&am…...

Android在后台读取UVC摄像头的帧数据流并推送

Android在后台读取UVC摄像头的帧数据流并推送 添加UvcCamera依赖库 使用原版的 saki4510t/UVCCamera 在预览过程中断开可能会闪退,这里使用的是 jiangdongguo/AndroidUSBCamera 中修改的版本,下载到本地即可。 https://github.com/jiangdongguo/AndroidU…...

vue单向数据流介绍

Vue.js 的单向数据流是其核心设计原则之一,也是 Vue 响应式系统的基础。在 Vue.js 中,数据流主要是单向的,从父组件流向子组件。这种设计有助于保持组件之间的清晰通信,减少不必要的复杂性和潜在的错误。 以下是 Vue 单向数据流的…...

OpenMMlab AI实战营第四期培训

OpenMMlab AI实战营第四期培训 OpenMMlab实战营第四次课2023.2.6学习参考一、什么是目标检测1.目标检测下游视觉任务2.图像分类 v.s. 目标检测 二、目标检测实现1.滑窗 Sliding Window2.滑窗的效率问题3.改进思路(1)消除滑窗中的重复计算(2&a…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

PydanticAI快速入门示例

参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...