第一步:交叉编译Paddle-Lite
参考链接:https://blog.csdn.net/sz76211822/article/details/130466597?spm=1001.2014.3001.5501
第二步:交叉编译opencv4.x
参考链接:https://blog.csdn.net/sz76211822/article/details/130461683?spm=1001.2014.3001.5501
第三步:文件放置
1.将Paddle-Lite编译好的cxx文件夹放置到PaddleOCR/deploy/lite目录下
2.将编译好的opencv文件夹放置到cxx目录下
3.除了拷贝过来的源代码,还需要clipper.h 和clipper.cpp这两个文件,在chineseocr_lite (GitHub - DayBreak-u/chineseocr_lite: 超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) + crnn(2.5M) + anglenet(378KB)) 总模型仅4.7M)中拷贝过来,放置在PaddleOCR/deploy/lite目录下
文件目录 :
第四步:创建CMakeLists.txt文件
cmake_minimum_required(VERSION 2.8)
project(paddle_lite_ocr)
set(TARGET paddle_lite_ocr)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# Set ARMLINUX_ARCH_ABI to armv8 or armv7 or armv7hf
set(ARMLINUX_ARCH_ABI armv8)
# 1. path to Paddle-Lite lib
set(LITE_DIR "${CMAKE_SOURCE_DIR}/cxx")
# 2. link Paddle-Lite directory
link_directories(${LITE_DIR}/lib)
include_directories(${LITE_DIR}/include)
FIND_PACKAGE( OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
# opencv
set(OpenCV_DIR ${LITE_DIR}/opencv/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
set(CMAKE_CXX_STANDARD 14)
# 3.add executable output
add_executable(${TARGET} ocr_db_crnn.cc cls_process.cc db_post_process.cc crnn_process.cc clipper.cpp)
target_link_libraries(${TARGET} -lpaddle_light_api_shared ${OpenCV_LIBS})
target_link_libraries(${TARGET} -ldl)
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/paddle_lite_ocr)
install(TARGETS paddle_lite_ocr DESTINATION ./)
#install(DIRECTORY model DESTINATION ./)
注意点:
第五步:创建build.sh
#!/bin/bash
set -e
# for rk3328 aarch64
GCC_COMPILER=/opt/gcc/bin/arm-linux-gnueabihf
ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )
# build rockx
BUILD_DIR=${ROOT_PWD}/build
if [[ ! -d "${BUILD_DIR}" ]]; then
mkdir -p ${BUILD_DIR}
fi
cd ${BUILD_DIR}
cmake .. \
-DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \
-DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++
make -j4
make install
cd -
注意点:
第六步:编译
chmod 777 build.sh
./build.sh
然后会出现编译报错
第七步:解决ocr_db_crnn.cc文件编译错误
打开ocr_db_crnn.cc文件,注释掉#include "AutoLog/auto_log/lite_autolog.h",如图
同时,将AutoLogger的全部注释掉
第八步:解决floorf报错
参考链接:Linux C++ gcc `floorf` not a member of `std`?_qq76211822的博客-CSDN博客
第九步:重新执行./build.sh
执行完成后,会在PaddleOCR/deploy/lite多出2个文件
在install目录下找到编译的paddle_lite_ocr执行文件
第十步:打包
将libpaddle_light_api_shared.so、ch_PP-OCRv2_det_infer_opt.nb、paddle_lite_ocr、libgomp.so.1、opencv等库放进同一个目录。如图:
1.其中config.txt是在PaddleOCR/deploy/lite目录下
2. libgomp.so.1是交叉编译器的动态库,存放在
将libgomp.so.1.0.0下载到windows桌面后,改名为libgomp.so.1即可
3.opencv的动态库,是交叉编译好的
同样,下载*.so.4.7.0的动态库后,改名
4.ppocr_keys_v1.txt是paddle-OCR文件夹中寻得,暂未使用。
第十一步:放到arm机器上运行
执行:
chmod 777 ./paddle_lite_ocr
根据ocr_db_crnn.cc源码可知det需要9个参数
执行
./paddle_lite_ocr det ch_PP-OCRv2_det_infer_opt.nb arm INT8 4 0 lite_demo.png config.txt
det 表示检测
ch_PP-OCRv2_det_infer_opt.nb 表示模型名
arm表示运行平台
INT8/FP32 表示检测相关
4 表示线程个数
0 我个人用的,不知道啥意思
lite_demo.png 检测文件
config.txt 配置文件
第十二步:输出结果
打开vis.jpg
原图:
备注:PaddleOCR 模型下载