Skip to main content
Glama
utility.h4.5 kB
// Copyright (c) 2025 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 <algorithm> #include <fstream> #include <map> #include <opencv2/opencv.hpp> #include <string> #include <unordered_set> #include <vector> #include "absl/status/status.h" #include "absl/status/statusor.h" #ifdef _WIN32 #include <direct.h> #include <io.h> #define mkdir _mkdir static const char PATH_SEPARATOR = '\\'; #else #include <sys/stat.h> #include <sys/types.h> static const char PATH_SEPARATOR = '/'; #endif #include <errno.h> class Utility { public: struct PaddleXConfigVariant { enum class Type { NONE, STR, MAP }; Type type; std::string str_val; std::unordered_map<std::string, std::string> map_val; PaddleXConfigVariant() : type(Type::NONE) {} PaddleXConfigVariant(const std::string &val) : type(Type::STR), str_val(val) {} PaddleXConfigVariant(const char *val) : type(Type::STR), str_val(val ? val : "") {} PaddleXConfigVariant( const std::unordered_map<std::string, std::string> &val) : type(Type::MAP), map_val(val) {} bool IsStr() const { return type == Type::STR; } bool IsMap() const { return type == Type::MAP; } const std::string &GetStr() const { assert(IsStr()); return str_val; } const std::unordered_map<std::string, std::string> &GetMap() const { assert(IsMap()); return map_val; } }; static constexpr const char *MODEL_FILE_PREFIX = "inference"; static const std::set<std::string> kImgSuffixes; static absl::StatusOr< std::map<std::string, std::pair<std::string, std::string>>> GetModelPaths(const std::string &model_dir, const std::string &model_file_prefix = MODEL_FILE_PREFIX); static absl::StatusOr<std::string> FindModelPath(const std::string &model_dir, const std::string &model_name); static absl::StatusOr<std::string> GetConfigPaths(const std::string &model_dir, const std::string &model_file_prefix = MODEL_FILE_PREFIX); static absl::StatusOr<std::string> GetDefaultConfig(std::string pipeline_name); static absl::Status FileExists(const std::string &path); // TODO windows static bool IsMkldnnAvailable(); static void PrintShape(const cv::Mat &img); static absl::Status MyCreateDirectory(const std::string &path); static absl::Status MyCreatePath(const std::string &path); static absl::Status MyCreateFile(const std::string &filepath); static absl::StatusOr<std::vector<cv::Mat>> SplitBatch(const cv::Mat &batch); static absl::StatusOr<cv::Mat> MyLoadImage(const std::string &file_path); static bool IsDirectory(const std::string &path); static std::string GetFileExtension(const std::string &file_path); static void GetFilesRecursive(const std::string &dir_path, std::vector<std::string> &file_list); static std::string ToLower(const std::string &str); static bool IsImageFile(const std::string &file_path); static int MakeDir(const std::string &path); static absl::Status CreateDirectoryRecursive(const std::string &path); static absl::Status CreateDirectoryForFile(const std::string &filePath); static absl::StatusOr<std::string> SmartCreateDirectoryForImage(std::string save_path, const std::string &input_path, const std::string &suffix = "_res"); static absl::StatusOr<std::string> SmartCreateDirectoryForJson(const std::string &save_path, const std::string &input_path, const std::string &suffix = "_res"); static absl::StatusOr<int> StringToInt(std::string s); static bool StringToBool(const std::string &str); static std::string VecToString(const std::vector<int> &input); static absl::StatusOr<std::tuple<std::string, std::string, std::string>> GetOcrModelInfo(std::string lang, std::string ppocr_version); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PaddlePaddle/PaddleOCR'

If you have feedback or need assistance with the MCP directory API, please join our Discord server