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

告别复杂配置!Spring Boot优雅集成百度OCR的终极方案

1. 准备工作

1.1 注册百度AI开放平台
  1. 访问百度AI开放平台

  2. 注册账号并登录

  3. 进入控制台 → 文字识别 → 创建应用

  4. 记录下API KeySecret Key


2. 项目配置

2.1 添加依赖 (pom.xml)
<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Configuration Properties 处理器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!-- Apache HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><!-- JSON 处理 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
</dependencies>
2.2 配置YAML (application.yml)
baidu:ocr:api-key: "your_api_key"         # 替换为你的API Keysecret-key: "your_secret_key"   # 替换为你的Secret Keyaccess-token-url: "https://aip.baidubce.com/oauth/2.0/token"general-basic-url: "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"

3. 配置参数封装

3.1 创建配置类 (BaiduOcrProperties.java)
@Data
@Builder
@Component
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "baidu.ocr")
public class BaiduOcrProperties {private String apiKey;private String secretKey;private String accessTokenUrl;private String generalBasicUrl;
}

4. OCR服务实现

4.1 工具类:获取Access Token (AccessTokenUtil.java)
@Component
public class AccessTokenUtil {private final BaiduOcrProperties ocrProperties;@Autowiredpublic AccessTokenUtil(BaiduOcrProperties ocrProperties) {this.ocrProperties = ocrProperties;}public String getAccessToken() throws IOException {String url = String.format("%s?grant_type=client_credentials&client_id=%s&client_secret=%s",ocrProperties.getAccessTokenUrl(),ocrProperties.getApiKey(),ocrProperties.getSecretKey());try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet httpGet = new HttpGet(url);try (CloseableHttpResponse response = httpClient.execute(httpGet)) {HttpEntity entity = response.getEntity();String json = EntityUtils.toString(entity);// 解析JSON获取access_tokenreturn json.split("\"access_token\":\"")[1].split("\"")[0];}}}
}
4.2 OCR服务类 (BaiduOcrService.java)
@Service
public class BaiduOcrService {private final AccessTokenUtil accessTokenUtil;private final BaiduOcrProperties ocrProperties;@Autowiredpublic BaiduOcrService(AccessTokenUtil accessTokenUtil, BaiduOcrProperties ocrProperties) {this.accessTokenUtil = accessTokenUtil;this.ocrProperties = ocrProperties;}public String recognizeText(MultipartFile file) throws IOException {// 1. 获取Access TokenString accessToken = accessTokenUtil.getAccessToken();// 2. 将图片转换为Base64String imageBase64 = Base64.getEncoder().encodeToString(file.getBytes());// 3. 构建请求参数Map<String, String> params = new HashMap<>();params.put("image", imageBase64);params.put("language_type", "CHN_ENG"); // 中英文混合// 4. 发送OCR请求String url = ocrProperties.getGeneralBasicUrl() + "?access_token=" + accessToken;return postFormData(url, params);}private String postFormData(String url, Map<String, String> params) throws IOException {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpPost httpPost = new HttpPost(url);httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");// 构建表单参数StringBuilder formData = new StringBuilder();for (Map.Entry<String, String> entry : params.entrySet()) {if (!formData.isEmpty()) formData.append("&");formData.append(entry.getKey()).append("=").append(entry.getValue());}httpPost.setEntity(new StringEntity(formData.toString()));try (CloseableHttpResponse response = httpClient.execute(httpPost)) {HttpEntity entity = response.getEntity();return EntityUtils.toString(entity);}}}
}

5. 控制器层

5.1 图片识别接口 (OcrController.java)
@RestController
public class OcrController {private final BaiduOcrService ocrService;@Autowiredpublic OcrController(BaiduOcrService ocrService) {this.ocrService = ocrService;}@PostMapping("/ocr")public String recognizeImage(@RequestParam("image") MultipartFile file) {try {return ocrService.recognizeText(file);} catch (Exception e) {return "{\"error\": \"" + e.getMessage() + "\"}";}}
}

6. 关键点说明

  1. 配置封装
    使用@ConfigurationProperties将YAML中的配置自动绑定到Java对象

  2. Access Token获取
    百度OCR需要先获取临时Access Token(有效期30天)

  3. 图片处理
    将上传的图片转换为Base64编码

  4. 错误处理
    实际生产中需添加更完善的异常处理机制

  5. 性能优化

    • 缓存Access Token(避免每次请求都获取)

    • 使用连接池管理HTTP客户端

    • 限制上传图片大小(在application.yml中配置spring.servlet.multipart.max-file-size


完整项目结构

src/main/java
├── com/example/demo
│   ├── config
│   │   └── BaiduOcrProperties.java
│   ├── controller
│   │   └── OcrController.java
│   ├── service
│   │   ├── BaiduOcrService.java
│   │   └── AccessTokenUtil.java
│   └── DemoApplication.java
resources
└── application.yml

通过以上步骤,你已完成了一个可扩展的Spring Boot百度OCR集成方案。实际部署时请将YAML中的API密钥替换为你的实际密钥。

http://www.dtcms.com/a/299328.html

相关文章:

  • C语言基础10——函数
  • Qt 与 WebService 交互开发
  • Linux学习 韦东山IMX6ULL(一)搭建环境并编译程序
  • SQL Developer Data Modeler:一款免费跨平台的数据库建模工具
  • 强化学习(第三课第三周)
  • Rust赋能土木工程数字化
  • AUTOSAR进阶图解==>AUTOSAR_SRS_TimeService
  • Raft 协议 Paxos协议 和zk协议的特点和异同
  • 【Pandas】pandas Index objects Index.shape
  • 【温度传感器】热电偶、热敏电阻、热电阻、热成像仪原理及精度解析
  • ASP.NET Core MVC中taghelper的ModelExpression详解
  • .NET Core中的配置系统
  • 记录和分享抓取的数字货币和大A时序数据
  • 去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新
  • AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
  • 如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)
  • kafka的消费者负载均衡机制
  • 《人性的弱点》重构【01】
  • Java:采用mybatis+pagehealper优雅的实现分页功能
  • Flutter 提取图像主色调 ColorScheme.fromImageProvider
  • Go 的时间包:理解单调时间与挂钟时间
  • SWC 深入全面讲解
  • 集成学习的相关理论阐述
  • RocketMQ学习系列之——特殊消息类型
  • 塞舌尔公司良好信誉证明Certificate of Good Standing证书的用途
  • 大众化餐饮:把日常过成诗
  • 基于POD和DMD方法的压气机叶片瞬态流场分析与神经网络预测
  • 幸福网咖订座点餐小程序的设计与实现
  • 启动式service
  • Java同步锁性能优化:15个高效实践与深度解析