SpringBoot+OCR 实现图片文字识别

SpringBoot+OCR 实现图片文字识别详细攻略

本文将详细介绍如何使用 SpringBoot 结合 OCR 技术实现图片文字识别的完整过程。其中,主要涉及到环境搭建、技术选型、代码实现等方面的内容。

技术选型

在本次项目中,我们将使用以下技术实现图片文字识别功能:

  • SpringBoot:用于快速搭建基于 Spring 等技术栈的应用程序,提供了从配置到部署的大量开箱即用的功能模块。
  • OCR:即 Optical Character Recognition,中文名为光学字符识别,简单来说就是将图片中的文字识别出来。本项目中,我们将使用百度 OCR 提供的 API 进行图片文字识别。
  • Maven:用于项目构建,管理 Java 项目的依赖。

环境搭建

在开始项目之前,我们需要进行以下环境搭建:

  1. 安装 JDK 和 Maven。
  2. 注册百度 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技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • java 百度手写文字识别接口配置代码

    当我们需要在Java项目中使用百度手写文字识别接口进行文字识别时,需要进行如下步骤: 1. 百度账号注册与认证 在使用百度手写文字识别API之前,我们需要拥有百度账号并通过实名认证获取相应的API Key和Secret Key。具体步骤可以参照百度API开发者中心的相关文章进行操作。 2. 引入Java SDK 百度AI开放平台提供了Java SDK,我们可…

    人工智能概论 2023年5月25日
    00
  • Django 解决新建表删除后无法重新创建等问题

    下面是基于Django的解决新建表删除后无法重新创建等问题的完整攻略。 问题描述 在使用Django开发时,有时候我们会遇到新建数据表之后,再次删除数据表时会出现无法重新创建数据表的情况。 这种情况通常出现在我们删除数据表之后,模型元数据表中仍然保留着该数据表的记录。如果我们重新创建同名数据表,Django会发现元数据表中已经保存了同名数据表的信息,进而拒绝…

    人工智能概论 2023年5月25日
    00
  • 使用python 将图片复制到系统剪贴中

    下面我将详细讲解使用Python将图片复制到系统剪贴板中的完整攻略。 前置知识 在开始这个操作之前,需要你了解以下两个模块: Pillow:一个Python中的图像处理库,可以用来处理图片。 PyQt5:Python中的Qt5 GUI工具包,可以用来创建桌面应用程序。 实现过程 第一步:安装所需模块 首先需要安装所需的Pillow和PyQt5模块。可以通过以…

    人工智能概览 2023年5月25日
    00
  • 表单文本框尺寸调整与按钮对齐问题(分成了两行)

    下面是表单文本框尺寸调整与按钮对齐问题的完整攻略: 表单文本框尺寸调整与按钮对齐问题 调整文本框的尺寸 在HTML中,文本框的尺寸可以通过<input>标签的size属性进行设置,但这种方法并不灵活。更好的方法是使用CSS进行调整: input[type="text"], textarea { width: 100%; box…

    人工智能概论 2023年5月25日
    00
  • python图形开发GUI库wxpython使用方法详解

    Python图形开发GUI库wxPython使用方法详解 wxPython是一个开源的Python图形开发GUI库,它可以用来创建本机GUI应用程序,wxPython是对wxWidgets C++ 代码库的Python绑定。 安装wxPython 在使用wxPython之前,需要先安装它。在Windows上,可以从wxPython的官方网站(https://…

    人工智能概览 2023年5月25日
    00
  • 使用Node.js和Socket.IO扩展Django的实时处理功能

    使用Node.js和Socket.IO扩展Django的实时处理功能 介绍 Real-time应用程序是当前Web开发的热门议题之一,它能够让你在没有任何延迟的情况下与你的用户进行实时的通信。 Node.js和Socket.IO是两个非常流行的工具,能够让你轻松地在Django应用程序中实现实时功能。本文将演示如何使用Node.js和Socket.IO扩展D…

    人工智能概览 2023年5月25日
    00
  • opencv python 2D直方图的示例代码

    下面就是OpenCV Python 2D直方图的示例代码攻略的详细讲解: 标题 OpenCV Python 2D直方图的示例代码 简介 本文将详细讲解如何使用OpenCV Python库来绘制2D直方图,同时提供两个示例说明。 示例说明一 问题 我们有一张灰度图片,想要查看其像素值分布情况,希望能够用直方图来表示。 解决方案 以下是使用OpenCV Pyth…

    人工智能概论 2023年5月25日
    00
  • 浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比

    浅谈一下RabbitMQ、Kafka和RocketMQ消息中间件对比 消息中间件是现代分布式系统中的重要组件之一。在大规模分布式系统中,消息中间件提供了可扩展性、可靠性和可用性等关键特性,从而有助于构建可靠的,对分布式应用程序透明的基础设施。RabbitMQ、Kafka和RocketMQ是广泛应用的三个消息中间件,本文将重点探讨它们的特点和优劣。 Rabbi…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部