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

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

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

BaiduAIController.java

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 {

    @Autowired
    private BaiduAIConfig baiduAIConfig;

    @Autowired
    private 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 {
            // 获取token
            String 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

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

yaml 复制代码
# 百度AI配置
baidu:
  ai:
    api-key: xxxxx
    secret-key: xxxxxx

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

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 {
    
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
相关推荐
j***49561 分钟前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
e***95642 分钟前
十八,Spring Boot 整合 MyBatis-Plus 的详细配置
spring boot·后端·mybatis
保加利亚的风3 分钟前
【Java】Spring Boot Event事件驱动开发:使用 ApplicationEvent 实现解耦通信
java·驱动开发·spring boot
数据与后端架构提升之路5 分钟前
感知模块详解:从 OpenCV/YOLO 脚本到 多模态多任务 BEV 架构
人工智能·机器学习·自动驾驶
咚咚王者9 分钟前
人工智能之数据分析 Matplotlib:第五章 常见函数
人工智能·数据分析·matplotlib
天天找自己15 分钟前
TransNeXt 深度解析:聚合注意力机制的突破性视觉骨干网络
人工智能·pytorch·python·深度学习·神经网络
来旺18 分钟前
互联网大厂Java面试实战:核心技术栈与业务场景深度解析
java·spring boot·docker·kubernetes·mybatis·hibernate·microservices
k***19519 分钟前
SpringBoot 使用 spring.profiles.active 来区分不同环境配置
spring boot·后端·spring
踏浪无痕20 分钟前
Maven 依赖冲突的正确处理姿势:别再到处写 exclusion 了
spring boot·spring·maven
iiiiii1121 分钟前
【论文阅读笔记】IDAQ:离线元强化学习中的分布内在线适应
论文阅读·人工智能·笔记·学习·算法·机器学习·强化学习