main.cpp 3.7 KB
Newer Older
littletomatodonkey's avatar
littletomatodonkey 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

Z
zhoujun 已提交
15 16
#include "glog/logging.h"
#include "omp.h"
littletomatodonkey's avatar
littletomatodonkey 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29
#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>

L
LDOUBLEV 已提交
30
#include <glog/logging.h>
littletomatodonkey's avatar
littletomatodonkey 已提交
31
#include <include/config.h>
littletomatodonkey's avatar
littletomatodonkey 已提交
32 33
#include <include/ocr_det.h>
#include <include/ocr_rec.h>
L
LDOUBLEV 已提交
34 35
#include <include/utility.h>
#include <sys/stat.h>
littletomatodonkey's avatar
littletomatodonkey 已提交
36 37 38 39 40 41

using namespace std;
using namespace cv;
using namespace PaddleOCR;

int main(int argc, char **argv) {
littletomatodonkey's avatar
littletomatodonkey 已提交
42
  if (argc < 3) {
littletomatodonkey's avatar
littletomatodonkey 已提交
43
    std::cerr << "[ERROR] usage: " << argv[0]
littletomatodonkey's avatar
littletomatodonkey 已提交
44
              << " configure_filepath image_path\n";
littletomatodonkey's avatar
littletomatodonkey 已提交
45 46
    exit(1);
  }
littletomatodonkey's avatar
littletomatodonkey 已提交
47

L
LDOUBLEV 已提交
48
  OCRConfig config(argv[1]);
littletomatodonkey's avatar
littletomatodonkey 已提交
49 50 51 52

  config.PrintConfigInfo();

  std::string img_path(argv[2]);
L
LDOUBLEV 已提交
53 54 55
  std::vector<std::string> all_img_names;
  // cv::Mat srcimg = cv::imread(img_path, cv::IMREAD_COLOR);
  Utility::GetAllFiles((char *)img_path.c_str(), all_img_names);
56

L
LDOUBLEV 已提交
57 58 59 60
  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,
61 62
                 config.use_polygon_score, config.visualize,
                 config.use_tensorrt, config.use_fp16);
Z
zhoujun 已提交
63 64 65 66 67

  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,
L
LDOUBLEV 已提交
68 69
                         config.use_mkldnn, config.cls_thresh,
                         config.use_tensorrt, config.use_fp16);
Z
zhoujun 已提交
70 71
  }

littletomatodonkey's avatar
littletomatodonkey 已提交
72 73
  CRNNRecognizer rec(config.rec_model_dir, config.use_gpu, config.gpu_id,
                     config.gpu_mem, config.cpu_math_library_num_threads,
L
LDOUBLEV 已提交
74 75
                     config.use_mkldnn, config.char_list_file,
                     config.use_tensorrt, config.use_fp16);
littletomatodonkey's avatar
littletomatodonkey 已提交
76

littletomatodonkey's avatar
littletomatodonkey 已提交
77
  auto start = std::chrono::system_clock::now();
L
LDOUBLEV 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

  for (auto img_dir : all_img_names) {
    LOG(INFO) << "The predict img: " << img_dir;

    cv::Mat srcimg = cv::imread(img_dir, cv::IMREAD_COLOR);
    if (!srcimg.data) {
      std::cerr << "[ERROR] image read failed! image path: " << img_path
                << "\n";
      exit(1);
    }
    std::vector<std::vector<std::vector<int>>> boxes;

    det.Run(srcimg, boxes);
    // for (auto box : boxes){
    //   std::cout << "box: " << box[0][0] << "  " << box[0][1] << "  "
    //             << box[1][0] << "  " << box[1][1] << "  "
    //             << box[2][0] << "  " << box[2][1] << "  "
    //             << box[3][0] << "  " << box[3][1] << "  " << std::endl;
    // }
    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;
  }
littletomatodonkey's avatar
littletomatodonkey 已提交
107 108 109

  return 0;
}