Visual Studio 2019现有项目下部署Paddle OCR

在Visual Studio 2019中将Paddle OCR部署到现有项目

PaddleOCR的GitHub地址

1. 资源下载

需要下载以下四个资源:

  1. opencv
    下载OpenCV,并解压安装,这里使用的是OpenCV4.5.2版本。
  2. PaddleOCR的GitHub源码
    将Paddle OCR源码打包下载,解压为PaddleOCR目录
  3. 预测库
    下载Windows预测库,这里选择CPU版本的cpu_avx_mkl版paddle_inference.zip,解压为paddle_inference目录
  4. 推理模型
    推理模型有超轻量级(9.4M)通用级(143.4M),这里我们下载的是超轻量级推理模型识别速度快,精度也不错。
    PaddleOCR的github页PP-OCR 2.0 series model list处下载inference model,
    共需要下载三个模型,分别为:

将三个模型文件解压到models目录下

2. 环境部署

  1. 由于我们是C++环境,因此实际上只需要PaddleOCR/deploy/cpp_infer下的C++源码文件, 将cpp_infer, paddle_inference, models三个文件夹放到当前项目路径下。将cpp_infer/src/目录下的cpp文件添加到项目源文件,将cpp_infer/include/目录下的.h文件添加到项目头文件。
    添加源文件和头文件

  2. 在Visual Studio 2019下打开属性管理器,选择配置Release|x64属性

    • 在Release属性页的 C/C++ --> 附加包含目录 中添加以下路径, 在这里$(SolutionDir)test\代表的是项目的相对路径, 项目名称为test:
      $(SolutionDir)test\cpp_infer
      $(SolutionDir)test\paddle_inference\paddle\include
      $(SolutionDir)test\paddle_inference\third_party\install\protobuf\include
      $(SolutionDir)test\paddle_inference\third_party\install\glog\include
      $(SolutionDir)test\paddle_inference\third_party\install\gflags\include
      $(SolutionDir)test\paddle_inference\third_party\install\xxhash\include
      $(SolutionDir)test\paddle_inference\third_party\install\zlib\include
      $(SolutionDir)test\paddle_inference\third_party\boost
      $(SolutionDir)test\paddle_inference\third_party\eigen3
      $(SolutionDir)test\paddle_inference\third_party\install\mklml\include
      $(SolutionDir)test\paddle_inference\third_party\install\mkldnn\include
      
      设置附加包含目录
    • 在Release属性页的 链接器 --> 输入 --> 附加依赖项 添加以下路径:
      $(SolutionDir)test\paddle_inference\paddle\lib\paddle_inference.lib
      $(SolutionDir)test\paddle_inference\third_party\install\mklml\lib\mklml.lib
      $(SolutionDir)test\paddle_inference\third_party\install\mklml\lib\libiomp5md.lib
      $(SolutionDir)test\paddle_inference\third_party\install\mkldnn\lib\mkldnn.lib
      

    添加依赖项
    至此就可以生成解决方案,如果报错如下:

    错误	C4996	'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. 
    To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	
    test	E:\test_Paddle_OCR\test\test\cpp_infer\src\config.cpp	25	
    

解决方法:
打开属性管理器中的Release|x64属性设置页–> C/C++ --> 预处理器 --> 预处理器定义中添加:_CRT_SECURE_NO_WARNINGS解决报错
再次重新生成解决方案,成功生成解决方案。
此时运行main.cpp文件,会提示找不到paddle_inference.dll动态库文件。
找不到dll文件

  1. 在当前项目下exe运行的目录x64/Release中添加以下所需的dll文件, dll文件分别在以下目录。建议直接将dll文件复制到x64/Release目录下:

    $(SolutionDir)test\paddle_inference\paddle\lib\paddle_inference.dll
    $(SolutionDir)test\paddle_inference\third_party\install\mklml\lib\mklml.dll
    $(SolutionDir)test\paddle_inference\third_party\install\mklml\lib\libiomp5md.dll
    $(SolutionDir)test\paddle_inference\third_party\install\mkldnn\lib\mkldnn.dll
    

    在这里插入图片描述

  2. 配置文件设置
    deploy\cpp_infer\tools目录下的config.txt文件、test\ppocr\utils\目录下的ppocr_keys_v1.txt文件复制到项目目录,并修改config.txt中的路径配置如下:

    det_model_dir  ./models/ch_ppocr_mobile_v2.0_det_infer/
    
    # cls config
    use_angle_cls 0
    cls_model_dir  ./models/ch_ppocr_mobile_v2.0_cls_infer/
    cls_thresh  0.9
    
    # rec config
    rec_model_dir  ./models/ch_ppocr_mobile_v2.0_rec_infer/
    char_list_file ./ppocr_keys_v1.txt
    

整个项目的文件目录如下图所示,cpp_infer为源码目录src和头文件目录include,models为模型目录,paddle_inference为解压的推理模型目录。config中设置的相对路径都是相对于config.txt的路径位置。
项目目录
6. 设置调试参数,在项目属性页中 配置属性 --> 调试 --> 命令参数中写入config.txt文件和要识别的图片路径。调试命令参数

或是修改main.cpp文件如下:

	int main(int argc, char** argv) {
	    //if (argc < 3) {
	    //    std::cerr << "[ERROR] usage: " << argv[0]
	    //        << " configure_filepath image_path\n";
	    //    exit(1);
	    //}
	    string config_path = "./config.txt";
	    string image_path = "./news.png";
	    
	    //OCRConfig config(argv[1]);
	    OCRConfig config(config_path);
	    
	    config.PrintConfigInfo();
	    
	    //std::string img_path(argv[2]);
	    std::string img_path(image_path);
	
	    cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR);
	    if (!srcimg.data) {
	        std::cerr << "[ERROR] image read failed! image path: " << img_path << "\n";
	        exit(1);
	    }
	    ...
	    后面不修改,
	    ...

3. 运行

至此,再次生成解决方案成功后,点击本地Windows调试运行,即可在弹出来的命令窗口看到OCR文字识别的结果。
测试图片和结果如下:
原图待识别
识别的结果:
识别结果
识别出的文本位置图
文本位置框
需要注意的是,识别的结果是倒序输出,也即从最后一行开始输出,可通过修改源码进行正序输出。
可以看到识别效果非常不错,其背后的原理是先识别到每一行,然后再识别每一行的文字,并且是带有前后语义的识别模型,因此对于正常的文本识别精度非常可靠,同时给出了每一行的置信度。
除了能够获取文本内容外,源码里实际上还能够获取到每一行文本的四个顶点坐标,遗憾的是无法给出每一个文字的坐标。具体可以阅读cpp_infer中的源码查看源码。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值