# OCR图片理解模型服务Docker部署手册(GPU版)

# 一、服务信息

  • 服务名称: OCR 识别服务
  • 服务功能:可识别图片、PDF扫描件,生成文字,常用于CoMi知识库上传扫描件后进行OCR识别解析成文字
  • 镜像地址: cdhx78.seeyon.com:5356/library/seeyon/ocr:latest-gpu
  • 基础镜像: nvidia/cuda:12.8.1-cudnn-runtime-ubuntu22.04
  • 服务端口: 12841
  • GPU 支持: 是(必需)
  • 依赖CoMi版本: CoMi V2.0.2及以上
  • 支持产品线: V5产品线A6、A8、G6、A8-N、G6-N (注:V8新一代产品线不适用,V8暂不支持此OCR)

OCR镜像安装包较大(20多G),建议通过云盘提前下载,离线安装:

百度网盘中下载ocr镜像
链接: https://pan.baidu.com/s/19jIO87ldikfdLK41DWyeug?pwd=838s
提取码: 838s

什么时候需要部署OCR图片理解模型服务?

用户有大量重要的扫描件、图片需要导入CoMi知识库,此时如果没有OCR服务,会提示:ocr请求失败。

1770278954177.png


# 二、环境要求

# 硬件要求

  • CPU: 4核+
  • 内存: 32G+
  • 磁盘: 500G+
  • 显卡推荐: NVIDIA RTX 4090 * 1

# 软件要求

  • 操作系统: 只适配ubuntu22.04操作系统和X86 CPU架构
  • Docker: 24.0.7+
  • NVIDIA 驱动: 450.80.02+
  • NVIDIA Container Toolkit: 1.0.0+

说明: 镜像已内置 CUDA 12.8.1 和 cuDNN 运行时,宿主机仅需安装 NVIDIA 驱动和 Container Toolkit。


# 三、环境检查与准备(客户)

需要客户完成如下环境准备:

# 3.1 检查Ubuntu版本和架构

OCR识别服务对CPU架构和操作系统版本要求严格,只适配ubuntu22.04操作系统和X86 CPU架构:

# 检查版本信息,确保输出为Ubuntu 22.04.xxx LTS
lsb_release -a

# 检查CPU架构,确保输出为X86_64
uname -a

# 3.2 准备 GPU 驱动

Ubuntu系统下使用 nvidia-smi 检查GPU驱动情况,如果命令返回 GPU 信息,说明驱动已安装,如未安装则需要用户自行安装 NVIDIA 驱动。

# 检查 NVIDIA 驱动是否已安装
nvidia-smi

NVIDIA驱动可以通过 Ubuntu官网文档 → how-to → graphics → [install-nvidia-drivers (opens new window)] 获取。

如下是一个安装驱动示例仅供参考,不同显卡方式可能有所不同,请自行研究:

# 安装驱动管理工具(如果安装缓慢,建议先更换国内镜像源加速/etc/apt/sources.list)
sudo apt update
sudo apt install -y ubuntu-drivers-common

# 自动检测并安装推荐驱动
sudo ubuntu-drivers autoinstall

# 安装完成后重启系统生效
sudo reboot

# 安装并重启系统后,运行nvidia-smi如有输出则说明安装成功
nvidia-smi

# 3.3 准备Docker Engine

参考Docker官网手册 [Install Docker Engine on Ubuntu (opens new window)] 进行Docker的安装,确保最终Docker可用,以下为验证方法:

# 检查docker版本,确保Docker版本大于24.0.7
docker -v

# 查看docker状态
sudo systemctl status docker

以下为使用国内镜像源安装Docker Engine的方法,命令仅供参考:

# 导入Docker官方签名密钥,确保源可信
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加目录
sudo mkdir -p /etc/apt/sources.list.d

# 添加 Docker 官方 apt 源(阿里云镜像) 配置 apt 源指向阿里云,加速下载
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新软件包索引 并安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 查看docker版本,有输出则说明安装成功
docker -v

# 设置 Docker 服务开机启动
sudo systemctl start docker
sudo systemctl enable docker

# 3.4 准备Container Toolkit

Docker容器中如需使用GPU驱动,需要安装NVIDIA Container Toolkit,参考NVIDIA官方文档 [Installing the NVIDIA Container Toolkit (opens new window)] 。以下为验证方法:

# 检查包安装状态(输出版本号即为安装成功)
dpkg -l | grep nvidia-container-toolkit

# 官方最新验证命令(无任何额外依赖,仅需核心包),有输出nvidia-smi信息则说明安装成功
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

官方默认走国外地址,国内可尝试使用中科大镜像源安装Container Toolkit,以下命令仅供参考:

sudo apt-get update && sudo apt-get install -y --no-install-recommends \
   curl \
   gnupg2

# 使用中科大镜像源
curl -fsSL https://mirrors.ustc.edu.cn/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://nvidia.github.io#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 安装container toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 配置 Docker 使用 nvidia-container-runtime
sudo nvidia-ctk runtime configure --runtime=docker
# 重新启动 Docker 服务使配置生效
sudo systemctl restart docker

# 检查包安装状态(输出版本号即为安装成功)
dpkg -l | grep nvidia-container-toolkit

# 官方最新验证命令(无任何额外依赖,仅需核心包),有输出nvidia-smi信息则说明安装成功
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

# 四、部署步骤

# 4.1 创建目录和配置文件

# 创建目录
sudo mkdir -p /data/Seeyon/Comi/ocr/{config,logs}

# 创建配置文件
sudo tee /data/Seeyon/Comi/ocr/config/config.json > /dev/null <<'EOF'
{
  "app_name": "ocr",
  "port": 12841,
  "workers": 1,
  "log_level": "INFO",
  "log_dir": "./logs",
  "ocr_use_doc_orientation_classify": true,
  "ocr_use_doc_unwarping": false,
  "ocr_use_textline_orientation": true,
  "compress_enabled": true,
  "compress_max_width": 1500,
  "compress_max_height": 1500,
  "compress_quality": 90,
  "compress_debug": false,
  "ocr_enable_preprocessing": true,
  "ocr_enable_white_margin_removal": true,
  "ocr_force_gray": false,
  "ocr_sharpen_strength": 0.5,
  "ocr_jpeg_pixel_threshold": 3000000,
  "ocr_jpeg_compress_min_pixels": 1500000,
  "file_size_limit": 20971520,
  "allowed_extensions": ["jpg", "jpeg", "png", "bmp", "tiff", "webp"],
  "health_check_image": "resources/ocr_test.png",
  "paddle_font_file": "resources/fonts/simfang.ttf"
}
EOF

# 4.2 启动容器

百度网盘中下载ocr镜像 链接: https://pan.baidu.com/s/19jIO87ldikfdLK41DWyeug?pwd=838s 提取码: 838s

# 存放ocr镜像
sudo mkdir -p /data/ocr_image
sudo mv ocr_gpu.tar.gz /data/ocr_image
cd /data/ocr_image

# 拉取镜像(文件很大,需要一定时间)
sudo docker load -i ocr_gpu.tar.gz

# 停止旧容器(如果存在)
sudo docker rm -f ocr 2>/dev/null || true

# 启动容器
sudo docker run -d \
  --privileged \
  --restart=always \
  --gpus all \
  --name ocr \
  -p 12841:12841 \
  -v /data/Seeyon/Comi/ocr/config/config.json:/app/config/config.json \
  -v /data/Seeyon/Comi/ocr/logs:/app/logs \
  cdhx78.seeyon.com:5356/library/seeyon/ocr:latest-gpu

# 4.3 验证部署

# 查看容器状态
sudo docker ps | grep ocr

# 查看日志
sudo docker logs ocr

# 检查 GPU 使用
sudo docker exec -it ocr nvidia-smi

# 测试服务是否正常
curl -X POST http://127.0.0.1:12841/ocr/pic/health

预期返回:

{
  "code": "200",
  "message": "Success",
  "data": {
    "text_content": [
      "单位"
    ]
  }
}

1770168052818.png

# 五、OCR日常运维

# 5.1、调整OCR监听端口

OCR服务是Docker运行,故存在Docker内部端口和外部宿主机端口的映射,按照手册docker run命令执行默认端口设置为 -p 12841:12841 即宿主机也默认暴露12841端口。

如果项目上发现docker映射端口异常,需要修改宿主机端口,可以参考如下命令(主要修改点是 -p 12843:12841 ,其中12843就是宿主机修改后的端口,以后请求OCR就用12843端口):

# 停止旧容器(如果存在)
sudo docker rm -f ocr 2>/dev/null || true

# 启动容器
sudo docker run -d \
  --privileged \
  --restart=always \
  --gpus all \
  --name ocr \
  -p 12843:12841 \
  -v /data/Seeyon/Comi/ocr/config/config.json:/app/config/config.json \
  -v /data/Seeyon/Comi/ocr/logs:/app/logs \
  cdhx78.seeyon.com:5356/library/seeyon/ocr:latest-gpu

1770519982966.png

1770520087759.png

# CoMi配置测试

# 场景一:智能部署工具配置OCR

如果项目上 采用智能部署工具部署的CoMi ,则通过一体化工具管理控制台去修改AI-Manager的配置:

  • V5产品线仅需修改“OA OCR服务地址”这个配置,将其改成OCR真实地址,格式为 http://OCR服务地址:OCR端口/ocr/pic/get_all_text

注意修改配置后,需要重新发布修改后的应用才能生效,具体操作方法详见《智能部署工具手册 (opens new window)》 → [修改CoMi配置] 章节!

1770276636006.png

到CoMiBuilder本地知识库上传一个扫描件,解析策略勾选“文档图片解析”,等待执行完成,如果扫描件执行完成,并且正常切片则说明OCR服务部署配置成功!

1770278204148.png

# 场景二:Docker部署CoMi场景配置OCR

如果项目上 采用Docker部署的CoMi ,则通过修改 comi-install/config/ai-manager/application.yaml 文件,设置OCR信息:

cd /data/Seeyon/Comi/comi-install
vim config/ai-manager/application.yaml

V5产品线找到oaOcrUrl: 后面设置成OCR服务正确的地址,格式为http://OCR服务地址:OCR端口/ocr/pic/get_all_text

修改保存后重启AI-Manager服务生效:
docker restart comi-builder

1770367857695.png

以上完成后,到管理员系统后台CoMiBuilder测试一下扫描件是否生效,测试方法同场景一。

知识库OCR解析进度可通过AI-Manager日志看到 tail -f volumes/ai-manager/logs/log-info.log

# 场景三:全文检索配置OCR实现协同知识文档解析

当前功能研发中,暂未发布。

编撰人:het、admin