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

一个基于 Spring Boot 的实现,用于代理百度 AI 的 OCR 接口

一个基于 Spring Boot 的实现,用于代理百度 AI 的 OCR 接口

    • BaiduAIController.java
    • BaiduAIConfig.java
    • 在 application.yml 或 application.properties 中添加配置:application.yml
    • 同时,需要在Spring Boot应用中配置RestTemplate:ApplicationConfig.java

BaiduAIController.java

package com.ranfeng.controller;import com.ranfeng.common.core.domain.AjaxResult;
import com.ranfeng.config.BaiduAIConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;/*** 百度AI接口代理控制器*/
@RestController
@RequestMapping("/api/baidu")
public class BaiduAIController {@Autowiredprivate BaiduAIConfig baiduAIConfig;@Autowiredprivate RestTemplate restTemplate;/*** 获取百度AI的access token*/@GetMapping("/token")public AjaxResult getToken() {try {String url = "https://aip.baidubce.com/oauth/2.0/token";MultiValueMap<String, String> params = new LinkedMultiValueMap<>();params.add("grant_type", "client_credentials");params.add("client_id", baiduAIConfig.getApiKey());params.add("client_secret", baiduAIConfig.getSecretKey());HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);Map<String, Object> response = restTemplate.postForObject(url, requestEntity, Map.class);return AjaxResult.success(response);} catch (Exception e) {return AjaxResult.error("获取百度AI Token失败: " + e.getMessage());}}/*** 调用百度OCR识别接口*/@PostMapping("/ocr")public AjaxResult ocrRecognize(@RequestBody Map<String, Object> requestData) {try {// 获取tokenString tokenUrl = "https://aip.baidubce.com/oauth/2.0/token";MultiValueMap<String, String> tokenParams = new LinkedMultiValueMap<>();tokenParams.add("grant_type", "client_credentials");tokenParams.add("client_id", baiduAIConfig.getApiKey());tokenParams.add("client_secret", baiduAIConfig.getSecretKey());HttpHeaders tokenHeaders = new HttpHeaders();tokenHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);HttpEntity<MultiValueMap<String, String>> tokenRequestEntity = new HttpEntity<>(tokenParams, tokenHeaders);Map<String, Object> tokenResponse = restTemplate.postForObject(tokenUrl, tokenRequestEntity, Map.class);String accessToken = (String) tokenResponse.get("access_token");// 调用OCR接口String ocrUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=" + accessToken;MultiValueMap<String, String> ocrParams = new LinkedMultiValueMap<>();ocrParams.add("image", (String) requestData.get("image"));ocrParams.add("language_type", (String) requestData.get("language_type"));ocrParams.add("detect_direction", (String) requestData.get("detect_direction"));ocrParams.add("probability", (String) requestData.get("probability"));HttpHeaders ocrHeaders = new HttpHeaders();ocrHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);HttpEntity<MultiValueMap<String, String>> ocrRequestEntity = new HttpEntity<>(ocrParams, ocrHeaders);Map<String, Object> ocrResponse = restTemplate.postForObject(ocrUrl, ocrRequestEntity, Map.class);return AjaxResult.success(ocrResponse);} catch (Exception e) {return AjaxResult.error("OCR识别失败: " + e.getMessage());}}
}

BaiduAIConfig.java

package com.ranfeng.config;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;/*** 百度AI配置类*/
@Configuration
@ConfigurationProperties(prefix = "baidu.ai")
public class BaiduAIConfig {private String apiKey;private String secretKey;public String getApiKey() {return apiKey;}public void setApiKey(String apiKey) {this.apiKey = apiKey;}public String getSecretKey() {return secretKey;}public void setSecretKey(String secretKey) {this.secretKey = secretKey;}
}

在 application.yml 或 application.properties 中添加配置:application.yml

# 百度AI配置
baidu:ai:api-key: xxxxxsecret-key: xxxxxx

同时,需要在Spring Boot应用中配置RestTemplate:ApplicationConfig.java

package com.ranfeng.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ApplicationConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
http://www.xdnf.cn/news/6326.html

相关文章:

  • 06Spring—AOP @Around环绕通知的进阶思考
  • 【愚公系列】《Manus极简入门》040-科技与组织升级顾问:“项目掌舵人”
  • 第35周Zookkeeper+Dubbo JDK不同版本介绍
  • 75.xilinx复数乘法器IP核调试
  • 麒麟系统下Tomcat部署Java Web程序(WAR包)及全链路问题排查指南
  • R语言的专业网站top5推荐
  • recvfrom和sendto函数中地址参数的作用
  • Redis学习打卡-Day2-缓存更新策略、主动更新策略、缓存穿透、缓存雪崩、缓存击穿
  • Cocos Creator 3.8.5 构建依赖环境配置文档
  • 从零开始创建一个 Next.js 项目并实现一个 TodoList 示例
  • 计算机网络八股
  • Reactor模型详解与C++实现
  • 云原生数据库排障新挑战:AI驱动与分布式架构深度解析
  • 什么是抖动以及如何使用抖动缓冲区来减少抖动?
  • 深度解析IP静态的工作原理,IP静态的应用场景又哪些?
  • 实现可靠的 WebSocket 连接:心跳与自动重连的最佳实践
  • [c语言日寄]数据结构:栈
  • CSS AI 通义灵码 VSCode插件安装与功能详解
  • SSM项目集成redis、Linux服务器安装redis
  • 在vs code 中无法运行npm并报无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
  • 【Java ee】关于抓包软件Fiddler Classic的安装与使用
  • 【day01】 Chroma 核心操作流程
  • 基于互联网和LabVIEW的多通道数据采集系统仿真设计
  • Ruby 循环与迭代器
  • 趣味编程:钟表
  • 阿里巴巴 1688 数据接口开发指南:构建自动化商品详情采集系统
  • React 轻量级富文本编辑器推荐(中文版)
  • 左手坐标系、右手坐标系、坐标轴方向
  • 每日Prompt:磨砂玻璃后的虚实对比剪影
  • k8s 1.10.26 一次containerd失败引发kubectl不可用问题