【阿里云高校计划】零基础学习视觉AI,Day2-身份证识别系统搭建(学习笔记)
2020-06-29 04:20
911 查看
【阿里云高校计划】零基础学习视觉AI,Day2
身份证识别系统搭建(学习笔记)
文中原视频地址为 达摩院特别版-视觉AI训练营
参考官方开发文档 阿里云视觉智能开放平台
下载ODR的SDK包(本文使用1.0.3版本),传送门OCR
实现逻辑
前端
实现上传<div class="col-sm-4"> <div class="input-group"> <input id='location' class="form-control" onclick="$('#i-face').click();"> <label class="input-group-btn"> <input type="button" id="i-check" value="上传人像面" class="btn btn-primary" onclick="$('#i-face').click();"> </label> </div> </div> <input type="file" name="face" id='i-face' accept=".jpg, .png, .jpeg" onchange="$('#location').val($('#i-face').val());" style="display: none"> <div class="col-sm-4"> <div class="input-group"> <input id='location1' class="form-control" onclick="$('#i-back').click();"> <label class="input-group-btn"> <input type="button" id="i-check-1" value="上传国徽面" class="btn btn-primary" onclick="$('#i-back').click();"> </label> </div> </div>提示报错
<div class="col-sm-12"> <p th:text="${message}" th:if="${message ne null}" class="alert alert-primary"></p> </div>限定图片上传类型
<input type="file" name="back" id='i-back' accept=".jpg, .png, .jpeg" onchange="$('#location1').val($('#i-back').val());" style="display: none">提交按钮
<div class="col-sm-4"> <button type="submit" class="btn btn-primary">开始识别</button> </div>输出上传的图片
<div class="col-md-12 mx-auto"> <div class="col-sm-4"> <img style="width: 100%;" th:src="${faceImage}" th:if="${faceImage ne null}" class="img-fluid" alt=""/> </div> <div class="col-sm-4"> <img style="width: 100%;" th:src="${backImage}" th:if="${backImage ne null}" class="img-fluid" alt=""/> </div> </div>输出result
<div class="row" style="margin-top: 30px;"> <div class="col-md-12 mx-auto"> <div class="col-sm-4"> <p th:if="${faceResult ne null}"><span>姓名:</span><span th:text="${faceResult.name}"></span></p> <p th:if="${faceResult ne null}"><span>性别:</span><span th:text="${faceResult.gender}"></span></p> <p th:if="${faceResult ne null}"><span>民族:</span><span th:text="${faceResult.nationality}"></span></p> <p th:if="${faceResult ne null}"><span>出生日期:</span><span th:text="${faceResult.birthDate}"></span></p> <p th:if="${faceResult ne null}"><span>住址:</span><span th:text="${faceResult.address}"></span></p> <p th:if="${faceResult ne null}"><span>身份证号码:</span><span th:text="${faceResult.IDNumber}"></span></p> </div> <div class="col-sm-4"> <p th:if="${backResult ne null}"><span>签发机关:</span><span th:text="${backResult.issue}"></span></p> <p th:if="${backResult ne null}"><span>有效日期:</span><span th:text="${backResult.startDate}"></span>~<span th:text="${backResult.endDate}"></span></p> </div> </div> </div>
后端
定义变量private String uploadDirectory; private OcrService ocrService; private List<String> faceImages; private List<String> backImages; private List<Map<String, String>> faceResults; private List<Map<String, String>> backResults;图片异常时清除
if (faceImages.size() != backImages.size()) { faceImages.clear(); backImages.clear(); faceResults.clear(); backResults.clear(); }判断目录是否存在
try { Path dir = Paths.get(uploadDirectory); if (!Files.exists(dir)) { Files.createDirectories(dir);判断人像面图片
if (!face.isEmpty()) { String filename = saveFile(face); Map<String, String> res = ocrService.RecognizeIdCard(uploadDirectory + filename, "face"); faceImages.add("/images/" + filename); faceResults.add(res); }判断背面图片
if (!back.isEmpty()) { String filename = saveFile(back); Map<String, String> res = ocrService.RecognizeIdCard(uploadDirectory + filename, "back"); backImages.add("/images/" + filename); backResults.add(res); }判断异常
} catch (TeaException e) { e.printStackTrace(); errorMessage = JSON.toJSONString(e.getData());
OcrService逻辑
初始化标签@PostConstruct private void init() throws Exception { Config config = new Config(); config.type = "access_key"; config.regionId = "cn-shanghai"; config.accessKeyId = accessKeyId; config.accessKeySecret = accessKeySecret; config.endpoint = "ocr.cn-shanghai.aliyuncs.com"; ocrClient = new Client(config); runtime = new RuntimeOptions(); }调用身份证识别
public Map<String, String> RecognizeIdCard(String filePath, String side) throws Exception { RecognizeIdentityCardAdvanceRequest request = new RecognizeIdentityCardAdvanceRequest(); request.imageURLObject = Files.newInputStream(Paths.get(filePath)); request.side = side; RecognizeIdentityCardResponse response = ocrClient.recognizeIdentityCardAdvance(request, runtime); if ("face".equals(side)) { return JSON.parseObject(JSON.toJSONString(response.data.frontResult), new TypeReference<Map<String, String>>() {}); } else { return JSON.parseObject(JSON.toJSONString(response.data.backResult), new TypeReference<Map<String, String>>() {}); } } }
本文所有代码出自 GitHub
日常感谢阿里云高校计划能提供这样的学习平台,免费领阿里云CES传送门阿里云CES
二维码传送门
:
相关文章推荐
- 【阿里云高校计划】零基础学习视觉AI,Day3,电子相册搭建(人脸、表情识别)思路
- 【阿里云高校计划】视觉AI五天训练营教程 Day 3 - 电子相册搭建(人脸、表情识别)
- memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建
- memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建
- ROS学习笔记------ROS机器人系统设计-----基础编程 day 8 2019/3/7 帅某(Kinect的安装,xarco模型,xarco---urdf模型,gazebo物理仿真环境的搭建)
- memcached缓存系统学习笔记之一:memcached缓存系统基础知识和环境搭建
- 模式识别学习笔记[2]——聚类分析之系统聚类法,k-均值算法
- JavaSE基础学习笔记-提高篇-银行业务调度系统
- django 学习笔记(一)搭建基础环境
- 计算广告学习笔记1.9 广告的基础知识-在线广告系统结构
- ios学习笔记--(c基础题8.万年历小系统)
- 嵌入式开发之Linux基础第三天学习笔记 linux系统命令(二)
- node+webpack环境搭建 vue.js 2.0 基础学习笔记
- JavaSE基础学习笔记-提供篇-交通灯管理系统
- [学习笔记]批次需求计划系统-简要
- python基础入门学习笔记(Python环境搭建)
- 从零开始系列--R语言基础学习笔记之一 环境搭建
- ODB学习笔记之基础环境搭建
- [DeeplearningAI笔记]神经网络与深度学习2.1-2.4神经网络基础
- Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境