(二)PaddleOCR 编译 ocr_system.dll_右键

 

(二)PaddleOCR 编译 ocr_system.dll_c++_02

 

 

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

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

(二)PaddleOCR 编译 ocr_system.dll_#include_03

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

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

(二)PaddleOCR 编译 ocr_system.dll_paddle_04(二)PaddleOCR 编译 ocr_system.dll_paddle_05
#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

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

 

 

 

(二)PaddleOCR 编译 ocr_system.dll_#include_06