#ifndef __OCR_UTILS_H__ #define __OCR_UTILS_H__ #include #include "OcrStruct.h" #include #include #include template static std::unique_ptr makeUnique(Ts &&... params) { return std::unique_ptr(new T(std::forward(params)...)); } template static double getMean(std::vector &input) { auto sum = accumulate(input.begin(), input.end(), 0.0); return sum / input.size(); } template static double getStdev(std::vector &input, double mean) { if (input.size() <= 1) return 0; double accum = 0.0; for_each(input.begin(), input.end(), [&](const double d) { accum += (d - mean) * (d - mean); }); double stdev = sqrt(accum / (input.size() - 1)); return stdev; } template inline T clamp(T x, T min, T max) { if (x > max) return max; if (x < min) return min; return x; } double getCurrentTime(); inline bool isFileExists(const std::string &name) { struct stat buffer; return (stat(name.c_str(), &buffer) == 0); } std::wstring strToWstr(std::string str); ScaleParam getScaleParam(cv::Mat &src, const float scale); ScaleParam getScaleParam(cv::Mat &src, const int targetSize); std::vector getBox(const cv::RotatedRect &rect); int getThickness(cv::Mat &boxImg); void drawTextBox(cv::Mat &boxImg, cv::RotatedRect &rect, int thickness); void drawTextBox(cv::Mat &boxImg, const std::vector &box, int thickness); void drawTextBoxes(cv::Mat &boxImg, std::vector &textBoxes, int thickness); cv::Mat matRotateClockWise180(cv::Mat src); cv::Mat matRotateClockWise90(cv::Mat src); cv::Mat getRotateCropImage(const cv::Mat &src, std::vector box); cv::Mat adjustTargetImg(cv::Mat &src, int dstWidth, int dstHeight); std::vector getMinBoxes(const cv::RotatedRect &boxRect, float &maxSideLen); float boxScoreFast(const std::vector &boxes, const cv::Mat &pred); cv::RotatedRect unClip(std::vector box, float unClipRatio); std::vector substractMeanNormalize(cv::Mat &src, const float *meanVals, const float *normVals); std::vector getAngleIndexes(std::vector &angles); std::vector getInputNames(Ort::Session *session); std::vector getOutputNames(Ort::Session *session); void saveImg(cv::Mat &img, const char *imgPath); std::string getSrcImgFilePath(const char *path, const char *imgName); std::string getResultTxtFilePath(const char *path, const char *imgName); std::string getResultImgFilePath(const char *path, const char *imgName); std::string getDebugImgFilePath(const char *path, const char *imgName, size_t i, const char *tag); #endif //__OCR_UTILS_H__