树莓派4b学习笔记六:以源码编译的方式安装Paddlelite
最近在做驾驶证信息提取识别,中间用到了百度开源的PaddleOCR
,在使用的时候需要配置一些环境,其中就包括百度自研的PaddlePaddle
深度学习框架。在windows试了试效果之后,发现识别率很高,尤其是在识别中文字符的时候要比其他开源项目的识别率高很多,所以简单测试之后我准备正式使用它,并将其应用在树莓派上。
但是树莓派性能比电脑低很多,为了推理时速度更快,我准备使用百度的轻量化端侧推理引擎Paddlelite
。关于Paddlelite
的介绍这里我就不多说了,网上有很多的文章介绍这个轻量化推理引擎,下面我把关于如何使用Paddlelite
的官方文档的链接贴上来:Welcome to Paddle-Lite’s documentation!
不像在windows上,我们可以直接使用pip
安装Paddlelite
,在树莓派4b上我们只能通过源码编译的方式安装Paddlelite
。下面我就简单的介绍一下我编译安装的整个过程,这里我采用的是本地编译的方式,也可以采用交叉编译的方式,这在上面的文档中都有说明。但是需要注意的是交叉编译目前不能设置--with_python=ON
,也即安装完成之后只能使用C++
调用,不能使用python
。所以,如果你想要使用python
版本的推理引擎,毕竟python使用起来更简单,那么你就只能使用本地编译的方式。
一、编译前环境准备
1、编译环境要求:
- gcc、g++、git、make、wget、python、pip、python-dev、patchelf
- cmake(建议使用3.10或以上版本)
# 1. Install basic software
apt update
apt-get install -y --no-install-recomends \
gcc g++ make wget python unzip patchelf python-dev
# 2. Install arm gcc toolchains
apt-get install -y --no-install-recommends \
g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf
# 3. install cmake 3.10 or above
wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz
tar -zxvf cmake-3.10.3.tar.gz
cd cmake-3.10.3
./configure
make
sudo make install
注意点一:有一点千万要注意,官方文档上直接给的命令里面就是python
和python-dev
,但我发现安装之后,安装的东西其实对应的是python2.7
,这就导致后面编译的时候,会编译出一个python2.7
版本的.whl
文件。如果你想要使用python3
进行开发,而且树莓派4b目前自带的是python3.7
,那么你就要在后面都加上3.7
,也即最后命令里是python3.7
和python3.7-dev
。我刚开始就是因为没有注意到这一点,踩了坑,以至于让我以为它只支持python2.7
。
注意点二:这里和官方文档相比,我加了一段安装arm-linux-gnueabihf
的命令,主要是因为我在开始编译的时候,总是提醒缺少工具链。但是我想不明白的是,这是交叉编译的工具链,我在本地编译为啥还要使用,反正我是没有想到原因,只好先将其安装上,而且确实不再报错。
二、开始编译
# 1. 下载Paddle-Lite源码 并切换到release分支
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite && git checkout release/v2.6
#2、加速第三方库下载
rm -rf third-party
# 3. 编译Paddle-Lite
./lite/tools/build_linux.sh ./lite/tools/build_linux.sh --arch=armv7hf --with_python=ON
注意点三:这里第一段第二个命令执行报错的时候,一定要确认一下你是不是直接使用git
命令下载的源码,如果不是,可能会报错,至少我是这种情况。当时也是耽误了我好长时间,误打误撞发现了解决办法。
编译的时候,还有一些其他的参数可以选择,如下所示,根据自己的需要进行设置。
--arch: (armv8|armv7|armv7hf) arm版本,默认为armv8
--toolchain: (gcc|clang) 编译器类型,默认为gcc
--with_extra: (OFF|ON) 是否编译OCR或NLP相关模型的kernel&OP,
默认为OFF,只编译CV模型相关kernel&OP
--with_python: (OFF|ON) 是否编译python预测库, 默认为 OFF
--with_cv: (OFF|ON) 是否编译CV相关预处理库, 默认为 OFF
--with_log: (OFF|ON) 是否输出日志信息, 默认为 ON
三、编译结果
位于 Paddle-Lite/build.lite.linux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf :
inference_lite_lib.armlinux.armv7hf/
|-- cxx C++ 预测库和头文件
| |-- include C++ 头文件
| | |-- paddle_api.h
| | |-- paddle_image_preprocess.h
| | |-- paddle_lite_factory_helper.h
| | |-- paddle_place.h
| | |-- paddle_use_kernels.h
| | |-- paddle_use_ops.h
| | `-- paddle_use_passes.h
| `-- lib C++预测库
| |-- libpaddle_api_light_bundled.a C++静态库
| `-- libpaddle_light_api_shared.so C++动态库
|
|-- demo
| `-- python python预测库demo
|
|-- python Python预测库(需要打开with_python选项)
| |-- install
| | `-- dist
| | `-- paddlelite-*.whl python whl包
| |-- lib
| `-- lite.so
我们需要找到paddlelite-*.whl
这个文件,路径如上所示,然后使用pip3 install paddlelite-*.whl
直接安装即可。安装好之后,我们可以进入python3
的环境,直接输入如下代码检验安装是否成功。
import paddlelite
或
import paddlelite.lite
四、小结
因为在整个过程中,我花了很长的时间,也出现了不少的错误,所以我可能会忘掉一些操作,导致以上所述不够全面。如果你编译安装的过程和我有不一样的地方,或者我以上的步骤有多余或者遗漏,都欢迎交流。
环境配置一直都是一件让人比较头疼的事,不同的人,不同的机器难免会有一些不一样的地方,只希望我的这篇文章可以多少帮助到你!!!