当前位置: 首页 > news >正文

Ubuntu20.04 交叉编译Paddle-OCR

第一步:交叉编译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/bashset -e# for rk3328 aarch64
GCC_COMPILER=/opt/gcc/bin/arm-linux-gnueabihfROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )# build rockx
BUILD_DIR=${ROOT_PWD}/buildif [[ ! -d "${BUILD_DIR}" ]]; thenmkdir -p ${BUILD_DIR}
ficd ${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 模型下载

备注:Paddle-OCR字典下载 

http://www.lryc.cn/news/64200.html

相关文章:

  • Java 基础进阶篇(四)—— 权限修饰符、final 关键字与枚举
  • Linux命令集(Linux文件管理命令--touch指令篇)
  • 软件工程学习教程大纲
  • 使用ChatGPT生成了十种排序算法
  • GEE:MODIS计算遥感指数(NDVI、BSI、NDSI、EVI、LSWI、SIPI、EBI等)
  • 《*** 法治思想学习纲要》学习辅导
  • 初识Go语言18-面向对象【面向对象的概念、构造函数、继承与重写 泛型】
  • 4.微服务项目实战---Sentinel--服务容错
  • Postgres SELECT INSERT 流程 ?
  • OpenAI推企业版ChatGPT,英伟达造AI安全卫士
  • 【原创】运维的终点是开发~chatGPT告诉你真相
  • SSH 服务器、NFS 服务器、TFTP 服务器详解及测试
  • 1.3 HBase 基本架构
  • 微机作业题
  • 非极大值抑制详细原理(NMS含代码及详细注释)
  • 女朋友说总是记不住Git命令,怎么办?安排!
  • 【ChatGLM】本地版ChatGPT ?6G显存即可轻松使用 !ChatGLM-6B 清华开源模型本地部署教程
  • 【MySQL】练习六 关系数据理论及数据库设计
  • UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(一)
  • 全球天气weather.com的icon汇总表 天气现象代码枚举
  • 【Python】【进阶篇】16、settings.py配置文件详解
  • 【华为机试】HJ1 字符串最后一个单词的长度
  • Spring DI简介及依赖注入方式和依赖注入类型
  • ES6栈方法和队列方法
  • EventBus(事件总线)的使用和源码的简单解析
  • 《汇编语言》- 读书笔记 - 第2章-寄存器
  • English Learning - L3 综合练习 1 VOA-Color 2023.04.26 周三
  • 50道web前端工程师面试题及答案解析,你学会了吗
  • 【链表OJ题 1】反转链表
  • 【华为OD机试真题】计算网络信号 (javaC++python)100%通过率 超详细代码注释