Skip to content

TeCHiScy/paddleocr-go

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 推理

About

golang inference version for PaddleOCR

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 81.8%
  • Dockerfile 18.2%