最近在做一個深度學習對圖片中對象識別效果的檢測工具,其主要功能就是將自己標注的圖片與識別結果圖片進行對比然后計算識別的準確等參數,并提供原圖與結果圖片的顯示功能。
腳本主要完成識別與計算功能,QT完成數據的整理顯示與圖片的顯示。
我們可以直接用
qt的QProcess調用bash來執行運行腳本的命令
,獲取結果數據則有兩種方式:
一是在
python腳本中將結果寫到文本中,腳本結束后由qt讀取
。
二是在
腳本中用print按一定格式將結果輸出,在Qt中可用QProcess的信號槽機制獲取輸出結果
。
void TagDetection::startDetect_slot()
{
p = new QProcess(this);
//當腳本中的結果全部(注意是全部)print完成后進入到OnReadData_slot
connect(p, SIGNAL(readyReadStandardOutput()), this, SLOT(OnReadData_slot()));
//組合命令,帶入參
QString labelsStr = QString::fromStdString(m_Vecmodels.at(m_CurrentLabel).types).split(" ").join("/");
QStringList cmdList;
cmdList<
<<:fromstdstring>
<<:fromstdstring>
<
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
<<:fromstdstring>
QString cmd = cmdList.join(" ");
qDebug()<
//開始執行
p->start(cmd);
//等待提示框
QApplication::setOverrideCursor(Qt::WaitCursor);//設置鼠標為等待狀態
QProgressDialog progress;
progress.setWindowTitle(codecMain->toUnicode("提示"));
progress.setLabelText(codecMain->toUnicode("正在檢測中..."));
progress.setCancelButton(false);
progress.setRange(0, 60000);//設置范圍
progress.setModal(true);//設置為模態對話框
progress.show();
for (int i = 0; i < 3000 ; i++)
{
QThread::msleep(100);
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
progress.setValue(i);
//進入槽函數則停止等待
if(g_IsDetectedDone)
{
g_IsDetectedDone = false;
break;
}
//用戶取消的話則中止
if (progress.wasCanceled())
{
break;
}
}
QApplication::restoreOverrideCursor();
progress.close();
QMessageBox::warning(this, codecMain->toUnicode("提示"), codecMain->toUnicode("檢測結束!"));
}
槽函數如下:
//識別完成
void TagDetection::OnReadData_slot()
{
//改變標志位停止等待
g_IsDetectedDone = true;
//獲取結果
QString Pyresult = codecMain->toUnicode(p->readAllStandardOutput());
qDebug()<
ui.textEdit->setText(Pyresult);
//關閉bash
p->kill();
p->close();
delete p;
//數據處理...
//或者讀取識別結果文本
QFile file("result.txt");
QStringList result;
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
while (!file.atEnd())
{
//按行讀取
QByteArray line = file.readLine();
QString str(line);
result.append(str);
qDebug() << str;
}
file.close();
}
//數據處理...
}