|
|
|
@ -56,6 +56,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|
|
|
|
, m_leftPanelSplitter(nullptr)
|
|
|
|
|
, m_intelligenceUI(nullptr)
|
|
|
|
|
, m_faceLightControl(nullptr)
|
|
|
|
|
, m_visionProcess(nullptr)
|
|
|
|
|
// , m_droneControlDialog(nullptr)
|
|
|
|
|
// , m_robotDogControlDialog(nullptr)
|
|
|
|
|
{
|
|
|
|
@ -91,6 +92,17 @@ MainWindow::~MainWindow()
|
|
|
|
|
// delete m_robotDogControlDialog;
|
|
|
|
|
// m_robotDogControlDialog = nullptr;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// 停止并清理视觉识别进程
|
|
|
|
|
if (m_visionProcess) {
|
|
|
|
|
if (m_visionProcess->state() != QProcess::NotRunning) {
|
|
|
|
|
m_visionProcess->kill();
|
|
|
|
|
m_visionProcess->waitForFinished(3000);
|
|
|
|
|
}
|
|
|
|
|
delete m_visionProcess;
|
|
|
|
|
m_visionProcess = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete m_ui;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -781,7 +793,10 @@ void MainWindow::onRobotLocationClicked()
|
|
|
|
|
|
|
|
|
|
void MainWindow::onUAVViewClicked()
|
|
|
|
|
{
|
|
|
|
|
QMessageBox::information(this, "无人机视图", "无人机视图功能正在开发中,暂时无法使用");
|
|
|
|
|
SystemLogger::getInstance()->logInfo("无人机视角请求");
|
|
|
|
|
|
|
|
|
|
// 启动视觉识别系统Web服务
|
|
|
|
|
startVisionWebService();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::onRobotViewClicked()
|
|
|
|
@ -1356,15 +1371,8 @@ void MainWindow::onDroneControlRequested()
|
|
|
|
|
{
|
|
|
|
|
SystemLogger::getInstance()->logInfo("无人机控制请求");
|
|
|
|
|
|
|
|
|
|
// 暂时使用简单的消息框来测试功能
|
|
|
|
|
QMessageBox::information(this, "无人机控制",
|
|
|
|
|
"无人机控制界面功能正在开发中...\n"
|
|
|
|
|
"将包含以下功能:\n"
|
|
|
|
|
"• 飞行控制(起飞、降落、悬停)\n"
|
|
|
|
|
"• 航线规划和导航\n"
|
|
|
|
|
"• 实时视频传输\n"
|
|
|
|
|
"• 照片拍摄和传输\n"
|
|
|
|
|
"• 人物识别功能");
|
|
|
|
|
// 启动视觉识别系统Web服务
|
|
|
|
|
startVisionWebService();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::onRobotDogControlRequested()
|
|
|
|
@ -1382,3 +1390,82 @@ void MainWindow::onRobotDogControlRequested()
|
|
|
|
|
"• 设备状态监控");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::startVisionWebService()
|
|
|
|
|
{
|
|
|
|
|
SystemLogger::getInstance()->logInfo("启动视觉识别系统Web服务");
|
|
|
|
|
|
|
|
|
|
// 如果进程已经在运行,先停止它
|
|
|
|
|
if (m_visionProcess && m_visionProcess->state() != QProcess::NotRunning) {
|
|
|
|
|
SystemLogger::getInstance()->logWarning("视觉识别系统已在运行,先停止现有进程");
|
|
|
|
|
stopVisionWebService();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建新的进程对象
|
|
|
|
|
if (!m_visionProcess) {
|
|
|
|
|
m_visionProcess = new QProcess(this);
|
|
|
|
|
|
|
|
|
|
// 连接进程信号
|
|
|
|
|
connect(m_visionProcess, &QProcess::started, [this]() {
|
|
|
|
|
SystemLogger::getInstance()->logInfo("视觉识别系统Web服务启动成功");
|
|
|
|
|
QMessageBox::information(this, "无人机视觉系统",
|
|
|
|
|
"视觉识别系统正在启动...\n"
|
|
|
|
|
"Web界面将在几秒钟后自动打开\n"
|
|
|
|
|
"访问地址: https://localhost:5000");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(m_visionProcess, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
|
|
|
|
|
[this](int exitCode, QProcess::ExitStatus exitStatus) {
|
|
|
|
|
Q_UNUSED(exitStatus)
|
|
|
|
|
SystemLogger::getInstance()->logInfo(QString("视觉识别系统Web服务已停止,退出代码: %1").arg(exitCode));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(m_visionProcess, &QProcess::errorOccurred, [this](QProcess::ProcessError error) {
|
|
|
|
|
QString errorMsg;
|
|
|
|
|
switch (error) {
|
|
|
|
|
case QProcess::FailedToStart:
|
|
|
|
|
errorMsg = "无法启动Python进程,请检查Python环境";
|
|
|
|
|
break;
|
|
|
|
|
case QProcess::Crashed:
|
|
|
|
|
errorMsg = "视觉识别系统进程意外崩溃";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
errorMsg = "视觉识别系统进程发生未知错误";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
SystemLogger::getInstance()->logError(errorMsg);
|
|
|
|
|
QMessageBox::critical(this, "启动错误", errorMsg);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置工作目录和启动参数
|
|
|
|
|
QString workingDir = "/home/hzk/Software_Architecture/distance-judgement";
|
|
|
|
|
QString pythonScript = "main_web.py";
|
|
|
|
|
|
|
|
|
|
m_visionProcess->setWorkingDirectory(workingDir);
|
|
|
|
|
m_visionProcess->start("python3", QStringList() << pythonScript);
|
|
|
|
|
|
|
|
|
|
SystemLogger::getInstance()->logInfo("正在启动视觉识别系统...");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::stopVisionWebService()
|
|
|
|
|
{
|
|
|
|
|
if (!m_visionProcess || m_visionProcess->state() == QProcess::NotRunning) {
|
|
|
|
|
SystemLogger::getInstance()->logWarning("视觉识别系统进程未运行");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SystemLogger::getInstance()->logInfo("停止视觉识别系统Web服务");
|
|
|
|
|
|
|
|
|
|
// 优雅地终止进程
|
|
|
|
|
m_visionProcess->terminate();
|
|
|
|
|
|
|
|
|
|
// 等待进程结束,如果超时则强制杀死
|
|
|
|
|
if (!m_visionProcess->waitForFinished(5000)) {
|
|
|
|
|
SystemLogger::getInstance()->logWarning("进程未能正常退出,强制结束");
|
|
|
|
|
m_visionProcess->kill();
|
|
|
|
|
m_visionProcess->waitForFinished(3000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SystemLogger::getInstance()->logInfo("视觉识别系统Web服务已停止");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|