1 Star 4 Fork 3

FelixWang810/Kinect动作捕捉软件

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
MotionCapture.cpp 6.50 KB
一键复制 编辑 原始数据 按行查看 历史
FelixWang810 提交于 2020-09-18 15:11 +08:00 . 功能代码
#include "MotionCapture.h"
#include <QFileDialog>
MotionCapture::MotionCapture(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
this->setFixedSize(700, 435);
ui.ECapFreqNum->setValidator(new QDoubleValidator(0.0, 30.0, 2, this));
ui.ECapTimes->setValidator(new QIntValidator(1, 1000, this));
//ui.ETimeStep->setValidator(new QDoubleValidator(0.0, 5.0, 6, this));
m_CapFreq = 0;
m_CapTimes = 0;
QDir dir;
m_FirstFramePath = dir.currentPath()+"/T000";
m_SkeletonDataPath = dir.currentPath();
m_FirstFramePathK2 = dir.currentPath() + "/K000";
m_SkeletonDataPathK2 = dir.currentPath();
m_FirstFramePathAK = dir.currentPath() + "/K000";
m_SkeletonDataPathAK = dir.currentPath();
ui.ESkeletonDataPath->setText(dir.currentPath());
ui.EFirstFramePath->setText(dir.currentPath() + "/T000");
ui.EFbxFilename->setText("fbx001");
ui.ECapFreqNum->setText("30");
ui.ECapTimes->setText("5");
//ui.ETimeStep->setText("0.5");
m_FbxFilename = "";
//m_TimeStep = "";
ui.LShowCamState->setText("Stop");
ui.LShowGenerationState->setText("No Generation Task");
m_pKinect1 = new Kinect1Func();
m_pKinect2 = new Kinect2Func();
m_pAzureKinect = new AzureKinect();
m_pgenfbx = new GenFbx();
m_pErrorWin = new ErrorWidget(this);
m_pwatcher = new QFutureWatcher<void>;
connect(m_pwatcher, SIGNAL(finished()),this, SLOT(on_finished()));
}
void MotionCapture::ApplySetting()//应用设置
{
m_CapFreq = ui.ECapFreqNum->text().toInt();
m_CapTimes = ui.ECapTimes->text().toInt();
}
void MotionCapture::on_BStartCam_clicked()
{
ApplySetting();
QString foldername = saveCaptureInfo();
QDir dir;
QString folderDir = dir.currentPath();
//removeFolderContent(folderDir);
ui.LShowCamState->setText("Start");
int res;
if (ui.CBCamSelect->currentIndex() == 0)
{
res = m_pKinect1->cameraCapture(30 / m_CapFreq, m_CapFreq*m_CapTimes);
QFile file1(folderDir+"/skeletondata.txt");
file1.copy(foldername + "/skeletondata.txt");
}
else if(ui.CBCamSelect->currentIndex() == 1)
{
res = m_pKinect2->cameraCapture(30 / m_CapFreq, m_CapFreq*m_CapTimes);
QFile file2(folderDir + "/skeletonpoints.txt");
file2.copy(foldername + "/skeletonpoints.txt");
}
else if (ui.CBCamSelect->currentIndex() == 2)
{
res = m_pAzureKinect->cameraCapture(30 / m_CapFreq, m_CapFreq*m_CapTimes);
QFile file3(folderDir + "/skeletonpointsAK.txt");
file3.copy(foldername + "/skeletonpointsAK.txt");
QFile file4(folderDir + "/skeletonquatAK.txt");
file4.copy(foldername + "/skeletonquatAK.txt");
}
ui.LShowCamState->setText("Stop");
if (res != 0)
{
m_pErrorWin->CaptureError();
m_pErrorWin->exec();
}
}
void MotionCapture::on_BStopCam_clicked()
{
if (ui.CBCamSelect->currentIndex() == 0)
{
m_pKinect1->cameraShutDown();
}
else if (ui.CBCamSelect->currentIndex() == 1)
{
m_pKinect2->cameraShutDown();
}
else if (ui.CBCamSelect->currentIndex() == 2)
{
m_pAzureKinect->cameraShutDown();
}
}
void MotionCapture::on_BStartGenerating_clicked()
{
m_future = QtConcurrent::run(this, &MotionCapture::generateFbx);
m_pwatcher->setFuture(m_future);
}
void MotionCapture::on_BOpenFile_clicked()
{
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setWindowTitle(QString::fromLocal8Bit("打开文件"));
fileDialog->setDirectory(".");
fileDialog->setNameFilter(QString::fromLocal8Bit("text(*.txt)"));
fileDialog->setViewMode(QFileDialog::Detail);
if (fileDialog->exec())
{
ui.ESkeletonDataPath->setText(fileDialog->selectedFiles().at(0));
}
}
void MotionCapture::on_finished() //根据返回值,提示是否生成失败
{
if (m_future != 0)
{
m_pErrorWin->GenerationError();
m_pErrorWin->exec();
}
}
int MotionCapture::generateFbx()
{
int res;
ui.LShowGenerationState->setText("In Generating, Please wait");
//m_FirstFramePath = ui.EFirstFramePath->text();
m_FbxFilename = ui.EFbxFilename->text();
//m_TimeStep = ui.ETimeStep->text();
QByteArray ba = m_FbxFilename.toLatin1();
char* fbxFilename = ba.data();
if (ui.CBCamSelect->currentIndex() == 0)
{
ui.EFirstFramePath->setText(m_FirstFramePath);
res = m_pgenfbx->MainFuncK1(m_FirstFramePath.toStdString(), ui.ESkeletonDataPath->text().toStdString(), fbxFilename, 1.0 / ui.ECapFreqNum->text().toFloat());
}
else if(ui.CBCamSelect->currentIndex() == 1)
{
ui.EFirstFramePath->setText(m_FirstFramePathK2);
res = m_pgenfbx->MainFuncK2(m_FirstFramePathK2.toStdString(), ui.ESkeletonDataPath->text().toStdString(), fbxFilename, 1.0 / ui.ECapFreqNum->text().toFloat());
}
else if (ui.CBCamSelect->currentIndex() == 2)
{
ui.EFirstFramePath->setText(m_FirstFramePathAK);
res = m_pgenfbx->MainFuncAK(m_FirstFramePathAK.toStdString(), ui.ESkeletonDataPath->text().toStdString(), fbxFilename, 1.0 / ui.ECapFreqNum->text().toFloat());
}
ui.LShowGenerationState->setText("No Generation Task");
return res;
}
bool MotionCapture::removeFolderContent(const QString &folderDir)//删除目录下的.png
{
QDir dir(folderDir);
QFileInfoList fileList;
QFileInfo curFile;
if (!dir.exists()) { return false; }//文件不存,则返回false
fileList = dir.entryInfoList(QDir::Dirs | QDir::Files
| QDir::Readable | QDir::Writable
| QDir::Hidden | QDir::NoDotAndDotDot
, QDir::Name);
if(fileList.size() > 0)
{
int infoNum = fileList.size();
for (int i = infoNum - 1; i >= 0; i--)
{
curFile = fileList[i];
if (curFile.isFile() && curFile.fileName().right(4)==".png")//如果是.png文件,删除文件
{
QFile fileTemp(curFile.filePath());
fileTemp.remove();
fileList.removeAt(i);
}
}
}
return true;
}
QString MotionCapture::saveCaptureInfo()//生成文件夹
{
QDateTime current_date_time = QDateTime::currentDateTime();
QString current_date = current_date_time.toString("yyyyMMddhhmmss");
QDir dir;
dir.cd(dir.currentPath()+"/");
bool res=dir.mkpath(dir.currentPath() + "/" + current_date);
return dir.currentPath() + "/" + current_date;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/felixwang810/kinect-motion-capture-software.git
git@gitee.com:felixwang810/kinect-motion-capture-software.git
felixwang810
kinect-motion-capture-software
Kinect动作捕捉软件
master

搜索帮助