366 lines
14 KiB
C++
366 lines
14 KiB
C++
#include "HxDataBase.h"
|
|
|
|
#include "HxUtils.h"
|
|
|
|
QMutex HxDataBase::mutex;
|
|
QSqlDatabase HxDataBase::database;
|
|
QString HxDataBase::device_id;
|
|
QString HxDataBase::ftp_address, HxDataBase::ftp_username, HxDataBase::ftp_password;
|
|
QString HxDataBase::qamqp_address, HxDataBase::qamqp_username, HxDataBase::qamqp_password;
|
|
int HxDataBase::algorithm_type;
|
|
QString HxDataBase::dsm_video_input_source;
|
|
QString HxDataBase::adas_video_input_source;
|
|
QStringList HxDataBase::bsd_video_input_source;
|
|
QStringList HxDataBase::bsd_warn_regions;
|
|
EventWarnParamConfig HxDataBase::warm_param_config;
|
|
CameraCalibration HxDataBase::adas_camera_calibration;
|
|
|
|
QSqlDatabase HxDataBase::open(QString filepath, QString connectionName)
|
|
{
|
|
QSqlDatabase db;
|
|
if (QSqlDatabase::contains(connectionName))
|
|
db = QSqlDatabase::database(connectionName);
|
|
else
|
|
db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
|
|
|
|
db.setDatabaseName(filepath);
|
|
|
|
if (!db.open())
|
|
{
|
|
QString bk_filepath = filepath + QString(".[%1].bk").arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmss"));
|
|
|
|
QFile::copy(filepath, bk_filepath);
|
|
|
|
QFile::remove(filepath);
|
|
|
|
db.open();
|
|
}
|
|
|
|
return db;
|
|
}
|
|
|
|
/**
|
|
* @brief 关闭数据库
|
|
* @param connectionName 连接名
|
|
*/
|
|
void HxDataBase::close(QString connectionName) { QSqlDatabase::removeDatabase(connectionName); }
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据
|
|
* @param name name字段值
|
|
* @return 返回对应参数
|
|
*/
|
|
QVariant HxDataBase::read_setting(QString name)
|
|
{
|
|
QVariant value;
|
|
|
|
QMutexLocker lock(&mutex);
|
|
|
|
QSqlQuery query(database);
|
|
|
|
query.prepare("SELECT [value] FROM [Setting] WHERE [name]=:name");
|
|
query.bindValue(":name", name);
|
|
if (query.exec())
|
|
{
|
|
if (query.next())
|
|
value = query.value("value");
|
|
}
|
|
|
|
query.clear();
|
|
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据(int)
|
|
* @param name name字段值
|
|
* @param defaultValue 默认值(int)
|
|
* @return 返回对应参数(int)
|
|
*/
|
|
int HxDataBase::read_setting(QString name, int defaultValue)
|
|
{
|
|
auto value = read_setting(name);
|
|
|
|
return value.isNull() ? defaultValue : value.toInt();
|
|
}
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据(bool)
|
|
* @param name name字段值
|
|
* @param defaultValue 默认值(bool)
|
|
* @return 返回对应参数(bool)
|
|
*/
|
|
bool HxDataBase::read_setting(QString name, bool defaultValue)
|
|
{
|
|
auto value = read_setting(name);
|
|
|
|
return value.isNull() ? defaultValue : value.toBool();
|
|
}
|
|
|
|
/**
|
|
* @brief 读取 Setting 表数据(string)
|
|
* @param name name字段值
|
|
* @param defaultValue 默认值(string)
|
|
* @return 返回对应参数(string)
|
|
*/
|
|
QString HxDataBase::read_setting(QString name, QString defaultValue)
|
|
{
|
|
auto value = read_setting(name);
|
|
|
|
return value.isNull() ? defaultValue : value.toString();
|
|
}
|
|
|
|
/**
|
|
* @brief 写入 Setting 表数据
|
|
* @param name name字段值
|
|
* @param value 对应参数
|
|
*/
|
|
void HxDataBase::write_setting(QString name, QString value)
|
|
{
|
|
QMutexLocker lock(&mutex);
|
|
|
|
QSqlQuery query(database);
|
|
|
|
query.prepare("REPLACE INTO [Setting] ([name], [value]) VALUES (:name, :value);");
|
|
query.bindValue(":name", name);
|
|
query.bindValue(":value", value);
|
|
if (!query.exec())
|
|
{
|
|
qDebug("write_setting failed, name=%s, value=%s", name.toUtf8().data(), value.toUtf8().data());
|
|
}
|
|
query.clear();
|
|
}
|
|
|
|
void HxDataBase::read_warm_param_config(void)
|
|
{
|
|
auto start_event_warn_kind = read_setting("start_event_warn_kind", QString("1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1")).split(";");
|
|
auto abnormal_warn_frame_count = read_setting("abnormal_warn_frame_count", QString("0;0;0;0;0;0;0;50;75;25;50;75;50;50;50;25;75;50;50;50;50;50;75;50;50;100")).split(";");
|
|
auto normal_frame_count = read_setting("normal_frame_count", QString("0;0;0;0;0;0;0;25;25;25;25;25;25;25;25;25;25;25;25;25;25;25;0;0;0;0")).split(";");
|
|
auto abnormal_warn_interval_frame_count = read_setting("abnormal_warn_interval_frame_count", QString("0;0;125;0;125;0;0;0;0;0;0;0;0;125;0;0;0;0;0;0;0;0;0;0;0;0")).split(";");
|
|
auto abnormal_warn_score_threshold = read_setting("abnormal_warn_score_threshold", QString("0;0;0;0;0;0;0;0.7;0.8;0.4;0.65;0.95;0.75;0.3;0.65;0.5;0.87;25;25;20;15;0.75;0.3;0.5;0.5;0.5")).split(";");
|
|
auto normal_warn_score_threshold = read_setting("normal_warn_score_threshold", QString("0;0;0;0;0;0;0;0.35;0.35;0.7;0.7;0.7;0.55;0.8;0.4;0.55;0.13;20;20;15;10;0.55;0.3;0.3;0.5;0.5")).split(";");
|
|
|
|
for (int i = 0; i < EVENT_WARN_NUM; i++)
|
|
{
|
|
warm_param_config.bStartEventWarnKind[i] = QVariant(start_event_warn_kind.at(i)).toBool();
|
|
warm_param_config.nAbnormalWarnFrameCount[i] = abnormal_warn_frame_count.at(i).toInt();
|
|
warm_param_config.nNormalFrameCount[i] = normal_frame_count.at(i).toInt();
|
|
warm_param_config.nAbnormalWarnIntervalFrameCount[i] = abnormal_warn_interval_frame_count.at(i).toInt();
|
|
warm_param_config.fAbnormalWarnScoreThreshold[i] = abnormal_warn_score_threshold.at(i).toFloat();
|
|
warm_param_config.fNormalWarnScoreThreshold[i] = normal_warn_score_threshold.at(i).toFloat();
|
|
}
|
|
|
|
warm_param_config.nHmwTime = read_setting("hmw_time", 1200);
|
|
warm_param_config.nPcwTime = read_setting("pcw_time", 2000);
|
|
warm_param_config.nFcwTime = read_setting("fcw_time", 2400);
|
|
warm_param_config.fHmwVel = read_setting("hmw_vel", 30);
|
|
warm_param_config.fFcwVel = read_setting("fcw_vel", 30);
|
|
warm_param_config.fLdwVel = read_setting("ldw_vel", 55);
|
|
warm_param_config.fPcwVel = read_setting("pcw_vel", 50);
|
|
warm_param_config.fBsdFirstVel = read_setting("bsd_first_vel", 30);
|
|
warm_param_config.fBsdSecondVel = read_setting("bsd_second_vel", 30);
|
|
warm_param_config.fBsdThirdVel = read_setting("bsd_third_vel", 30);
|
|
warm_param_config.nLdwDistance = read_setting("ldw_distance", -5);
|
|
warm_param_config.fDsmVel = read_setting("dsm_vel", 5);
|
|
}
|
|
|
|
void HxDataBase::write_warm_param_config(void)
|
|
{
|
|
QStringList start_event_warn_kind, abnormal_warn_frame_count, normal_frame_count, abnormal_warn_interval_frame_count, abnormal_warn_score_threshold, normal_warn_score_threshold;
|
|
|
|
for (int i = 0; i < EVENT_WARN_NUM; i++)
|
|
{
|
|
start_event_warn_kind.append(QString::number(warm_param_config.bStartEventWarnKind[i]));
|
|
abnormal_warn_frame_count.append(QString::number(warm_param_config.nAbnormalWarnFrameCount[i]));
|
|
normal_frame_count.append(QString::number(warm_param_config.nNormalFrameCount[i]));
|
|
abnormal_warn_interval_frame_count.append(QString::number(warm_param_config.nAbnormalWarnIntervalFrameCount[i]));
|
|
abnormal_warn_score_threshold.append(QString::number(warm_param_config.fAbnormalWarnScoreThreshold[i]));
|
|
normal_warn_score_threshold.append(QString::number(warm_param_config.fNormalWarnScoreThreshold[i]));
|
|
}
|
|
|
|
write_setting("start_event_warn_kind", start_event_warn_kind.join(";"));
|
|
write_setting("abnormal_warn_frame_count", abnormal_warn_frame_count.join(";"));
|
|
write_setting("normal_frame_count", normal_frame_count.join(";"));
|
|
write_setting("abnormal_warn_interval_frame_count", abnormal_warn_interval_frame_count.join(";"));
|
|
write_setting("abnormal_warn_score_threshold", abnormal_warn_score_threshold.join(";"));
|
|
write_setting("normal_warn_score_threshold", normal_warn_score_threshold.join(";"));
|
|
write_setting("hmw_time", QString::number(warm_param_config.nHmwTime));
|
|
write_setting("pcw_time", QString::number(warm_param_config.nPcwTime));
|
|
write_setting("fcw_time", QString::number(warm_param_config.nFcwTime));
|
|
write_setting("hmw_vel", QString::number(warm_param_config.fHmwVel));
|
|
write_setting("fcw_vel", QString::number(warm_param_config.fFcwVel));
|
|
write_setting("ldw_vel", QString::number(warm_param_config.fLdwVel));
|
|
write_setting("pcw_vel", QString::number(warm_param_config.fPcwVel));
|
|
write_setting("bsd_first_vel", QString::number(warm_param_config.fBsdFirstVel));
|
|
write_setting("bsd_second_vel", QString::number(warm_param_config.fBsdSecondVel));
|
|
write_setting("bsd_third_vel", QString::number(warm_param_config.fBsdThirdVel));
|
|
write_setting("ldw_distance", QString::number(warm_param_config.nLdwDistance));
|
|
write_setting("dsm_vel", QString::number(warm_param_config.fDsmVel));
|
|
}
|
|
|
|
void HxDataBase::read_adas_camera_calibration(void)
|
|
{
|
|
auto value = read_setting("adas_camera_calibration", QString("4527;1830;0;1695;0;1500;6.00;0.00;-0.32;0.00")).split(";");
|
|
|
|
adas_camera_calibration.fCarLen = value[0].toInt();
|
|
adas_camera_calibration.fCarWidth = value[1].toInt();
|
|
adas_camera_calibration.fRefCenter = value[2].toInt();
|
|
adas_camera_calibration.fRefTop = value[3].toInt();
|
|
adas_camera_calibration.fDisLen2Tyre = value[4].toInt();
|
|
adas_camera_calibration.fCameraHeight = value[5].toInt();
|
|
adas_camera_calibration.fCameraFocus = value[6].toFloat();
|
|
adas_camera_calibration.fCameraDx = value[7].toFloat();
|
|
adas_camera_calibration.fPitch = value[8].toFloat();
|
|
adas_camera_calibration.fYaw = value[9].toFloat();
|
|
}
|
|
|
|
void HxDataBase::write_adas_camera_calibration(void)
|
|
{
|
|
QStringList value;
|
|
|
|
value.append(QString::number(adas_camera_calibration.fCarLen));
|
|
value.append(QString::number(adas_camera_calibration.fCarWidth));
|
|
value.append(QString::number(adas_camera_calibration.fRefCenter));
|
|
value.append(QString::number(adas_camera_calibration.fRefTop));
|
|
value.append(QString::number(adas_camera_calibration.fDisLen2Tyre));
|
|
value.append(QString::number(adas_camera_calibration.fCameraHeight));
|
|
value.append(QString::number(adas_camera_calibration.fCameraFocus, 'f', 2));
|
|
value.append(QString::number(adas_camera_calibration.fCameraDx, 'f', 2));
|
|
value.append(QString::number(adas_camera_calibration.fPitch, 'f', 2));
|
|
value.append(QString::number(adas_camera_calibration.fYaw, 'f', 2));
|
|
|
|
write_setting("adas_camera_calibration", value.join(";"));
|
|
}
|
|
|
|
void HxDataBase::initialization()
|
|
{
|
|
database = open("DataBase.db", "DataBase");
|
|
|
|
if (!database.isOpen())
|
|
{
|
|
qDebug("配置信息创建失败, 程序无法继续启动!");
|
|
return;
|
|
}
|
|
|
|
QSqlQuery query(database);
|
|
|
|
/* 创建 程序配置信息 表 */
|
|
if (!query.exec("CREATE TABLE IF NOT EXISTS [Setting] ("
|
|
" [name] TEXT NOT NULL PRIMARY KEY,"
|
|
" [value] TEXT"
|
|
");"))
|
|
{
|
|
HxLog::append("database", "setting read failed");
|
|
return;
|
|
}
|
|
|
|
/* 设备编号 */
|
|
device_id = read_setting("device_id", QString("TVIS"));
|
|
|
|
/* FTP信息 */
|
|
ftp_address = read_setting("ftp_address", QString("192.168.10.10:7616"));
|
|
ftp_username = read_setting("ftp_username", QString("nvruser"));
|
|
ftp_password = read_setting("ftp_password", QString("Sztvis_789."));
|
|
|
|
/* */
|
|
qamqp_address = read_setting("qamqp_address", QString("192.168.1.227:5672"));
|
|
qamqp_username = read_setting("qamqp_username", QString("root"));
|
|
qamqp_password = read_setting("qamqp_password", QString("Sztvis@789."));
|
|
|
|
/* 算法类型, 默认 BSD */
|
|
algorithm_type = read_setting("algorithm_type", 0x02);
|
|
|
|
/* DSM 视频输入源 (string) */
|
|
dsm_video_input_source = read_setting("dsm_video_input_source", QString(""));
|
|
|
|
/* Adas 视频输入源 (string) */
|
|
adas_video_input_source = read_setting("adas_video_input_source", QString(""));
|
|
|
|
/* BSD 视频输入源 (string) */
|
|
bsd_video_input_source = read_setting("bsd_video_input_source", QString(";;;;;;")).split(";");
|
|
|
|
/* BSD 报警区域 */
|
|
bsd_warn_regions = read_setting(
|
|
"bsd_warn_regions",
|
|
QString("0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0*"
|
|
"0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0"))
|
|
.split("*");
|
|
|
|
/* 读取报警参数配置 */
|
|
read_warm_param_config();
|
|
|
|
/* 读取 ADAS 相机内外参 */
|
|
read_adas_camera_calibration();
|
|
}
|
|
|
|
bool HxDataBase::save_setting()
|
|
{
|
|
database.transaction();
|
|
|
|
write_setting("device_id", device_id);
|
|
write_setting("ftp_address", ftp_address);
|
|
write_setting("ftp_username", ftp_username);
|
|
write_setting("ftp_password", ftp_password);
|
|
write_setting("qamqp_address", qamqp_address);
|
|
write_setting("qamqp_username", qamqp_username);
|
|
write_setting("qamqp_password", qamqp_password);
|
|
write_setting("algorithm_type", QString::number(algorithm_type));
|
|
write_setting("dsm_video_input_source", dsm_video_input_source);
|
|
write_setting("adas_video_input_source", adas_video_input_source);
|
|
write_setting("bsd_video_input_source", bsd_video_input_source.join(";"));
|
|
write_setting("bsd_warn_regions", bsd_warn_regions.join("*"));
|
|
write_warm_param_config();
|
|
write_adas_camera_calibration();
|
|
|
|
return database.commit();
|
|
}
|
|
|
|
/**
|
|
* @brief 获取BSD报警区域
|
|
* @param channel 通道号
|
|
* @return 返回 BsdWarnRegion 结构体
|
|
*/
|
|
BsdWarnRegion HxDataBase::get_bsd_warn_region(int channel)
|
|
{
|
|
BsdWarnRegion ret;
|
|
|
|
auto data = bsd_warn_regions[channel];
|
|
if (data == "")
|
|
data = "0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0$0,0 0,0 0,0 0,0";
|
|
|
|
auto array = data.split("$");
|
|
|
|
auto points = array[0].split(" ");
|
|
for (int a = 0; a < 4; a++)
|
|
{
|
|
auto p = points.at(a).split(",");
|
|
|
|
ret.tFirstRegionPoint[a].x = p[0].toInt();
|
|
ret.tFirstRegionPoint[a].y = p[1].toInt();
|
|
}
|
|
|
|
points = array[1].split(" ");
|
|
for (int a = 0; a < 4; a++)
|
|
{
|
|
auto p = points.at(a).split(",");
|
|
|
|
ret.tSecondRegionPoint[a].x = p[0].toInt();
|
|
ret.tSecondRegionPoint[a].y = p[1].toInt();
|
|
}
|
|
|
|
points = array[2].split(" ");
|
|
for (int a = 0; a < 4; a++)
|
|
{
|
|
auto p = points.at(a).split(",");
|
|
|
|
ret.tThirdRegionPoint[a].x = p[0].toInt();
|
|
ret.tThirdRegionPoint[a].y = p[1].toInt();
|
|
}
|
|
|
|
return ret;
|
|
}
|