本文主要对程序运行中需要记录的信息如何保存为日志文件,并定期进行清空,减少内存消耗等内容进行介绍。主要设计开发逻辑和基于C++语言的代码。
代码
主要逻辑流程
- 先判断.txt文件是否存在,如果不存在则进行创建,其中所有路径都在配置文件config.ini中配置。
- 根据.txt文件的路径和程序运行时产生的信息,向里边添加要保存的内容,如执行某检测过程时要保存的时间、类别和置信度等信息。本运行保存的有log.txt文件创建时间、检测到图像时间、图像名称、类别和置信度等信息。
3.判断间隔时间是否大于设置的时间(两天或者根据自己情况设置的清空log.txt文件内容的时间),如果大于则进行文件清空,不大于则继续进行保存。此处可以采用多种方法,本代码采用的是删除和创建。
代码
#include "Laod_Save.h"
int main() {
DetYolov7 det;//定义一个yolov7的类
std::string Model_dir;
std::string Label_txt;
std::string Load_Path;
std::string Save_Path;
std::string Log_Path;
//加载五个文件路径的函数
read_ini_file("./config.ini", Load_Path, Save_Path, Model_dir, Label_txt, Log_Path);
//模型初始化
det.init(Model_dir, Label_txt, cof_threshold, nms_area_threshold);
//在创建时会先判断是否有log.txt存在,若不存在则进行创建,并写入创建时间等信息
Create_Log_File(Log_Path);
std::time_t lastDeleteTime = 0;
while (1)
{
// 获取当前时间
std::time_t currentTime = std::time(0);
// 计算时间差(分钟)
//注意,第一次的结果结果较大,是因为currentTime时间不是从0开始的
std::time_t timeDiff = currentTime - lastDeleteTime;
int minutesDiff = (int)timeDiff / 60;//单位分钟
// 如果时间差大于等于2880(48小时)分钟,则执行删除和重新创建操作
if (minutesDiff >= 2880)
{
//若时间间隔大于设置的阈值,则清空(删除)已经存在的log.txt日志文件
Del_Log_File(Log_Path);
//开始重新计时
lastDeleteTime = currentTime;
//再创建一个新的log.txt文件,继续加载写入要保存的信息。
Create_Log_File(Log_Path);
}
/*
//加载图像和读取图像名称,并分别保存到相应的容
Load_Img_name(Load_Path, vec_ImageNames, vec_ImageLoad);
//输入的是图像,以及推理之后添加完框、置信度和类别的图像的保存路径
//通过定义的结构体result返回目标类别、置信度和框等信息
auto result = det.detector(Infe_Image, OutputImagePath);
*/
//把log.txt路径、图像名字、标签和置信度输入到相应函数,
//进行图像名字、标签和置信度信息的写入
//其中,时间信息在函数体内实现。
Log_Infor_ToFile(Log_Path, name, Label, Confidence);
}
return 0;
}
总结
最后运行代码,保存的log.txt文件内容信息和格式如下。
其中,需要注意代码中第一次判断时std::time_t currentTime = std::time(0);的值较大,因为 std::time(0)的值不是从零开始的。
此外,因涉及到项目的一些内容,文中的代码有些地方不方便公开,但逻辑是完整的。有需要完整版的或代开发的欢迎私聊。