Java开发中使用腾讯云OCR进行身份证识别与COS云存储实践

news2024/12/22 16:09:29

文章目录

        • 完整代码
        • 代码讲解
        • 总结

在Java开发中,处理身份证识别和云存储是一项常见的需求,尤其是在需要用户身份验证的应用场景中。今天,我想和大家分享一个实际的案例,展示如何利用腾讯云的OCR服务进行身份证识别,并将识别到的身份证信息上传到云存储中。
在这里插入图片描述

完整代码

以下是这个功能的完整实现代码:

@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
@RequiredArgsConstructor
public class OcrServiceImpl implements OcrService {

    private final TencentCloudProperties tencentCloudProperties;

    private final CosService cosService;

    // 身份证识别
    @Override
    public IdCardOcrVo idCardOcr(MultipartFile file) {
        try {
            // 图片转换base64格式字符串
            byte[] base64 = Base64.encodeBase64(file.getBytes());
            String fileBase64 = new String(base64);

            // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
            Credential cred = new Credential(tencentCloudProperties.getSecretId(),
                                             tencentCloudProperties.getSecretKey());
            // 实例化一个http选项,可选的,没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("ocr.tencentcloudapi.com");
            // 实例化一个client选项,可选的,没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);
            // 实例化要请求产品的client对象,clientProfile是可选的
            OcrClient client = new OcrClient(cred, tencentCloudProperties.getRegion(), clientProfile);
            // 实例化一个请求对象,每个接口都会对应一个request对象
            IDCardOCRRequest req = new IDCardOCRRequest();
            // 设置文件
            req.setImageBase64(fileBase64);

            // 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应
            IDCardOCRResponse resp = client.IDCardOCR(req);

            // 转换为IdCardOcrVo对象
            IdCardOcrVo idCardOcrVo = new IdCardOcrVo();
            if (StringUtils.hasText(resp.getName())) {
                // 身份证正面
                idCardOcrVo.setName(resp.getName());
                idCardOcrVo.setGender("男".equals(resp.getSex()) ? "1" : "2");
                idCardOcrVo.setBirthday(
                        DateTimeFormat.forPattern("yyyy/MM/dd").parseDateTime(resp.getBirth()).toDate());
                idCardOcrVo.setIdcardNo(resp.getIdNum());
                idCardOcrVo.setIdcardAddress(resp.getAddress());

                // 上传身份证正面图片到腾讯云cos
                CosUploadVo cosUploadVo = cosService.upload(file, "idCard");
                idCardOcrVo.setIdcardFrontUrl(cosUploadVo.getUrl());
                idCardOcrVo.setIdcardFrontShowUrl(cosUploadVo.getShowUrl());
            } else {
                // 身份证反面
                // 证件有效期:"2010.07.21-2020.07.21"
                String idcardExpireString = resp.getValidDate().split("-")[1];
                idCardOcrVo.setIdcardExpire(
                        DateTimeFormat.forPattern("yyyy.MM.dd").parseDateTime(idcardExpireString).toDate());
                // 上传身份证反面图片到腾讯云cos
                CosUploadVo cosUploadVo = cosService.upload(file, "idCard");
                idCardOcrVo.setIdcardBackUrl(cosUploadVo.getUrl());
                idCardOcrVo.setIdcardBackShowUrl(cosUploadVo.getShowUrl());
            }
            return idCardOcrVo;
        } catch (Exception e) {
            throw new GuiguException(ResultCodeEnum.DATA_ERROR);
        }
    }
}
代码讲解

这个代码实现了身份证识别和图像上传的功能,核心步骤包括以下几个部分:

  1. 图片转换为Base64格式

    • 首先,将上传的MultipartFile文件转换为Base64格式的字符串。这是因为腾讯云的OCR API需要通过Base64字符串来传递图像数据。
    byte[] base64 = Base64.encodeBase64(file.getBytes());
    String fileBase64 = new String(base64);
    
  2. 实例化认证对象

    • 为了调用腾讯云的OCR API,需要先实例化Credential对象,传入腾讯云账户的SecretIdSecretKey
    Credential cred = new Credential(tencentCloudProperties.getSecretId(),
                                     tencentCloudProperties.getSecretKey());
    
  3. 配置HTTP选项

    • 配置HttpProfileClientProfile,用于自定义HTTP请求和客户端行为。比如设置OCR服务的访问端点。
    HttpProfile httpProfile = new HttpProfile();
    httpProfile.setEndpoint("ocr.tencentcloudapi.com");
    ClientProfile clientProfile = new ClientProfile();
    clientProfile.setHttpProfile(httpProfile);
    
  4. 发起OCR请求

    • 创建IDCardOCRRequest请求对象,将Base64格式的图像数据传递给OCR API,并通过OcrClient发起请求,获取身份证识别结果。
    IDCardOCRRequest req = new IDCardOCRRequest();
    req.setImageBase64(fileBase64);
    IDCardOCRResponse resp = client.IDCardOCR(req);
    
  5. 处理OCR结果

    • 根据OCR返回的结果,判断是身份证正面还是反面,并提取相关信息,如姓名、性别、生日、身份证号、有效期等。
    if (StringUtils.hasText(resp.getName())) {
        // 处理身份证正面信息
    } else {
        // 处理身份证反面信息
    }
    
  6. 图像上传到腾讯云COS

    • 将身份证图像上传到腾讯云COS,并将返回的URL保存到IdCardOcrVo对象中,供后续使用。
    CosUploadVo cosUploadVo = cosService.upload(file, "idCard");
    idCardOcrVo.setIdcardFrontUrl(cosUploadVo.getUrl());
    idCardOcrVo.setIdcardFrontShowUrl(cosUploadVo.getShowUrl());
    
  7. 异常处理

    • 捕获可能出现的异常,并抛出自定义的GuiguException异常,确保服务的稳定性和错误的可追踪性。
    catch (Exception e) {
        throw new GuiguException(ResultCodeEnum.DATA_ERROR);
    }
    
总结

通过这个实际案例,我们学习了如何结合腾讯云的OCR和COS服务,实现身份证识别与图像存储的功能。这种技术可以广泛应用于用户身份验证、实名认证等场景中,为应用的安全性和用户体验提供有力支持。希望这篇文章能为你的Java开发工作带来一些启发。

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

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

相关文章

记一次:Datawhale AI夏令营-第四期-魔搭-AIGC-Task03

前言:书接上回,前面说了AIGC的了解和精读baseline,那么我们可以再次的抽丝拔茧,开始了解GUI部分和微调部分。 一、ComfyUI应用部分 1、什么是GUI? 2、什么是ComfyUI? 3、ComfyUI核心模块 4、ComfyUI图片生…

搭建高可用OpenStack(Queen版)集群(七)之部署dashbord(Horizon)控制节点集群

一、搭建高可用OpenStack(Queen版)集群之部署dashbord(Horizon)控制节点集群 一、Dashboard(horizon)简介 Dashboard(horizon)是一个web接口,使得云平台管理员以及用户可以管理不同的openstack资源及服务。 二、部署da…

AAAI Reproducibility Checklist Latex 模板

官网介绍 AAAI-25 Reproducibility Checklist - AAAI This paper: Includes a conceptual outline and/or pseudocode description of AI methods introduced (yes/partial/no/NA)Clearly delineates statements that are opinions, hypothesis, and speculation from object…

Science Robotics封面 | 当机器人学会用‘快照‘导航,轻重量小内存实现‘长途跋涉‘

一个仅重56克的微型无人机实现了自主视觉导航,这听起来似乎不可思议。 然而,荷兰代尔夫特理工大学的研究人员通过向大自然学习,成功让这样一个轻如鸿毛的小家伙完成了长达100米的自主视觉路径跟随。 这一突破性成果不仅为微型机器人的自主导…

【Vue3】高颜值后台管理模板推荐

ELP - 权限管理系统 基于Vue 3框架与PrimeVue UI组件库技术精心构建的高颜值后台权限管理系统模板。该模板系统已成功实现基于RBAC(Role-Based Access Control)模型的权限管理系统和字典数据管理模块,后端则使用了Spring Boot框架&#xff0…

008 | 基于RNN和LSTM的贵州茅台股票开盘价预测

👉👉👉 《玩转Python金融量化专栏》👈👈👈 订阅本专栏的可以下载对应的代码和数据集 🚀 上一篇🌟 下一篇⬅️ 007 期权定价与布莱克-斯科尔斯计算009 上证50ETF基金数据分析及预测…

WebRTC音视频开发读书笔记(一)

一、基本概念 WebRTC(Web Real-Time Communication,网页即时通信)于2011年6月1日开源,并被纳入万维网联盟的W3C推荐标准,它通过简单API为浏览器和移动应用提供实时通信RTC功能。 1、特点 跨平台:可以在Web,Android、…

Unity扩展 Text 彩虹文本

本文章用于原生组件 Text 的扩展 TextRainbow,对于新版TextMeshPro不适用。 一、效果预览图: 默认: 随机: 循环: 二、原理 通过强制刷新顶点数据,来修改颜色。 通过Unity中自带的 BaseMeshEffect 抽…

五、OpenCVSharp 中的图像滤波与平滑

文章目录 简介一、均值滤波1. 原理和数学公式2. 不同大小的滤波核效果对比3. 边界处理方式二、高斯滤波1. 高斯核的生成2. 标准差对滤波效果的影响3. 高斯滤波的应用场景(如去除高斯噪声)三、中值滤波1. 中值的计算方法2. 中值滤波对椒盐噪声的处理效果3. 中值滤波的性能分析…

AWS Lambda 十年回顾:功能总览、更新记录与入门指南

这次,我为2014年11月发布的AWS Lambda创建了一个历史时间表。AWS Lambda 是一项无服务器、全托管的代码执行服务,今年2024年11月将迎来其宣布发布的十周年纪念。虽然提前了一些,但为了提前庆祝这一重要时刻,我写了这篇文章。 文章…

空间间隔组(Spacers)-Qt-思维导图-学习笔记

空间间隔组(Spacers) 空间间隔组(Spacers) (1)Horizontal Spacer:水平间隔 (2)Vertical Spacer:垂直间隔 QSpacerItem 控件简介 继承关系:QSpacerItem 继承自 QLayou…

面试必备之——TCP/UDP(二)

TCP流量控制 让发送方发送的速率不要太快,要让接收方开的及接收,防止发送方发送太快,导致接收方来不及接收。是端到端之间的控制 滑动窗口是实现流量控制的方法之一 TCP流量控制-滑动窗口 滑动窗口是传输层进行流控的一种措施,…

电脑版视频剪辑软件哪个好?适合新手使用的剪辑软件!

电脑版视频剪辑软件哪个好?在电脑版视频剪辑软件的选择上,每位用户都有其独特的偏好和需求。对于初学者而言,寻找一款操作简便、功能齐全的软件至关重要。为大家推荐几款常用的视频剪辑软件: 1、福昕视频剪辑 2、HitFilm 3、DaVin…

天了噜,IDEA竟然还有这种坑!

问题描述 IDEA 编辑器 idea Cannot resolve symbol 鼠标聚焦时,错误信息为:” idea Cannot resolve symbol “ IDEA自动修复功能 提示信息如下,然而并没有什么卵用。 问题梳理: IDEA 这个目录下的包都引入不了 import org.s…

Redis的分布式部署方案-哨兵

Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量 的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的, 于是 Redis 从 2.8 开…

uniapp加载第三方字体方案对比(附原生微信小程序方案)

文章目录 官方文档uniapp文档微信小程序文档 下载字体包引入方案限制微信小程序限制uniapp的限制 方案对比方案1:CSS本地加载方案2:CSS远程加载方案3:转换为base64,然后通过css引入方案4:使用uni.loadFontFace() 页面使…

手撕初阶数据结构之---排序

1.排序概念及运用 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的⼤⼩,递增或递减的排列起来的操作。 常见的排序算法 直接插入排序的时间复杂度是O(N^2) 这个是最差的情况下,就是大的在前面&#xff…

30kw 可调恒流电子负载,你了解多少?

30kW可调恒流电子负载,是一种用于测试电源、蓄电池、发电机等电力设备的设备。它的主要功能是模拟实际负载,通过调节电流的大小,来检测电力设备的工作性能和稳定性。 让我们了解一下什么是电子负载。电子负载是一种可以吸收或提供电能的设备&…

【数据分析---偏企业】 Excel操作

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Excel操作前 必看 Python 初阶 Python—语言基础与…