第一步:交叉編譯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.除了拷貝過(guò)來(lái)的源代碼,還需要clipper.h 和clipper.cpp這兩個(gè)文件,在chineseocr_lite?(GitHub - DayBreak-u/chineseocr_lite: 超輕量級(jí)中文ocr,支持豎排文字識(shí)別, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) + crnn(2.5M) + anglenet(378KB)) 總模型僅4.7M)中拷貝過(guò)來(lái),放置在PaddleOCR/deploy/lite目錄下
文件目錄 :
?
第四步:創(chuàng)建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 ./)
?注意點(diǎn):
?第五步:創(chuàng)建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 -
注意點(diǎn):
第六步:編譯
chmod 777 build.sh
./build.sh
然后會(huì)出現(xiàn)編譯報(bào)錯(cuò)
第七步:解決ocr_db_crnn.cc文件編譯錯(cuò)誤
打開ocr_db_crnn.cc文件,注釋掉#include "AutoLog/auto_log/lite_autolog.h",如圖
?同時(shí),將AutoLogger的全部注釋掉
?
?
第八步:解決floorf報(bào)錯(cuò)?
參考鏈接:Linux C++ gcc `floorf` not a member of `std`?_qq76211822的博客-CSDN博客
第九步:重新執(zhí)行./build.sh
執(zhí)行完成后,會(huì)在PaddleOCR/deploy/lite多出2個(gè)文件
在install目錄下找到編譯的paddle_lite_ocr執(zhí)行文件
第十步:打包
?將libpaddle_light_api_shared.so、ch_PP-OCRv2_det_infer_opt.nb、paddle_lite_ocr、libgomp.so.1、opencv等庫(kù)放進(jìn)同一個(gè)目錄。如圖:
1.其中config.txt是在PaddleOCR/deploy/lite目錄下
2.?libgomp.so.1是交叉編譯器的動(dòng)態(tài)庫(kù),存放在
?將libgomp.so.1.0.0下載到windows桌面后,改名為libgomp.so.1即可
3.opencv的動(dòng)態(tài)庫(kù),是交叉編譯好的
同樣,下載*.so.4.7.0的動(dòng)態(tài)庫(kù)后,改名
4.ppocr_keys_v1.txt是paddle-OCR文件夾中尋得,暫未使用。
?第十一步:放到arm機(jī)器上運(yùn)行
執(zhí)行:
chmod 777 ./paddle_lite_ocr
?根據(jù)ocr_db_crnn.cc源碼可知det需要9個(gè)參數(shù)
?
?執(zhí)行
./paddle_lite_ocr det ch_PP-OCRv2_det_infer_opt.nb arm INT8 4 0 lite_demo.png config.txt
det 表示檢測(cè)
ch_PP-OCRv2_det_infer_opt.nb 表示模型名
arm表示運(yùn)行平臺(tái)
INT8/FP32 表示檢測(cè)相關(guān)
4 表示線程個(gè)數(shù)
0 我個(gè)人用的,不知道啥意思
lite_demo.png 檢測(cè)文件
config.txt 配置文件
第十二步:輸出結(jié)果
打開vis.jpg
原圖:
備注:PaddleOCR 模型下載
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-432688.html
備注:Paddle-OCR字典下載?
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-432688.html
到了這里,關(guān)于Ubuntu20.04 交叉編譯Paddle-OCR的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!