1、准备环境
1.1 编译opencv库
首先需要从opencv官网上下载在Linux环境下源码编译的包,以opencv3.4.7为例,下载命令如下。
cd deploy/cpp_infer
wget https://paddleocr.bj.bcebos.com/libs/opencv/opencv-3.4.7.tar.gz
tar -xf opencv-3.4.7.tar.gz
编译opencv,设置opencv源码路径(`root_path`)以及安装路径(`install_path`)。进入opencv源码路径下,按照下面的方式进行编译
root_path="your_opencv_root_path"
install_path=${root_path}/opencv3
build_dir=${root_path}/build
rm -rf ${build_dir}
mkdir ${build_dir}
cd ${build_dir}
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
也可以直接修改`tools/build_opencv.sh`的内容,然后直接运行下面的命令进行编译
sh tools/build_opencv.sh
其中`root_path`为下载的opencv源码路径,`install_path`为opencv的安装路径,`make install`完成之后,会在该文件夹下生成opencv头文件和库文件,用于后面的OCR代码编译。
最终在安装路径下的文件结构如下所示:
opencv3/
|-- bin
|-- include
|-- lib
|-- lib64
|-- share
1.2 编译cmake
由于ubuntu中自带的cmake版本为3.5.0版本比较低,所以需要更新一下版本。
wget https://github.com/Kitware/CMake/releases/download/v3.26.0/cmake-3.26.0-linux-x86_64.sh
然后用 sh 文件快速升级:
sudo bash ./cmake-3.23.0-linux-x86_64.sh --skip-licence --prefix=/usr
# 安装过程中遇到:
# 选择1
Do you accept the license? [yn]:
# 输入 y
# 选择2
By default the CMake will be installed in:
"/usr/cmake-3.23.0-linux-x86_64"
Do you want to include the subdirectory cmake-3.23.0-linux-x86_64?
Saying no will install in: "/usr" [Yn]:
# 输入 n
安装完成后,可以看到 cmake 版本已经更新
$ cmake --version
cmake version 3.26.0
1.3 下载Paddle预测库
[Paddle预测库官网](https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html) 上提供了不同cuda版本的Linux预测库,可以在官网查看并选择合适的预测库版本(*建议选择paddle版本>=2.0.1版本的预测库* )。
下载之后使用下面的方法解压:
tar -xf paddle_inference.tgz
其中`paddle`就是C++预测所需的Paddle库,`version.txt`中包含当前预测库的版本信息。
2、开始运行
2.1 下载推理模型
https://www.paddlepaddle.org.cn/modelsDetail?modelId=16
ch_PP-OCRv2_det、ch_PP-OCRv2_rec
将检测、识别模型放在PaddleOCR/deploy/cpp_infer/的inference文件夹(新建)里面; 文件结构如下:
inference/
|-- det_db
| |--inference.pdiparams
| |--inference.pdmodel
|-- rec_rcnn
| |--inference.pdiparams
| |--inference.pdmodel
2.2 编译PaddleOCR C++预测demo
编译命令如下,其中Paddle C++预测库、opencv等其他依赖库的地址需要换成自己机器上的实际地址
sh tools/build.sh
具体的,需要修改`tools/build.sh`中环境路径,相关内容如下:
OPENCV_DIR=your_opencv_dir
LIB_DIR=your_paddle_inference_dir
#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=ON \
-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
问题一:
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/ocr_rec.cpp.d: No such file or directory
错误原因在于编译时优化等级设置有误,将CMakeLists.txt中的 -o3 改为 -O3即可。
问题二:
libpaddle2onnx.so.1.0.0rc2, needed by /home/hi/work/paddle_inference/paddle/lib/libpaddle_inference.
paddle_inference 推理库需链接paddle2onnx、onnxruntime等库文件,在CMakeLists.txt中指定链接目录即可:
link_directories("${PADDLE_LIB}/third_party/install/paddle2onnx/lib")
link_directories("${PADDLE_LIB}/third_party/install/onnxruntime/lib")
至此,demo程序编译通过。