• windows10配置paddleOCR的CPU版本总结


            paddleOCR的CPU版本依赖的库还是比较少的。如下

    1.opencv库。 本人配置的版本是opencv4.5.0

    2.paddle_inference 推理库。该库解压后有version.txt文件,版本信息如下:

    1. GIT COMMIT ID: a5cf2e305b744e3ebd2f2210341f88d349d4ec5e
    2. WITH_MKL: ON
    3. WITH_MKLDNN: ON
    4. WITH_GPU: ON
    5. WITH_ROCM: OFF
    6. CUDA version: 10.2
    7. CUDNN version: v7.6
    8. CXX compiler version: 19.16.27045.0
    9. WITH_TENSORRT: ON
    10. TensorRT version: v7.0.0.11

            上述就是全部依赖了。

    一、用cmake构建Visual Studio项目

            构建项目,如同官网教程一样,我的配置最终效果如下:

             首先,打开cmake-gui填写上图中的1、2步骤,按cmake-gui中的configure按钮,出错。然后填写上图3、4、5步骤,注意填写自己安装的目录。然后再按configure。这一步,我出错了,错误如下(如果没有出错,直接按generate,项目应该能构建好,去所在的build目录打开vs项目进行下一步):

    Could NOT find Git

            主要是我安装了git,但是没有把git的bin目录加入系统目录中(用户目录也行)。完成添加后,再configure,然后按generate,构建项目成功。

    二、vs2017编译

            上一步成功后,这一步编译比较简单,直接按照官网教程就可运行。

            但是,运行、二次开发是比较麻烦的。首先需要用vs编译好,然后在对应目录使用终端运行。不能直接使用vs2017运行、调试,非常不方便。所以为了方便开发,稍微折腾了下。

    三、使用vs2017构建项目

            首先新建一个vs2017空白项目,新建一个main.cpp文件,内容如下:

    1. #include "opencv2/core.hpp"
    2. #include "opencv2/imgcodecs.hpp"
    3. #include "opencv2/imgproc.hpp"
    4. #include
    5. #include
    6. #include "args.h" // 原来的是: #include 其他文件也有类似问题,直接去掉include即可,
    7. #include "paddleocr.h" // 原来的是: #include
    8. #include
    9. using namespace PaddleOCR;
    10. int main(int argc, char **argv) {
    11. // Parsing command-line
    12. std::vector imgs;
    13. imgs.push_back("./images/1.png");
    14. PPOCR ocr = PPOCR();
    15. std::vector> ocr_results =
    16. ocr.ocr(imgs, FLAGS_det, FLAGS_rec, FLAGS_cls);
    17. for (int i = 0; i < imgs.size(); ++i) {
    18. if (FLAGS_benchmark) {
    19. cout << imgs[i] << '\t';
    20. for (int n = 0; n < ocr_results[i].size(); n++) {
    21. for (int m = 0; m < ocr_results[i][n].box.size(); m++) {
    22. cout << ocr_results[i][n].box[m][0] << ' '
    23. << ocr_results[i][n].box[m][1] << ' ';
    24. }
    25. }
    26. cout << endl;
    27. }
    28. else {
    29. cout << imgs[i] << "\n";
    30. Utility::print_result(ocr_results[i]);
    31. if (FLAGS_visualize && FLAGS_det) {
    32. cv::Mat srcimg = cv::imread(imgs[i], cv::IMREAD_COLOR);
    33. if (!srcimg.data) {
    34. std::cerr << "[ERROR] image read failed! image path: "
    35. << imgs[i] << endl;
    36. exit(1);
    37. }
    38. std::string file_name = Utility::basename(imgs[i]);
    39. Utility::VisualizeBboxes(srcimg, ocr_results[i],
    40. FLAGS_output + "/" + file_name);
    41. }
    42. cout << "***************************" << endl;
    43. }
    44. }
    45. int i;
    46. cin >> i;
    47. }

    构建上述项目后,肯定会出现很多语法错误。主要是库没有添加进去。

            上面错误是没有添加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库预定义宏,添加如下:

    1. GLOG_NO_ABBREVIATED_SEVERITIES
    2. GOOGLE_GLOG_DLL_DECL=

             还有如下错误:

    error LNK2038: 检测到“RuntimeLibrary”的不匹配项 解决方法

    解决方法如下:

    1. 多线程调试Dll (/MDd) 对应的是MD_DynamicDebug
    2. 多线程Dll (/MD) 对应的是MD_DynamicRelease
    3. 多线程(/MT) 对应的是MD_StaticRelease
    4. 多线程(/MTd)对应的是MD_StaticDebug

     

            (注意呀,项目的文件结构改变了,有些include路径是错误的,需要改正,上面也提到了)右键项目点击生成,应该能生成成功,但是运行估计不行,应该报什么 LNK2007 无法链接什么外部符号的错误。最后需要添加dll文件所在目录到系统(用户目录也行)。如下(添加了路径最好是重启或注销一下电脑):

            最后准备下载好模型文件运行,(注意,运行前paddleocr.cpp文件我也修改了,修改的部分如下)

             最后的运行效果如下(开启了文字检测和识别)。

            最开始的时候终端输出是乱码。这是因为中文识别的时候需要一个字典,字典的格式和系统的编码格式不同。用notepad将字典修的格式改成对应的中格式即可。

  • 相关阅读:
    客快物流大数据项目(八十):用户标签开发
    Linux常用操作
    计量经济学
    基于docker实现mysql的主从复制 详细步骤
    “百度杯”CTF比赛 九月场,Web:SQL
    Django框架之GET请求和POST请求简介
    【Git管理工具】使用Docker部署GitLab服务器
    LinkedList
    【Qt炫酷动画】1.easing官方demo详细剖析
    pytorch UserWarningfault grid_sample; Python opencv Qt报Current thread的新解决方法
  • 原文地址:https://blog.csdn.net/qq_31112205/article/details/126855596