OCR识别行驶证(阿里云和百度云)

OCR识别行驶证(阿里云和百度云)

一、使用场景

1、通过识别行驶证,获取相关汽车信息,替代手输

二、效果图

在这里插入图片描述

三、代码部分:

1、阿里云OCR

1.1、控制层

@PostMapping("/ocrCard")
public JSONObject ocrCard(@RequestPart("file") MultipartFile file, String type){//正面为face,反面为backJSONObject jsonObject = OcrUtils.ocrCard(file,type);return jsonObject;
}

1.2、OcrUtils工具类

public class OcrUtils {public static final String host = "https://driving.market.alicloudapi.com";public static final String path = "/rest/160601/ocr/ocr_vehicle.json";public static final String appcode = "替换成自己申请的";/*** type是前端传值,face为正面,face为反面*/public static JSONObject ocrCard(MultipartFile file,String type){String imgBase64 = encodeImageToBase64(file);JSONObject jsonObject = new JSONObject();//如果文档的输入中含有inputs字段,设置为True, 否则设置为FalseBoolean is_old_format = false;//请根据线上文档修改configure字段JSONObject configObj = new JSONObject();configObj.put("side", type);String config_str = configObj.toString();String method = "POST";Map<String, String> headers = new HashMap<String, String>();//header中的格式headers.put("Authorization", "APPCODE " + appcode);Map<String, String> querys = new HashMap<String, String>();// 拼装请求body的json字符串JSONObject requestObj = new JSONObject();try {if(is_old_format) {JSONObject obj = new JSONObject();obj.put("image", getParam(50, imgBase64));if(config_str.length() > 0) {obj.put("configure", getParam(50, config_str));}JSONArray inputArray = new JSONArray();inputArray.add(obj);requestObj.put("inputs", inputArray);}else{requestObj.put("image", imgBase64);if(config_str.length() > 0) {requestObj.put("configure", config_str);}}} catch (JSONException e) {e.printStackTrace();}String bodys = requestObj.toString();try {HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);int stat = response.getStatusLine().getStatusCode();if(stat != 200){System.out.println("Http code: " + stat);System.out.println("http header error msg: "+ response.getFirstHeader("X-Ca-Error-Message"));System.out.println("Http body error msg:" + EntityUtils.toString(response.getEntity()));return jsonObject;}String res = EntityUtils.toString(response.getEntity());JSONObject res_obj = JSON.parseObject(res);if(is_old_format) {JSONArray outputArray = res_obj.getJSONArray("outputs");String output = outputArray.getJSONObject(0).getJSONObject("outputValue").getString("dataValue");JSONObject out = JSON.parseObject(output);return out;}else{return res_obj;}} catch (Exception e) {e.printStackTrace();}return jsonObject;}/** 获取参数的json对象*/public static JSONObject getParam(int type, String dataValue) {JSONObject obj = new JSONObject();try {obj.put("dataType", type);obj.put("dataValue", dataValue);} catch (JSONException e) {e.printStackTrace();}return obj;}private static String encodeImageToBase64(MultipartFile file) {try {byte[] content = file.getBytes();return new String(encodeBase64(content));} catch (IOException e) {e.printStackTrace();return "";}}
}
2、百度云OCR

2.1、控制层

@PostMapping("/ocrCardBd")
public JSONObject ocrCardBd(@RequestPart("file") MultipartFile file,String type){JSONObject jsonObject = OcrBdUtils.ocrCard(file,type);return jsonObject;
}

2.2、OcrBdUtils工具类

public class OcrBdUtils {public static final String apiKey = "替换成自己的";public static final String secretKey = "替换成自己的";public static final String tokenUrl = "https://aip.baidubce.com/oauth/2.0/token";public static final String apiUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license";/*** type是前端传值,front为正面(默认),back为反面*/public static JSONObject ocrCard(MultipartFile file, String type) {try {String accessToken = getAccessToken();String apiEndpoint = apiUrl + "?access_token=" + accessToken;// 获取文件字节数组并进行Base64编码byte[] fileBytes = file.getBytes();String imgStr = Base64Util.encode(fileBytes);String imgParam = URLEncoder.encode(imgStr, "UTF-8");// 构造请求的URL和参数URL url = new URL(apiEndpoint);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setDoOutput(true);connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 发送请求参数String postData = "image=" + imgParam + "&vehicle_license_side=" + type;connection.getOutputStream().write(postData.getBytes());// 获取响应InputStream inputStream = connection.getInputStream();String response = readStream(inputStream);return JSONObject.parseObject(response);} catch (IOException e) {e.printStackTrace();return new JSONObject();}}// 获取令牌public static String getAccessToken() throws IOException {URL url = new URL(tokenUrl + "?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");InputStream responseStream = connection.getInputStream();String response = StreamUtils.copyToString(responseStream, java.nio.charset.StandardCharsets.UTF_8);JSONObject jsonObject = JSONObject.parseObject(response);return jsonObject.getString("access_token");}// 读取输入流的内容private static String readStream(InputStream inputStream) throws IOException {try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);}return outputStream.toString();}}
}

一个在学习中的开发者,勿喷,欢迎交流

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速入门:使用Python构建学生成绩管理应用

前言 诸位观众&#xff0c;本学期我有幸学习了Python编程课程。随着课程的结束&#xff0c;授课教师布置了一项任务&#xff0c;要求我们开发一个学生信息管理系统。基于老师的要求&#xff0c;我个人独立完成了这项任务。今天&#xff0c;我希望将这个简易的程序分享给大家&a…

【数字三角形】

题目 代码 #include <bits/stdc.h> using namespace std;const int N 510; int f[N][N]; int a[N][N]; int main() {int n;cin >> n;for(int i 1; i < n; i){for(int j 1; j < i; j){cin >> a[i][j];if(i 1 && j 1) f[i][j] a[i][j];el…

ORCAD Capture CIS 打开原理图总是卡住

原因&#xff1a;ORCAD自动进行了DRC检查。要打开的原理图中footprint未指定footprint路径。 修改&#xff1a;1、第一种方法&#xff1a;指定footprint路径 2、第二种方法&#xff1a;关闭在线DRC检查

钢包智慧管理平台

钢包智慧管理平台基于海康、大华视频监控&#xff0c;实现对钢包的全动态管理&#xff0c;实时检测钢包的温度数据变化&#xff0c;也可以随时查询时间区间内的钢包温度数据变化。 平台基于springboot vue前后台分离技术开发&#xff0c;视频基于zlmedia的转码拉流。实现了视频…

STM32————SPI硬件外设实现读写

首先是理论知识&#xff1a; 常用8位数据帧、高位先行 SPI的时钟由PCLK内部时钟分频得来&#xff0c;最大可到36MHz 精简为半双工就是去掉一根数据线后&#xff0c;用剩下的一根作为发送/接收数据&#xff1b;单工就是去掉接收线&#xff0c;只用发送线进行发送数据&#xf…

揭秘CAAC、AOPA、ALPA、ASFC和UTC无人机执照的差别及实用价值

CAAC、AOPA、ALPA、ASFC和UTC无人机执照各有其独特的差别及实用价值&#xff0c;以下是针对这些执照的详细解析&#xff1a; 一、CAAC无人机执照 颁发机构&#xff1a;中国民用航空局&#xff08;CAAC&#xff09; 差别&#xff1a; - 权威性&#xff1a;CAAC无人机执照是目…

Java面试题--JVM大厂篇之JVM 大厂面试题及答案解析(2)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到我的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博客&…

Leetcode 1108. IP地址无效化

Leetcode 1108. IP 地址无效化 问题&#xff1a;给你一个有效的 IPv4 地址address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 "[.]" 代替了每个 "."。 方法1&#xff1a;对字符串挨个进行判断&#xff0c;如…

http连接未释放导致生产故障

凌晨4点运维老大收到NAT网关连接数打满报警&#xff08;官网页面接口超时&#xff09;&#xff0c;运维自己先看了看服务器相关配置&#xff0c;先后还联系了阿里云的客服&#xff0c;客服建议升级NAT网络连接阈值&#xff0c;之前是1w升级到了5w&#xff0c;但后来还是给研发打…

安装torchvision==0.5.0

安装pytorch 1.4 但是在当前配置的镜像源中找不到 torchvision0.5.0 这个版本的包。 直接找资源下载 网址添加链接描述 直接运行该命令&#xff0c;成功。 然后重复运行上面的命令就可以了 # CUDA 9.2 conda install pytorch1.4.0 torchvision0.5.0 cudatoolkit9.2 -c pyto…

Python编码系列—Python单元测试的艺术:深入探索unittest与pytest

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

CS1.5快捷键

《黑神话悟空》玩不起&#xff0c;玩起了23年前的cs1.5 B11&#xff1a;USP(警察自带手枪&#xff09; B12&#xff1a;Glock18(匪徒自带手枪) B13&#xff1a;Desert Eagle&#xff08;沙漠之鹰&#xff09; B14&#xff1a;P-228 B15&#xff1a;Dual Berettas&#xff08;匪…

linux中对.jar文件的配置文件进行修改

linux中对.jar文件的配置文件进行修改 第一步&#xff0c;进入你的.jar的当前文件夹 第二步 &#xff0c;编辑你指定的 .jar 文件 编辑之前请先备份 cp xxx.jar xxx-1.2.jar 输入编辑命令 vim xxx.jar第三步&#xff0c;找到你要编辑的文件 输入命令进入vi模式&#xff08;…

金蝶云星空开发简单账表《物料年采购入库报表》

文章目录 业务背景业务需求方案设计详细设计测试业务背景 系统现有功能不支持查询过去一年内所有物料的入库数,需要人工导出,然后再汇总。 业务需求 可以查询所有物料的入库数,多个物料,单个物料,多个组织,单个组织的入库数,以及支持查询入库数大于某个阈值。 方案设…

Unity教程(十一)使用Cinemachine添加并调整相机

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

一文彻底搞懂CNN - 模型架构(Model Architecture)

CNN Model Architecture CNN&#xff08;卷积神经网络&#xff09;的模型架构由输入层、卷积层、池化层以及全连接层组成&#xff0c;通过卷积操作提取图像特征&#xff0c;并通过池化减少参数数量&#xff0c;最终通过全连接层进行分类或回归。 输入层&#xff1a;接收原始图…

【奇某信-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Android Jitpack制作远程仓库aar流程

开发高效提速系列目录 软件多语言文案脚本自动化方案Android Jitpack制作远程仓库aar流程 Android Jitpack制作远程仓库aar流程 背景aar制作与使用1. aar制作2. aar使用 异常解决总结 博客创建时间&#xff1a;2023.08.24 博客更新时间&#xff1a;2023.08.24 以Android stud…

【闪送-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

如何使用ssm实现农家乐信息平台的设计与实现+vue

TOC ssm066农家乐信息平台的设计与实现vue 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各…