Ubuntu20.04 交叉编译Paddle-OCR

news/2024/10/18 10:13:52/

第一步:交叉编译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.ppmy.cn/news/58080.html

相关文章

不是那么快乐的五一

大家好,我是记得诚。 五一假期结束了,明天开始上班了。 这个假期没休息好,也没出去玩。 放假前一天,接到通知让加班。 第一天就去公司加班了,属实很难受,我心想如果别人有了出远门的安排,还…

mysql5.7以上的启动、停止、赋权命令

文章目录 1、启动mysql server2、查看初始密码3、本地登陆mysql4、修改本地root用户密码5、防火墙设置6、开启mysql的远程登录 1、启动mysql server systemctl start mysqld #启动程序 systemctl enable mysqld #开机自运行 systemctl status mysqld #查看状态…

CSS布局基础(网页图片 切图)

网页图片 网页图片图片格式 切图直接从 psd 图层导出切片工具切图插件切图其他设计工具 网页图片 图片格式 jpg/jpeg 高清图gif 小动画,支持透明背景png 结合jpg 和 gif 支持透明背景,高清psd ps专属格式,常用于设计稿,里面的素…

000-搭建Gitea-自己的git服务器

000-搭建Gitea-自己的git服务器 1.什么是gitea 官网的介绍是: Gitea的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。我们采用Go作为后端语言,这使我们只要生成一个可执行程序即可。并且他还支持…

服务器性能调优

硬件 如果是硬件瓶颈就换硬件 (包括CPU、内存、网卡、硬盘) 软件 (软件,特指我们写代码的那部分程序) 建议先 top 看下软件瓶颈在哪,CPU、内存、网络(netstat),哪个进…

DAY 50 LVS负载均衡器 NAT模式

群集概述 群集的含义 Cluster,集群、群集由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。 为什么使用群集 互联网应用中,随着站点对硬件性能、响应速度、服务…

高性能定时器--时间轮/多级时间轮

运行原理 指针指向轮子上的一个槽,轮子以恒定的速度顺时针转动,每转动一步就指向下一个槽(虚线指针指向的槽),每次转动称为一个tick,一个tick的时间称为时间轮的槽间隔slot interval,即心搏时间…

1. 安装Open vSwitch环境

1. 安装Open vSwitch环境 1 配置基础环境。 在VMware Workstation软件中创建一个虚拟机VM1,配置2张网卡,虚拟机VM1配置如图4-3所示。将网卡ens33地址配置为192.168.1.131/24,网卡ens34地址配置为192.168.2.131/24。 图4-3 VM1虚拟机配置 2…