java 对接百度AI文字识别第三方接口--(api方式以及sdk方式)

news2024/12/23 11:43:50

平时在工作当中难免会需要对接第三方接口。今天就带领大家来实践一下百度ai的文字识别技术。我使用的是文字识别中名片识别服务,别问为什么,因为是免费的,其他的服务要钱。。。。。。

一:准备工作

  1. 首先需要在百度ai官方网站注册账号
    百度ai官方网站如下:
    https://ai.baidu.com/
  2. 注册完毕之后需要添加一个属于自己的应用
    步骤如下:
    1、选择文字识别
    在这里插入图片描述
    2、点击创建应用,创建一个应用
    3、填写应用名称–> 选择接口(接口会默认自动选择) --> 应用归属选择个人 --> 填写应用描述 --> 点击创建应用在这里插入图片描述
    4、创建完应用之后会在应用列表中看见你刚刚创建的应用。注意你的 appid、api key、 secrte key。在接下来的开发过程当中会用到。
    在这里插入图片描述

二:开发流程(使用api开发)

注:

使用api开发过程当中需要使用刚刚我们创建应用的api key和secret key

1、回到文字识别控制台,也就是刚刚点击创建应用的地方。点击api文档跳转到百度ai的api文档使用教程页面。
在这里插入图片描述
2、注意选择这边有一个api文档和sdk文档。我们现在先使用api文档的方式来开发。
在这里插入图片描述
3、选择api文档 --> 卡证文字识别 – > 名片识别
在这里插入图片描述
4、点击名片识别后我们选择到java代码部分。然后开始编写我们的代码了。(直接将代码copy下来即可)
在这里插入图片描述

5、百度ai的使用方式还需要json的处理依赖。这边我使用的是maven依赖。

<!--         https://mvnrepository.com/artifact/org.json/json 百度ap放开平台使用json -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>

6、代码编写(这边我帮大家把百度ai上的代码直接copy下来了,以及url的token获取方法我也复制下来了。)

package com.aq.baiduai.ai.aip;

import com.aq.baiduai.ai.aip.auth.AuthService;
import com.aq.baiduai.ai.utils.Base64Util;
import com.aq.baiduai.ai.utils.FileUtil;
import com.aq.baiduai.ai.utils.HttpUtil;

import java.net.URLEncoder;

/**
* 名片识别 api 方式调用
*/
public class BusinessCard {

    /**
    * 重要提示代码中所需工具类 注意项目当中需要使用的工具类均可以从以下地址下载 注意包的不同下载的工具类都是以baidu规范命名
    * FileUtil,Base64Util,HttpUtil,GsonUtils请从
    * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
    * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
    * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
    * 
    * 下载
    */
    public static String businessCard() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_card";
        try {
            // 本地文件路径
            String filePath = "E:\\abutment_port\\card.jpg";
            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "image=" + imgParam;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = AuthService.getAuth();

            String result = HttpUtil.post(url, accessToken, param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        BusinessCard.businessCard();
    }
}
package com.aq.baiduai.ai.aip.auth;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

/**
 * 获取token类
 */
public class AuthService {

    /**
     * 获取权限token
     * @return 返回示例:
     * {
     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
     * "expires_in": 2592000
     * }
     */
    public static String getAuth() {
        // 官网获取的 API Key 更新为你注册的
        String clientId = "";
        // 官网获取的 Secret Key 更新为你注册的
        String clientSecret = "";
        return getAuth(clientId, clientSecret);
    }

    /**
     * 获取API访问token
     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Secret Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    public static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            JSONObject jsonObject = new JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }

}

7、我在代码中上传的名片如下:个人信息要打马赛克要不然会违规
在这里插入图片描述

8、执行main方法后控制台打印输出结果如下:
在这里插入图片描述
综上,java对接第三方接口文字识别–百度AI(api方式) 的入门到此就结束了。

三:开发流程(使用sdk开发)

注:

使用sdk开发过程当中需要使用刚刚我们创建应用的 appid、api key、secret key

1、上述是演示使用api文档的方式来开发。接下来我们使用sdk的方式来开发。我们这次选择sdk文档。
注:使用sdk更加轻便快捷

sdk方式开发相比于使用api方式减少了工作量以及代码。

在这里插入图片描述
2、选择了sdk文档中 – > java语言快速入门。
3、maven依赖。
注:

api方式需要依赖json处理。sdk也需要。但是sdk的依赖当中包含了json20160810,所以使用sdk的方式就不需要依赖json20160810了

<!--百度ap放开平台使用 sdk  包含了 json20160810 -->
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.16.13</version>
        </dependency>

4、编写代码部分

package com.aq.baiduai.ai.sdk;

import com.baidu.aip.ocr.AipOcr;
import org.json.JSONObject;

import java.util.HashMap;

/**
 * 通过sdk方式 识别名片信息
 */
public class Sample {
    //设置APPID/AK/SK 注意这边相对于api方式开发 需要使用appid
    public static final String APP_ID = "";
    public static final String API_KEY = "";
    public static final String SECRET_KEY = "";

    public static void main(String[] args) {
        // 初始化一个AipOcr
        AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

        // 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//        client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//        client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理

        // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
        // 也可以直接通过jvm启动参数设置此环境变量
//        System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

        // 调用接口
        String path = "E:\\abutment_port\\card.jpg";
        JSONObject res = client.basicGeneral(path, new HashMap<String, String>());
        System.out.println(res.toString(2));

    }
}

5、跟刚刚一样使用的是同一张名片。执行main方法后控制台打印输出结果如下:
在这里插入图片描述

这个案例了解到第三方接口对接的快速入门,市面大部分的第三方对接都是这套流程。有什么不足的欢迎大家留言补充。

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

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

相关文章

【案例实践】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法

【点击观看视频】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法 文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技…

如何定位线上问题?

面试官&#xff1a;「你是怎么定位线上问题的&#xff1f;」 这个面试题我在两年社招的时候遇到过&#xff0c;前几天面试也遇到了。我觉得我每一次都答得中规中矩&#xff0c;今天来梳理复盘下&#xff0c;下次又被问到的时候希望可以答得更好。 下一次我应该会按照这个思路…

景联文科技2D3D融合标注案例分享|数据标注

在自动驾驶场景中&#xff0c;激光雷达生成的点云数据可用于测量物体的形状和轮廓&#xff0c;并估算出周围物体的位置和速度&#xff0c;但由于激光雷达生成的点云数据缺少RGB数据中存在的纹理和颜色信息&#xff0c;无法精确地识别出路上的汽车、行人、障碍物、信号灯等。而2…

网络流及几种算法FF、EK、Dinic

终于要开始学习&&复习这个知识点了&#xff0c;说句实话半年多之前就该写这篇文章来加强理解&#xff0c;但是一直没有落实&#xff0c;因为又去练习了很多学过的算法&#xff0c;感觉这个算法不太常用哦&#xff0c;传说中的省选算法&#xff0c;比赛比较少见&#xf…

在2022 CCF上获得两项大奖!

喜报!      在日前举行的      2022全国高性能计算学术年会上      戴尔科技集团      获得两项大奖!      戴尔科技PowerEdge绿色数据中心      液冷解决方案荣获“解决方案奖”    PowerEdge R750 DAOS      高性能分布式存储系统荣获“产品…

基于springboot+mybatis+mysql+jsp网上书城管理系统

基于 springbootmybatismysqljsp 网上书城管理系统一、系统介绍二、功能展示1.主页(客户)2.登陆&#xff08;客户&#xff09;3.我的购物车(客户)4.我的订单&#xff08;客户&#xff09;5.我的图书&#xff08;商家&#xff09;6.新书上架&#xff08;商家&#xff09;7.订单管…

股指期货是怎么交易的?3分钟教你从入门到精通

相对比投资于单一的产品而言&#xff0c;越来越多的投资者开始爱上股指期货&#xff0c;因为指数的波动速度特别的快&#xff0c;再加上里面的收益空间也特别的饱满&#xff0c;所以这是绝大多数希望赚快钱的投资者最喜欢的类似期货、股票等产品。而且很多进入到这个市场的投资…

CodeQL代码静态污点分析引擎排查漏洞模式

文章目录前言环境搭建1.1 codeql基础1.2 vscode插件1.3 生成数据库1.4 HelloWorldcodeql语法2.1 语法结构2.2 常用类库2.3 谓词介绍2.4 污点分析漏洞检测3.1 初步结果3.2 解决误报总结前言 对于代码审计的工作&#xff0c;最早期的安全人员会以人工审计的方式来审计项目代码&a…

【学习笔记】jenkins持续集成入门

jenkins持续集成入门 文章目录学习源一、jenkins简介和安装安装&#xff1a;插件:安装插件&#xff1a;二、配置Jenkins系统邮箱三、使用jenkins实现持续集成&#xff08;一&#xff09;使用Jenkins实现简单的本地Python项目代码执行准备工作&#xff1a;使用Jenkins管理-手动构…

PHP开发工具PhpStorm v2022.3——完全支持PHP 8.2

PhpStorm是一个轻量级且便捷的PHP IDE&#xff0c;其旨在提高用户效率&#xff0c;可深刻理解用户的编码&#xff0c;提供智能代码补全&#xff0c;快速导航以及即时错误检查。可随时帮助用户对其编码进行调整&#xff0c;运行单元测试或者提供可视化debug功能。 PhpStorm v20…

PM说丨浅谈PDCA与Scrum的“异曲同工”之妙

文章目录一、前言二、PDCA与Scrum介绍1、 PDCA循环&#xff08;戴明环&#xff09;2、 Scrum三、PDCA与Scrum对比四、总结一、前言 笔者最近参与到一个生产制造型企业的ERP系统升级改造项目&#xff0c;实施过程中涉及到QMS与质量管理相关内容。 在了解质量管理体系的过程中发…

如何优雅地使用git?

文章目录Oh shit gitgitmojigit命令思维导图Oh shit git https://ohshitgit.com/ 这个网站针对一些在使用git中可能遇到的问题都做了详细介绍&#xff0c;并且形象生动。 例如&#xff1a;Oh shit&#xff0c;我想改个地方&#xff0c;但我已经提交&#xff08;commited&#…

现代C++ 05

智能指针与内存管理 1.1 RAII 与引用计数 了解 Objective-C/Swift 的程序员应该知道引用计数的概念。引用计数这种计数是为了防止内存泄露而产生的。 基本想法是对于动态分配的对象&#xff0c;进行引用计数&#xff0c;每当增加一次对同一个对象的引用&#xff0c;那么引用对…

云安全攻击手段及防御策略

恶意软件是我们必须面对的现实&#xff0c;我们每天都需要与蠕虫、病毒、间谍软件和其他行恶意软件作斗争&#xff0c;而云恶意软件是我们需要面对的又一种类别。它已经发展十多年&#xff0c;早在2011年就托管在亚马逊简单存储服务存储桶中。云安全提供商Netskope报告称&#…

SpringCloud01--黑马【上】

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法 本次和大家分享三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法,由于汇川IT6000系列触摸屏组态软件中没有三菱FX5U系列PLC的连接驱动,所以采用MODBUS TCP通信的方式实现。 具体步骤可…

黄海冷水区微生物群落的季节演替及温度响应模式

期刊&#xff1a;Applied and Environmental Microbiology 影响因子&#xff1a;5.005 发表时间&#xff1a;2022 样本类型&#xff1a;水体 客户单位&#xff1a;中国海洋大学 凌恩客户中国海洋大学发表在《Applied and Environmental Microbiology》上的文章…

vue3 antd项目实战——table表格 根据属性值设置背景颜色【rowClassName添加行样式 + /deep/样式穿透 + css不可控】

根据数据属性值添加table表格行样式&#xff08;rowClassName&#xff09;知识调用场景复现利用rowClassName编写行样式编写行样式函数➕筛选条件编写特定的行样式取消相应的斑马纹样式知识调用 文章中可能会用到的知识链接vue3ant design vuets实战【ant-design-vue组件库引入…

如何检测时间序列中的异方差(Heteroskedasticity)

时间序列中非恒定方差的检测与处理&#xff0c;如果一个时间序列的方差随时间变化&#xff0c;那么它就是异方差的。否则数据集是同方差的。 异方差性影响时间序列建模。因此检测和处理这种情况非常重要。 让我们从一个可视化的例子开始。 下面的图1显示了航空公司乘客的时间…

Zotero快速入门

文章目录一、前言二、下载和安装Zotero三、界面初识和基本操作3.1 创建分类3.2 文献导入3.2.1 自动导入3.2.2 手动导入3.3 内置pdf管理3.4 同步3.5 插件3.5.1 安装方法3.5.2 插件推荐四、与word/wps协同引用文献4.1 使用内置格式4.1.1 添加索引4.1.2 添加书目4.2 自定义格式4.2…