#ifndef MYUTILS_H_ #define MYUTILS_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Log.h" #include "ErrorCode.h" #include "MyYaml.h" #include "json/json.h" #include "AppCommon.h" #ifdef ASCEND #include "acl/acl.h" #include "acl/ops/acl_dvpp.h" #endif namespace ai_matrix { class MyUtils final { public: static MyUtils *getins(); //计算均值 float getMean(const std::vector &data); //计算最大值 float getMax(const std::vector &data); //计算最小值 float getMin(const std::vector &data); //计算中位数 float getMedian(const std::vector &data); //获取时间戳 std::string get_timestamp_file(); std::string get_timestamp_log(); //获取日期 std::string get_date(); //获取时间 std::string get_time(); //时间戳转化为时间 毫秒级 std::string Stamp2Time(long long timestamp, bool has_msec = false); //创建文件夹 std::string create_dir_name(std::string root, std::string name); std::string create_dir_date_name_time(std::string root, std::string name); std::string create_dir_date(std::string root); //创建文件路径 std::string create_file_path(std::string root, std::string name, std::string suffix); //字符串分割函数 std::vector split(std::string str, std::string pattern); //float 转 string std::string getStringFromFloat(float f); //bool 转 string std::string getStringFromBool(bool b); /** * 拷贝文件 * @param filePath 源文件位置 * @param savePath 将要拷贝的新位置 * @return */ bool copyFile(std::string filePath, std::string savePath); //替换string中所有指定字符串 std::string& replace_all_distinct(std::string &str, const std::string &old_value, const std::string &new_value); //获取北京当前日期 std::string GetDate(); //获取北京当前时间 std::string GetTime(); //获取当前时间距1970年的毫秒数 uint64_t GetCurrentTimeMillis(); //获取指定时间距1970年的毫秒数 (入参格式:YYYY-MM-DD hh-mm-ss) uint64_t GetParamTimeMilliSeconds(std::string &strDateTime); std::vector SplitAnchor(std::string &strLine, const std::set &setDelimiters); //创建文件夹路径 bool CreateDirPath(std::string strDirPath); #ifdef ASCEND //拷贝Device数据到Host bool MemcpyDeviceToHost(std::shared_ptr *pHostData, const void *pDeviceBuffer, uint32_t iBufferSize); //拷贝Host数据到Device bool MemcpyHostToDevice(std::shared_ptr *pDeviceData, const void *pHostBuffer, uint32_t iBufferSize, bool bDvppFlag = true); #endif //获取指定毫秒数的对应的日期时间 std::string GetDateTimeByMilliSeconds(uint64_t i64MilliSeconds, bool bFormatFlag = false); //校验是否识别该目标 bool ChkIsHaveTarget(const std::string &strOneTarget); //读取json格式文件内容 bool ReadJsonInfo(Json::Value &jvFileInfo, std::string &strFilePath, int iRetry = 3); //json格式内容写入文件 bool WriteJsonInfo(Json::Value &jvFileInfo, std::string &strFilePath); //获取第1步得分最高框 void GetMaxScoreResult(std::vector &vecResult); //获取第二步缩放比例 float GetStep2ResizeRatio(Step1Location &step1Location, int iModelWidth, int iModelHeight); //第二步坐标还原 void Step2ResetLocation(SingleData &singleData, float fResizeRatio, std::shared_ptr pProcessData, Step1Location &step1Location); private: MyUtils() = default; MyUtils(const MyUtils &) = delete; MyUtils(MyUtils &&) = delete; MyUtils &operator=(const MyUtils &) = delete; MyUtils &operator=(MyUtils &&) = delete; ~MyUtils() = default; //定义一个嵌套类,负责释放内存,操作系统自动完成,不用担心内存泄露 class GarbageCollector { public: ~GarbageCollector() { if (MyUtils::ins) { delete MyUtils::ins; MyUtils::ins = nullptr; } } }; static GarbageCollector gc; static MyUtils *ins; static std::mutex mx; //锁,保证线程安全 }; } #endif