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

Ubuntu20.04源码编译PaddleOCR2.4

一,下载PaddleOCR源码

git clone https://github.com/PaddlePaddle/PaddleOCR.git
git checkout release/2.4
cd PaddleOCR/deploy/cpp_infer/

二,编译PaddleOCR的推理工具

源码中提供的build.sh是不完整的,需要修改,例如,我的编译指令是在这里,

~/ocr/01/PaddleOCR/deploy/cpp_infer/tools/build.sh

OPENCV_DIR=/home/mc/opencv455/dev/
LIB_DIR=/home/mc/ocr/01/Paddle/build_cuda/paddle_inference_install_dir/
CUDA_LIB_DIR=/usr/local/cuda/lib64
CUDNN_LIB_DIR=/usr/local/cuda/lib64

BUILD_DIR=build
rm -rf ${BUILD_DIR}
mkdir ${BUILD_DIR}
cd ${BUILD_DIR}
cmake .. \
    -DPADDLE_LIB=${LIB_DIR} \
    -DWITH_MKL=ON \
    -DWITH_GPU=ON \
    -DWITH_STATIC_LIB=OFF \
    -DWITH_TENSORRT=OFF \
#    -DOPENCV_DIR=${OPENCV_DIR} \
    -DOpenCV_DIR=${OPENCV_DIR} \
    -DCUDNN_LIB=${CUDNN_LIB_DIR} \
    -DCUDA_LIB=${CUDA_LIB_DIR} \
#    -DTENSORRT_DIR=${TENSORRT_DIR} \

make -j

这里有好几个地方需要注意,

  • DOPENCV_DIR要换成DOpenCV_DIR,这样才和系统的定义相匹配。
  • LIB_DIR是你编译Paddle时的那个目录,大家通常喜欢用build,我这里用的是build_cuda,和官网上的一致,具体可以参考:
    Ubuntu 20.04 源码编译Paddle2.2.2_高精度计算机视觉的博客-CSDN博客
  • Cuda和Cudnn我安装的时候就默认在同一个文件夹里了,可能参考:
    Ubuntu20.04安装Cuda driver + toolkit + cudnn_高精度计算机视觉的博客-CSDN博客
  • 那个make -j 可以根据你的需要修改,比如nproc查出核线程是12,就用make -j12就好了。

然后回到目录(该目录下有一个CMakeLists.txt文件),

/ocr/01/PaddleOCR/deploy/cpp_infer

执行下面的指令,

sudo ./tools/build.sh #执行完此脚本后会在./build文件夹下生成ocr_system可执行文件

这加上sudo权限是因为需要/usr/local下面的写入权限,生成之后你改一下权限就可以变成用户权限了,如下,

sudo chmod -cvR 777 build
 

三,编译过程中碰到的问题

(1)cp: 无法创建普通文件'/usr/lib/libmklml_intel.so': 权限不够

解决办法,

使用sudo权限,这个前面已经解释过了。

(2)没有规则可制作目标

 -- Build files have been written to: /home/mc/ocr/01/PaddleOCR/deploy/cpp_infer/build
make[2]: *** 没有规则可制作目标“/home/mc/ocr/01/Paddle/build_cuda/paddle/lib/libpaddle_inference.so”,由“ppocr” 需求。 停止。

解决办法,

检查你的路径,通常这个是由路径设置不对,找不到相关的库引起的。

(3)cc1plus: error: too many filenames given

cc1plus: error: too many filenames given.  Type cc1plus --help for usage
cc1plus: error: too many filenames given.  Type cc1plus --help for usage
cc1plus: error: too many filenames given.  Type cc1plus --help for usage
cc1plus: error: too many filenames given.  Type cc1plus --help for usage
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/postprocess_op.cpp.d: 没有那个文件或目录
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/ocr_rec.cpp.d: 没有那个文件或目录
compilation terminated.
compilation terminated.
cc1plus: error: too many filenames given.  Type cc1plus --help for usage
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/main.cpp.d: 没有那个文件或目录
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/ocr_det.cpp.d: 没有那个文件或目录
compilation terminated.
compilation terminated.
cc1plus: error: too many filenames given.  Type cc1plus --help for usage
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/ocr_cls.cpp.d: 没有那个文件或目录
compilation terminated.
cc1plus: fatal error: CMakeFiles/ppocr.dir/src/utility.cpp.d: 没有那个文件或目录
compilation terminated.

解决办法,

找到

~/ocr/01/PaddleOCR/deploy/cpp_infer/CMakeLists.txt

将 "-o3" 改成 "-O3" 就可以了,修改后的结果如下,

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 ${FLAG_OPENMP} -std=c++11")

这应该是一个打字错误引起的,不理解为什么官方没有修正过来。

这个可参考:

c++ - CMake on linux givs error cc1plus: error: too many filenames given - Stack Overflow

go - Import C error in Golang: cc1.exe: error: too many filenames given - Stack Overflow

本文结束
 

相关文章:

  • OpenCV导入时报错 ImportError: numpy.core.multiarray failed to import
  • OpenVINO2022.1+open_model_zoo例程的编译与使用
  • OpenCV cv::plugin::impl::DynamicLib::libraryLoad load ..opencv_core_parallel_tbb45 =>FAILED
  • OpenVINO之text_detection_demo
  • Paddle在windows10+vs2019上的源码编译(失败)
  • Tesseract-OCR试运行
  • Tesseract-OCR在Windows10(VS2019+vcpkg)平台上的编译与使用
  • Tesseract-OCR:在Windows10(VS2019+SW)平台上的编译与使用
  • Tesseract-OCR在Ubuntu20.04平台上使用
  • ROS2 Error: Could not find a package configuration file provided by “turtlebot3_msgs“
  • ROS2 + colcon build 常见的一些报错
  • ROS2进阶:安装与初体验(附choco介绍)
  • ROS2进阶:colcon的初步使用--‘colcon‘ is not recognized
  • ROS2进阶:基本指令与RVIZ2介绍
  • Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
  • 【前端学习】-粗谈选择器
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • AHK 中 = 和 == 等比较运算符的用法
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES6--对象的扩展
  • in typeof instanceof ===这些运算符有什么作用
  • java小心机(3)| 浅析finalize()
  • js 实现textarea输入字数提示
  • magento 货币换算
  • mockjs让前端开发独立于后端
  • Netty源码解析1-Buffer
  • 大整数乘法-表格法
  • - 概述 - 《设计模式(极简c++版)》
  • 关于List、List?、ListObject的区别
  • 机器学习 vs. 深度学习
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端_面试
  • 协程
  • 最简单的无缝轮播
  • 做一名精致的JavaScripter 01:JavaScript简介
  • k8s使用glusterfs实现动态持久化存储
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #Spring-boot高级
  • #微信小程序:微信小程序常见的配置传值
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计高校学生选课系统
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)可以带来幸福的一本书
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .bat批处理(一):@echo off
  • .cn根服务器被攻击之后