// 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. #pragma once #include "opencv2/core.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/imgproc.hpp" #include #include #include #include #include #include #include #include #include "include/clipper.h" #include "include/utility.h" using namespace std; namespace PaddleOCR { class DBPostProcessor { public: void GetContourArea(const std::vector> &box, float unclip_ratio, float &distance); cv::RotatedRect UnClip(std::vector> box, const float &unclip_ratio); float **Mat2Vec(cv::Mat mat); std::vector> OrderPointsClockwise(std::vector> pts); std::vector> GetMiniBoxes(cv::RotatedRect box, float &ssid); float BoxScoreFast(std::vector> box_array, cv::Mat pred); float PolygonScoreAcc(std::vector contour, cv::Mat pred); std::vector>> BoxesFromBitmap(const cv::Mat pred, const cv::Mat bitmap, const float &box_thresh, const float &det_db_unclip_ratio, const std::string &det_db_score_mode); std::vector>> FilterTagDetRes(std::vector>> boxes, float ratio_h, float ratio_w, cv::Mat srcimg); private: static bool XsortInt(std::vector a, std::vector b); static bool XsortFp32(std::vector a, std::vector b); std::vector> Mat2Vector(cv::Mat mat); inline int _max(int a, int b) { return a >= b ? a : b; } inline int _min(int a, int b) { return a >= b ? b : a; } template inline T clamp(T x, T min, T max) { if (x > max) return max; if (x < min) return min; return x; } inline float clampf(float x, float min, float max) { if (x > max) return max; if (x < min) return min; return x; } }; class TablePostProcessor { public: void init(std::string label_path, bool merge_no_span_structure = true); void Run(std::vector &loc_preds, std::vector &structure_probs, std::vector &rec_scores, std::vector &loc_preds_shape, std::vector &structure_probs_shape, std::vector> &rec_html_tag_batch, std::vector>> &rec_boxes_batch, std::vector &width_list, std::vector &height_list); private: std::vector label_list_; std::string end = "eos"; std::string beg = "sos"; }; } // namespace PaddleOCR