1、准备环境

1.1 编译opencv库

  • 首先需要从opencv官网上下载在Linux环境下源码编译的包,以opencv3.4.7为例,下载命令如下。
wget https://github.com/opencv/opencv/archive/3.4.7.tar.gz
tar -xf 3.4.7.tar.gz

最终可以在当前目录下看到opencv-3.4.7/的文件夹。

  • 编译opencv,设置opencv源码路径(root_path)以及安装路径(install_path)。进入opencv源码路径下,按照下面的方式进行编译。
cd opencv-3.4.7
root_path=your_opencv_root_path   #在当前目录的终端输入root_path=/home/ubuntu/package/opencv-3.4.7  root_path根据自己实际情况更改
install_path=${root_path}/opencv3

rm -rf build
mkdir build
cd build
cmake .. \
    -DCMAKE_INSTALL_PREFIX=${install_path} \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=OFF \
    -DWITH_IPP=OFF \
    -DBUILD_IPP_IW=OFF \
    -DWITH_LAPACK=OFF \
    -DWITH_EIGEN=OFF \
    -DCMAKE_INSTALL_LIBDIR=lib64 \
    -DWITH_ZLIB=ON \
    -DBUILD_ZLIB=ON \
    -DWITH_JPEG=ON \
    -DBUILD_JPEG=ON \
    -DWITH_PNG=ON \
    -DBUILD_PNG=ON \
    -DWITH_TIFF=ON \
    -DBUILD_TIFF=ON
make -j
make install

其中root_path为下载的opencv源码路径,install_path为opencv的安装路径,make install完成之后,会在该文件夹下生成opencv头文件和库文件,用于后面的OCR代码编译。

最终在安装路径下的文件结构如下所示。

opencv3/
|-- bin
|-- include
|-- lib
|-- lib64
|-- share

1.2 编译cmake

由于ubuntu中自带的cmake版本为3.5.0版本比较低,所以需要更新一下版本;
在cmake官网中下载cmake-3.22.1.tar.gz

1、tar -zvxf cmake-3.22.1.tar.gz
2、cd cmake-3.22.1
3./bootstrap
4、make
5、sudo make install

安装完成后验证安装是否成功

cmake --version

如果显示cmake的版本说明安装成功。

1.3 下载或者编译Paddle预测库

有2种方式获取Paddle预测库,一种是直接下载安装,另一种是编译源码;
由于编译源码一直报错,所以我是直接下载安装的。

  • Paddle预测官网上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本(建议选择paddle版本>=2.0.1版本的预测库 )。
  • 下载之后使用下面的方法解压。
tar -xf paddle_inference.tgz

最终会在当前的文件夹中生成paddle_inference/的子文件夹。
paddle_inference/
|-- CMakeCache.txt
|-- paddle
|-- third_party
|-- version.txt
其中paddle就是C++预测所需的Paddle库,version.txt中包含当前预测库的版本信息。

2、开始运行

2.1 下载paddleocr源码

git clone https://github.com/PaddlePaddle/PaddleOCR.git
git checkout release/2.2
cd PaddleOCR/deploy/cpp_infer/

2.2 下载模型ch_ppocr_server_v2.0_xx

下载链接:https://github.com/PaddlePaddle/PaddleOCR

将检测分类识别模型放在PaddleOCR/deploy/cpp_infer/的inference文件夹(新建)里面;
文件结构如下:
.
├── ch_ppocr_mobile_v2.0_cls_infer
│ ├── inference.pdiparams
│ ├── inference.pdiparams.info
│ └── inference.pdmodel
├── ch_ppocr_server_v2.0_det_infer
│ ├── inference.pdiparams
│ ├── inference.pdiparams.info
│ └── inference.pdmodel
└── ch_ppocr_server_v2.0_rec_infer
├── inference.pdiparams
├── inference.pdiparams.info
└── inference.pdmodel
同时在./tools/config.txt修改模型路径;

det_model_dir  ./inference/ch_ppocr_server_v2.0_det_infer/
 
# cls config
use_angle_cls 0
cls_model_dir  ./inference/ch_ppocr_mobile_v2.0_cls_infer/
cls_thresh  0.9
 
# rec config
rec_model_dir  ./inference/ch_ppocr_server_v2.0_rec_infer/
char_list_file ../../ppocr/utils/ppocr_keys_v1.txt

#注意:以上路径根据自己路径实际情况更改

2.3 修改tools/build.sh

OPENCV_DIR=~/soft/opencv-3.4.7/opencv3/    #根据自己路径修改
LIB_DIR=~/soft/paddle_inference/           #根据自己路径修改
#CUDA_LIB_DIR=your_cuda_lib_dir
#CUDNN_LIB_DIR=your_cudnn_lib_dir

BUILD_DIR=build
rm -rf ${BUILD_DIR}
mkdir ${BUILD_DIR}
cd ${BUILD_DIR}
cmake .. \
    -DPADDLE_LIB=${LIB_DIR} \
    -DWITH_MKL=OFF \
    -DWITH_GPU=OFF \
    -DWITH_STATIC_LIB=OFF \
    -DWITH_TENSORRT=OFF \
    -DOPENCV_DIR=${OPENCV_DIR} \
   # -DCUDNN_LIB=${CUDNN_LIB_DIR} \
   # -DCUDA_LIB=${CUDA_LIB_DIR} \
   # -DTENSORRT_DIR=${TENSORRT_DIR} \

make -j

2.4 执行

./tools/build.sh   #执行完此脚本后会在./build文件夹下生成ocr_system可执行文件
./tools/run.sh    #该脚本实际就是去运行以上生成的可执行脚本

2.5 结果

在这里插入图片描述
至此paddleocr C++ 部署完成,美中不足的是推理出结果用时比较长不知道为什么,希望有知道答案的大佬指点迷津,比心!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐