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

一个基于 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();}
}

相关文章:

  • React与Docker中的MySQL进行交互
  • DeepSeek执行流程加速指南:跨框架转换与编译优化的核心策略全解析
  • Python60日基础学习打卡D26
  • 记一次bug排查(.exe链接mysql失败)-每天学习一点点
  • 【知识聚合】Java相关技术网址聚合
  • Java详解LeetCode 热题 100(17):LeetCode 41. 缺失的第一个正数(First Missing Positive)详解
  • 【kafka】基本命令
  • [吾爱出品] pdf提取工具,文本、表格、图片提取
  • 从算力困境到创新突破:GPUGEEK如何重塑我的AI开发之旅
  • JESD204 ip核使用与例程分析(一)
  • Coze 实战教程 | 10 分钟打造你的AI 助手
  • 高精度降压稳压技术在现代工业自动化中的应用
  • [Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化
  • 基于FPGA的车速检测系统仿真设计与实现
  • 降本增效双突破:Profinet转Modbus TCP助力包布机产能与稳定性双提升
  • Java 开源报表系统全解析:免费工具、企业案例与集成实践
  • 【Redis】双向链表结构
  • STM32 DMA技术深度解析:从原理到实战应用讲解
  • TCP 粘包
  • TCP实现安全传输的核心机制 + TCP的报文讲解(全程图文讲解)
  • 蒋圣龙突遭伤病出战世预赛存疑,国足生死战后防线严重减员
  • 车建兴被留置:跌落的前常州首富和红星系重整迷路
  • 商务部回应美方加严限制中国芯片:敦促美方立即纠正错误做法
  • 4台肺癌手术,2名“90后”患者,这届年轻人的肺怎么了?
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 宝通科技:与宇树合作已签约,四足机器人在工业场景落地是重点商业化项目