赞
踩
paddleOCR的CPU版本依赖的库还是比较少的。如下
1.opencv库。 本人配置的版本是opencv4.5.0
2.paddle_inference 推理库。该库解压后有version.txt文件,版本信息如下:
- GIT COMMIT ID: a5cf2e305b744e3ebd2f2210341f88d349d4ec5e
- WITH_MKL: ON
- WITH_MKLDNN: ON
- WITH_GPU: ON
- WITH_ROCM: OFF
- CUDA version: 10.2
- CUDNN version: v7.6
- CXX compiler version: 19.16.27045.0
- WITH_TENSORRT: ON
- TensorRT version: v7.0.0.11
上述就是全部依赖了。
构建项目,如同官网教程一样,我的配置最终效果如下:
首先,打开cmake-gui填写上图中的1、2步骤,按cmake-gui中的configure按钮,出错。然后填写上图3、4、5步骤,注意填写自己安装的目录。然后再按configure。这一步,我出错了,错误如下(如果没有出错,直接按generate,项目应该能构建好,去所在的build目录打开vs项目进行下一步):
Could NOT find Git
主要是我安装了git,但是没有把git的bin目录加入系统目录中(用户目录也行)。完成添加后,再configure,然后按generate,构建项目成功。
上一步成功后,这一步编译比较简单,直接按照官网教程就可运行。
但是,运行、二次开发是比较麻烦的。首先需要用vs编译好,然后在对应目录使用终端运行。不能直接使用vs2017运行、调试,非常不方便。所以为了方便开发,稍微折腾了下。
首先新建一个vs2017空白项目,新建一个main.cpp文件,内容如下:
- #include "opencv2/core.hpp"
- #include "opencv2/imgcodecs.hpp"
- #include "opencv2/imgproc.hpp"
- #include <iostream>
- #include <vector>
-
- #include "args.h" // 原来的是: #include <include/args.h> 其他文件也有类似问题,直接去掉include即可,
- #include "paddleocr.h" // 原来的是: #include <include/paddleocr.h>
- #include <numeric>
- using namespace PaddleOCR;
-
- int main(int argc, char **argv) {
- // Parsing command-line
-
- std::vector<std::string> imgs;
- imgs.push_back("./images/1.png");
-
- PPOCR ocr = PPOCR();
-
- std::vector<std::vector<OCRPredictResult>> ocr_results =
- ocr.ocr(imgs, FLAGS_det, FLAGS_rec, FLAGS_cls);
-
- for (int i = 0; i < imgs.size(); ++i) {
- if (FLAGS_benchmark) {
- cout << imgs[i] << '\t';
- for (int n = 0; n < ocr_results[i].size(); n++) {
- for (int m = 0; m < ocr_results[i][n].box.size(); m++) {
- cout << ocr_results[i][n].box[m][0] << ' '
- << ocr_results[i][n].box[m][1] << ' ';
- }
- }
- cout << endl;
- }
- else {
- cout << imgs[i] << "\n";
- Utility::print_result(ocr_results[i]);
- if (FLAGS_visualize && FLAGS_det) {
- cv::Mat srcimg = cv::imread(imgs[i], cv::IMREAD_COLOR);
- if (!srcimg.data) {
- std::cerr << "[ERROR] image read failed! image path: "
- << imgs[i] << endl;
- exit(1);
- }
- std::string file_name = Utility::basename(imgs[i]);
-
- Utility::VisualizeBboxes(srcimg, ocr_results[i],
- FLAGS_output + "/" + file_name);
- }
- cout << "***************************" << endl;
- }
- }
- int i;
- cin >> i;
- }
构建上述项目后,肯定会出现很多语法错误。主要是库没有添加进去。
上面错误是没有添加paddle_inference和opencv库。首先添加opencv库,这不是重点,不赘述,可参考。添加paddle_inference依赖库和第三方库,这里直接贴出添加的路径了(可以在新建项目属性表上,执行如下操作)。
添加include,如下:
添加库依赖,如下:
添加附加依赖项,如下(最后一个shlwapi.lib库,是用于解决"无法解析的外部符号 __imp__PathMatchSpec"问题的):
至此,依赖方面的就弄好了。现在应该还有paddleOCR源文件没有加入进来。即,将paddleOCR源文件和main.cpp文件同一路径,效果如下:
![]() | ![]() |
然后编译,会出现很多错误,大概是报
错误 LNK2001 无法解析的外部符号 “__declspec(dllimport) public: __cdecl google::LogMessage::~LogMessage(void)”
什么之类的错误。这是谷歌glog库预定义宏,添加如下:
- GLOG_NO_ABBREVIATED_SEVERITIES
- GOOGLE_GLOG_DLL_DECL=
还有如下错误:
error LNK2038: 检测到“RuntimeLibrary”的不匹配项 解决方法
解决方法如下:
- 多线程调试Dll (/MDd) 对应的是MD_DynamicDebug
-
- 多线程Dll (/MD) 对应的是MD_DynamicRelease
-
- 多线程(/MT) 对应的是MD_StaticRelease
-
- 多线程(/MTd)对应的是MD_StaticDebug
(注意呀,项目的文件结构改变了,有些include路径是错误的,需要改正,上面也提到了)右键项目点击生成,应该能生成成功,但是运行估计不行,应该报什么 LNK2007 无法链接什么外部符号的错误。最后需要添加dll文件所在目录到系统(用户目录也行)。如下(添加了路径最好是重启或注销一下电脑):
最后准备下载好模型文件运行,(注意,运行前paddleocr.cpp文件我也修改了,修改的部分如下)
最后的运行效果如下(开启了文字检测和识别)。
最开始的时候终端输出是乱码。这是因为中文识别的时候需要一个字典,字典的格式和系统的编码格式不同。用notepad将字典修的格式改成对应的中格式即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。