zoukankan      html  css  js  c++  java
  • (二)PaddleOCR 编译 ocr_system.dll

     选中ocr_system项目 右键-->仅用于项目-->仅生成ocr_system, 生成ocr_system.dll,打开cmd cd到Release目录下,就可以看到ocr_system.dll了。

    下图中的Debug在编译的时候记得换成Release,不然就会报下图错误列表中的错误。

    这样ocr_system.dll 和 ocr_system.exe都生成了就可以为下一步做winform ocr识别做基础了。

    ocr_system c++中 main.cpp代码如下:

    #include "glog/logging.h"
    #include "omp.h"
    #include "opencv2/core.hpp"
    #include "opencv2/imgcodecs.hpp"
    #include "opencv2/imgproc.hpp"
    #include <chrono>
    #include <iomanip>
    #include <iostream>
    #include <ostream>
    #include <vector>
    
    #include <cstring>
    #include <fstream>
    #include <numeric>
    
    #include <include/config.h>
    #include <include/ocr_det.h>
    #include <include/ocr_rec.h>
    //#include"ocr.h"
    using namespace std;
    using namespace cv;
    using namespace PaddleOCR;
    
    /*
    1.返回框选字体;
    2.返回解析字符串
    */
    
    extern "C" __declspec(dllexport) cv::Mat * LoadModel(char* input, int width, int height);
    __declspec(dllexport) cv::Mat* LoadModel(char* input, int width, int height)
    {
    
        OCRConfig config("D:\Paddle\PaddleOCR\deploy\cpp_infer\tools\config.txt");
    
        config.PrintConfigInfo();
    
        //std::string img_path(argv[2]);
        //cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR);
        cv::Mat srcimg(height, width, CV_8UC3, input);
    
        DBDetector det(config.det_model_dir, config.use_gpu, config.gpu_id,
            config.gpu_mem, config.cpu_math_library_num_threads,
            config.use_mkldnn, config.max_side_len, config.det_db_thresh,
            config.det_db_box_thresh, config.det_db_unclip_ratio,
            config.use_polygon_score,config.visualize,
            config.use_tensorrt, config.use_fp16);
    
        Classifier* cls = nullptr;
        if (config.use_angle_cls == true) {
            cls = new Classifier(config.cls_model_dir, config.use_gpu, config.gpu_id,
                config.gpu_mem, config.cpu_math_library_num_threads,
                config.use_mkldnn, config.cls_thresh,
                config.use_tensorrt, config.use_fp16);
        }
    
        CRNNRecognizer rec(config.rec_model_dir, config.use_gpu, config.gpu_id,
            config.gpu_mem, config.cpu_math_library_num_threads,
            config.use_mkldnn, config.char_list_file,
            config.use_tensorrt, config.use_fp16);
    
        auto start = std::chrono::system_clock::now();
        std::vector<std::vector<std::vector<int>>> boxes;
        // 检测
        cv::Mat ocrImage;
        ocrImage = det.Run(srcimg, boxes);
        // 识别
        rec.Run(boxes, srcimg, cls);
        auto end = std::chrono::system_clock::now();
        auto duration =
            std::chrono::duration_cast<std::chrono::microseconds>(end - start);
        std::cout << "Cost  "
            << double(duration.count()) *
            std::chrono::microseconds::period::num /
            std::chrono::microseconds::period::den
            << "s" << std::endl;
        cv::Mat gray;
        cv::cvtColor(srcimg, gray, COLOR_BGR2GRAY);
        return new cv::Mat(ocrImage);
    }
    View Code

    先到这里,后面继续更新。

  • 相关阅读:
    legend2---开发日志8(thinkphp和vue如何配合才能达到最优)
    英雄联盟:英雄台词翻译(我用双手成就你的梦想。)
    js插件---bootstrap插件daterangepicker是什么
    js插件---bootstrap-datepicker.js是什么
    ORDER BY RAND()
    Boost.Asio c++ 网络编程翻译(26)
    3Sum Closest
    hdu3480二维斜率优化DP
    MySQL Study之--Mysql无法启动“mysql.host”
    于PsIsSystemThread无论是在线程系统线程标识获得
  • 原文地址:https://www.cnblogs.com/AlbertSmith/p/15397127.html
Copyright © 2011-2022 走看看