SpringBoot+OCR 实现图片文字识别详细攻略
本文将详细介绍如何使用 SpringBoot 结合 OCR 技术实现图片文字识别的完整过程。其中,主要涉及到环境搭建、技术选型、代码实现等方面的内容。
技术选型
在本次项目中,我们将使用以下技术实现图片文字识别功能:
- SpringBoot:用于快速搭建基于 Spring 等技术栈的应用程序,提供了从配置到部署的大量开箱即用的功能模块。
- OCR:即 Optical Character Recognition,中文名为光学字符识别,简单来说就是将图片中的文字识别出来。本项目中,我们将使用百度 OCR 提供的 API 进行图片文字识别。
- Maven:用于项目构建,管理 Java 项目的依赖。
环境搭建
在开始项目之前,我们需要进行以下环境搭建:
- 安装 JDK 和 Maven。
- 注册百度 OCR 并获取 API Key 和 Secret Key。
代码实现
1. 创建 Maven 项目
首先创建一个 Maven 项目,并且在 pom.xml 中添加以下依赖:
<!--SpringBoot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--百度云OCR-->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.16.1</version>
</dependency>
2. 配置百度 OCR
在项目中配置百度 OCR 的 API Key 和 Secret Key,代码示例:
import com.baidu.aip.ocr.AipOcr;
public class OCRUtil {
private static final String APP_ID = "your_app_id";
private static final String API_KEY = "your_api_key";
private static final String SECRET_KEY = "your_secret_key";
private static final AipOcr aipOcr;
static {
// 初始化 AipOcr
aipOcr = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
aipOcr.setConnectionTimeoutInMillis(2000);
aipOcr.setSocketTimeoutInMillis(60000);
}
public static AipOcr getAipOcr() {
return aipOcr;
}
}
3. 实现图片文字识别接口
在 SpringBoot 项目中,我们可以使用 @RestController 注解实现 RESTful 风格的接口。代码示例:
import com.baidu.aip.ocr.AipOcr;
import org.json.JSONObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Optional;
@RestController
@RequestMapping("/ocr")
public class OCRController {
/**
* 上传文件并进行 OCR
*
* @param file 要上传的文件
* @param request HTTP 请求
* @return 包含 OCR 结果的 JSON 字符串
*/
@PostMapping("/upload")
public String upload(MultipartFile file, HttpServletRequest request) {
if (file.isEmpty()) {
return "上传失败,请选择文件";
}
try {
// 获取文件名
String filename = file.getOriginalFilename();
// 获取文件后缀名
String suffixName = filename.substring(filename.lastIndexOf("."));
// 重新生成文件名
String newFilename = System.currentTimeMillis() + suffixName;
// 获取上传文件夹路径
String uploadFolder = request.getServletContext().getRealPath("/upload/");
// 新建文件
File destFile = new File(uploadFolder, newFilename);
// 保存文件
file.transferTo(destFile);
// 进行 OCR
AipOcr aipOcr = OCRUtil.getAipOcr();
HashMap<String, String> options = new HashMap<>(2);
options.put("language_type", "CHN_ENG");
options.put("detect_direction", "true");
JSONObject res = aipOcr.basicGeneral(destFile.getAbsolutePath(), options);
return res.toString(2);
} catch (IOException e) {
e.printStackTrace();
}
return "上传失败";
}
}
4. 编写前端页面
最后,我们需要编写一个简单的 HTML 页面来实现图片上传并调用 OCR 接口的功能。代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SpringBoot+OCR 实现图片文字识别</title>
</head>
<body>
<h1>SpringBoot+OCR 实现图片文字识别</h1>
<form action="/ocr/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<br />
<input type="submit" value="提交" />
</form>
</body>
</html>
示例说明
示例 1
假设有一张图片,图片中包含一行英文 "Hello World" 和一行中文 "你好,世界",我们将使用上述代码进行图片文字识别。
首先启动 SpringBoot 项目,在浏览器中打开 HTML 页面,选择要识别的图片并上传。上传成功后,页面将会返回一个 JSON 字符串,其中包含了图片中的文字。
正确输出应该类似于如下格式:
{
"log_id": xxx,
"words_result_num": 2,
"words_result": [
{
"words": "Hello World"
},
{
"words": "你好,世界"
}
],
"language": xxx
}
示例 2
假设有一张图片,图片中包含一行错误的英文和一行错误的中文,我们将使用上述代码进行图片文字识别。
首先启动 SpringBoot 项目,在浏览器中打开 HTML 页面,选择要识别的图片并上传。上传成功后,页面将会返回一个 JSON 字符串,其中包含了图片中的文字。
由于图片中的文字包含错误,因此输出结果可能存在一定的错误。
总结
至此,本文介绍了如何使用 SpringBoot 结合 OCR 技术实现图片文字识别的完整过程,涉及了环境搭建、技术选型、代码实现以及两个示例的说明。在实际项目中,我们可以根据需要对代码进行一定的修改来适应具体的业务场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot+OCR 实现图片文字识别 - Python技术站