本项目基于 PaddleOCR-Go 二次开发和完善,适配 Paddle 2.6 版本,是 PaddleOCR 的 Go 部署版本。具体实现对齐 PaddleOCR 的 C++ 部署版本。
- Go: 1.21.7
- GoCV: 0.3.6 (OpenCV: 4.9.0)
- Paddle: 2.6
- 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,它使用 CGO 调用 OpenCV 接口。GoCV 编译可以参考 文档。
Go 语言只能通过 CGO 调用 C 语言 API,不能直接与 C++ 交互,因此需要编译 Paddle 的 C 语言预测库。当然,也可以自己写 C 语言调用 C++ 的代码和头文件,详见该 仓库。
Paddle 提供了 预编译包,也可以自己根据 官方文档 按需编译。注意部分编译参数需要相关依赖,请确保依赖完整再启用。下面是 CPU 版本的编译的命令。
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
git checkout release/2.6
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
执行结果: