(二)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

先到這里,后面繼續更新。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM