Spring Boot + 百度 OCR 图片文字识别功能
程序员文章站
2022-07-04 16:03:50
...
一、知识点简介
OCR(optical character recognition)文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程。 —— OCR文字识别 - 百度百科
本篇功能是基于百度智能云人工智能接口的文字识别实现,数据请求以Spring Boot为框架。
二、准备工作
首先我们进入百度智能云-管理中心(https://console.bce.baidu.com/)创建一个新应用。
创建新应用时,勾选文字识别下的“通用文字识别”系列选项。(如有其他需求,例如身份证识别等请自行勾选)
创建完毕后,我们可以查看App ID、ApI Key以及Secret Key,这些参数用于后续请求操作。
三、搭建项目
项目框架
- Spring Boot 2.3.2.RELEASE
- 百度云人体识别接口 Baidu AIP Java Sdk 4.15.1
在Spring Boot的pom.xml文件引入百度云人体识别接口包:
<!-- 百度云人体识别接口 SDK https://mvnrepository.com/artifact/com.baidu.aip/java-sdk -->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.15.1</version>
</dependency>
代码编写
静态类
SystemConstants
package com.qianlingo.ocr.constants;
/**
* 系统静态类
* @author qianlingo
* @date 2020/8/10
*/
public class SystemConstants {
/**
* 百度 app_id
*/
public static final String APP_ID = "";
/**
* 百度 api_key
*/
public static final String API_KEY = "";
/**
* 百度 SECRET_KEY
*/
public static final String SECRET_KEY = "";
}
服务层 实现类
OcrServiceImpl
package com.qianlingo.ocr.service.impl;
import com.baidu.aip.ocr.AipOcr;
import com.qianlingo.ocr.constants.SystemConstants;
import com.qianlingo.ocr.service.IOcrService;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
/**
* ORC - Service 实现类
*
* @author qianlingo
* @date 2020/8/10
*/
@Service
public class OcrServiceImpl implements IOcrService {
private static final Logger log= LoggerFactory.getLogger(OcrServiceImpl.class);
/**
* 请求ocr接口,返回json数据
* @param multipartFile 文件
* @return json 字符串数据
*/
@Override
public String actionOcr(MultipartFile multipartFile) {
AipOcr client = new AipOcr(SystemConstants.APP_ID
, SystemConstants.API_KEY, SystemConstants.SECRET_KEY);
HashMap<String, String> options = new HashMap<String, String>(4);
options.put("language_type", "CHN_ENG");
options.put("detect_direction", "true");
options.put("detect_language", "true");
options.put("probability", "true");
// 参数为二进制数组
byte[] buf = new byte[0];
try {
buf = multipartFile.getBytes();
} catch (IOException e) {
e.printStackTrace();
log.error("获取文件字节数据异常,{}",e.getMessage());
}
JSONObject res = client.basicGeneral(buf, options);
String jsonData = "";
try {
jsonData = res.toString(2);
} catch (JSONException e) {
log.error("获取json数据异常,{}",e.getMessage());
}
return jsonData;
}
}
视图控制层
OcrController
package com.qianlingo.ocr.controller;
import com.qianlingo.ocr.service.IOcrService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* Ocr Controller
* @author qianlingo
* @date 2020/8/10
*/
@RestController
@RequestMapping("/ocr")
public class OcrController {
@Resource
private IOcrService iOrcService;
/**
* 传入图片文件,进行识别操作
* @param file 文件数据
*/
@RequestMapping("/actionOcr")
@ResponseBody
public String actionOcr(MultipartFile file){
return this.iOrcService.actionOcr(file);
}
}
Postman 接口测试
body标签,选择form-data提交类型,key框选择file类型,选择文件后点击Send请求接口。
测试图片:
源码
代码已发布至Gitee