Train_Identify/ai_matrix/myutils/myutils.h

163 lines
4.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MYUTILS_H_
#define MYUTILS_H_
#include <mutex>
#include <sstream>
#include <fstream>
#include <dirent.h>
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <memory>
#include <cstring>
#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<float> &data);
//计算最大值
float getMax(const std::vector<float> &data);
//计算最小值
float getMin(const std::vector<float> &data);
//计算中位数
float getMedian(const std::vector<float> &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<std::string> 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<float> SplitAnchor(std::string &strLine, const std::set<char> &setDelimiters);
//创建文件夹路径
bool CreateDirPath(std::string strDirPath);
#ifdef ASCEND
//拷贝Device数据到Host
bool MemcpyDeviceToHost(std::shared_ptr<void> *pHostData, const void *pDeviceBuffer, uint32_t iBufferSize);
//拷贝Host数据到Device
bool MemcpyHostToDevice(std::shared_ptr<void> *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<stDetection> &vecResult);
//获取第二步缩放比例
float GetStep2ResizeRatio(Step1Location &step1Location, int iModelWidth, int iModelHeight);
//第二步坐标还原
void Step2ResetLocation(SingleData &singleData, float fResizeRatio,
std::shared_ptr<ProcessData> 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