/paddleocr-go

golang inference version for PaddleOCR

Primary LanguageGo

paddleocr-go

本项目基于 PaddleOCR-Go 二次开发和完善,适配 Paddle 2.6.x 版本,是 PaddleOCR 的 Go 部署版本。具体实现对齐 PaddleOCR 的 C++ 部署版本

编译步骤

Dockerfile

本项目提供 Dockerfile 可用于最小化编译,避免在臃肿的 paddle:latest-dev 容器中手工编译。编译步骤如下:

  1. 确认编译容器内存限制 >= 16GiB。
  2. OCR 模型列表 中选择合适的模型,下载后解压在根目录 model 文件夹中,目录结构为:
model
├── cls
│   ├── inference.model
│   └── inference.params
├── det
│   ├── inference.model
│   └── inference.params
└── rec
    ├── inference.model
    ├── inference.params
    └── ppocr_keys_v1.txt
  1. 根据需要配置 config/conf.yaml。
  2. 通过命令 docker build . 编译 Docker 镜像。目前支持 linux/amd64 和 linux/arm64 架构。

手工编译

环境准备

  • Go: 1.22.8
  • GoCV: 0.39.0 (OpenCV: 4.10.0)
  • Paddle: 2.6.2
  • PaddleOCR: 2.7
  • 编译环境: Docker paddle:latest-dev
docker pull registry.baidubce.com/paddlepaddle/paddle:latest-dev
docker run --name paddle-test -v $PWD:/paddle --network=host -it registry.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash

安装 Go

根据 官方文档 说明安装。

编译 GoCV (OpenCV)

Go 语言通过 GoCV 使用 OpenCV,它使用 CGO 调用 OpenCV 接口。GoCV 编译可以参考 文档

编译 Paddle 的 C 语言预测库

Go 语言只能通过 CGO 调用 C 语言 API,不能直接与 C++ 交互,因此需要编译 Paddle 的 C 语言预测库。当然,也可以自己写 C 语言调用 C++ 的代码和头文件,详见该 仓库

Paddle 提供了 预编译包,也可以自己根据 官方文档 按需编译。注意部分编译参数需要相关依赖,请确保依赖完整再启用。下面是 CPU 版本的编译的命令。

git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout v2.6.2
mkdir build && cd build

cmake -DWITH_PYTHON=OFF \
      -DWITH_GPU=OFF \
      -DWITH_MKL=ON \
      -DWITH_TESTING=OFF \
      -DCMAKE_BUILD_TYPE=Release \
      -DON_INFER=ON ..

make -j
make inference_lib_dist

编译完成后,可以在 build/paddle_inference_c_install_dir 目录下,看到以下生成的文件。其中 paddle 是 Paddle 的 C 语言预测库,version.txt 中包含预测库版本信息。

build/paddle_inference_c_install_dir
├── paddle
├── third_party
└── version.txt

使用方法

示例代码

具体使用方法见 demo.go 中的示例代码。此外,根据 文档,需要将 Paddle 的 C 语言预测库软链到 Go 预测库目录下,通常在 ${GOMODCACHE},也即 $GOPATH/pkg/mod文档)。

# 此处 COMMITID 根据 C 语言预测库的版本不同而不同
go get github.com/paddlepaddle/paddle/paddle/fluid/inference/goapi@${COMMITID}
# 此处 VERSION 根据 go get 的版本不同而不同
cd ${GOMODCACHE}/github.com/paddlepaddle/paddle/paddle/fluid/inference/goapi@${VERSION}
# 此处 paddle_inference_c_install_dir 为下载或编译得到的 C 语言预测库目录
ln -s paddle_inference_c_install_dir paddle_inference_c

# 编译 demo
cd paddleocr-go
go build demo.go

示例代码提供了单张图预测、文件夹批量预测两种模式,它们的命令行优先级依次降低。配置文件各字段含义可参考 文档C++ 实现中的 args.cpp

单张图预测

./demo --config config/conf.yaml --image images/test.jpg

执行结果:

文件夹批量预测

./demo --config config/conf.yaml --image_dir ./images

执行结果:

Python 版本执行结果

参考文献

  1. 安装 C API
  2. Docker 编译
  3. 安装 Go API
  4. 快速上手 Go 推理