Docker 部署 Apache Tika 使用 Tesseract OCR

方式1: 手动部署

步骤1: 拉取 apache/tika:latest-full 镜像并启动

拉取命令

docker pull apache/tika:latest-full

启动命令

docker run -d --name tika-docker -p 9998:9998 apache/tika:latest-full
  • -d:后台运行容器
  • --name tika-docker:指定容器名称,方便后续管理
  • -p 9998:9998:将容器的 9998 端口映射到主机的 9998 端口,方便外部访问

步骤2: 安装 Tesseract 中文语言包

首先使用 root 权限进入容器

docker exec -it --user root tika-docker /bin/bash

在容器内安装中文语言包

apt-get update && apt-get install -y tesseract-ocr-chi-sim

方式2: Dockerfile 一键部署

创建一个名为 Dockerfile 的文件(无扩展名), 文件内容如下:

FROM apache/tika:latest-full

# 切换到 root 用户
USER root

# 安装中文语言包并清理 apt 缓存以减小镜像体积
RUN apt-get update && apt-get install -y tesseract-ocr-chi-sim && rm -rf /var/lib/apt/lists/*

使用以下命令构建镜像

docker build -t tika-chinese:latest .

使用以下命令运行容器

docker run -d --name tika-chinese -p 9998:9998 tika-chinese:latest

测试OCR功能

采用Java 代码调用 Tika OCR 服务

1. 引入依赖

2026年3月23日 最新版本为 3.3.0

<!--Apache Tika-->
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>3.3.0</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>3.3.0</version>
    <scope>compile</scope>
</dependency>

2. 编写测试代码

import org.junit.jupiter.api.Test;

import java.io.*;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class TestTikaOCR {

    public static String extractText(File file) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        // 构建上传文件请求
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://localhost:9998/tika"))  // Tika 服务地址
                .header("Accept", "text/plain")  // 请求纯文本格式
                .header("X-Tika-OCRLanguage", "chi_sim+eng") // 识别中文和英文
                .header("Content-Type", "application/octet-stream") // 二进制文件上传
                .PUT(HttpRequest.BodyPublishers.ofFile(file.toPath())) // 上传文件内容
                .build();
        // 发送请求并获取文本
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }

    @Test
    public void testTikaOCR() throws Exception {
        File file = new File("img-zh-01.png");
        String text = extractText(file);
        System.out.println("===== OCR 提取结果 =====");
        System.out.println(text);
    }

    @Test
    public void testTikaOCR2() throws Exception {
        File file = new File("img-en-01.png");
        String text = extractText(file);
        System.out.println("===== OCR 提取结果 =====");
        System.out.println(text);
    }

}

准备图片

中文图片

img-zh-01

英文图片

img-en-01

运行测试

中文识别结果

image

英文识别结果

image

posted @ 2026-03-27 19:44  VasyaManbo  阅读(114)  评论(0)    收藏  举报