Skip to content
Snippets Groups Projects
petrack.cpp 179 KiB
Newer Older
/*
 * PeTrack - Software for tracking pedestrians movement in videos
 * Copyright (C) 2010-2020 Forschungszentrum Jülich GmbH,
 * Maik Boltes, Juliane Adrian, Ricardo Martin Brualla, Arne Graf, Paul Häger, Daniel Hillebrand,
 * Deniz Kilic, Paul Lieberenz, Daniel Salden, Tobias Schrödter, Ann Katrin Seemann
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <QtWidgets>
d.kilic's avatar
d.kilic committed
#include <QtOpenGL>
#include <QSignalMapper>

// Added for Qt5 support
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>

#include "stereoItem.h"
#include "stereoWidget.h"
#include "colorMarkerItem.h"
#include "multiColorMarkerItem.h"
#include "colorRangeWidget.h"
#include "colorMarkerWidget.h"
#include "codeMarkerWidget.h"
#include "multiColorMarkerWidget.h"
#include "petrack.h"
#include "control.h"
#include "view.h"
#include "gridItem.h"
#include "imageItem.h"
#include "logoItem.h"
#include "animation.h"
#include "player.h"
#include "calibFilter.h"
#include "autoCalib.h"
#include "recognition.h"
#include "trackerItem.h"
#include "backgroundItem.h"
#include "tracker.h"
#include "trackerReal.h"
#include "cmath"
#ifdef AVI
#include "aviFile.h"
#else
#include "aviFileWriter.h"
#endif
#include "person.h"

#include <time.h>

#include <cstdlib>

#include <iomanip>

#include "opencv2/opencv.hpp"
d.kilic's avatar
d.kilic committed
// Zeitausgabe aktivieren
//#define TIME_MEASUREMENT

//temp muss spaeter herausgenommen werden,
// dient dazu, in anderen dateien um schnell ueber cw->temp1->value() an einstellbare daten zu kommen
Control *cw;

int Petrack::trcVersion = 0;

using namespace::cv;
using namespace std;
d.kilic's avatar
d.kilic committed

// Reihenfolge des anlegens der objekte ist sehr wichtig
Petrack::Petrack()
{
    QIcon icon;
    icon.addFile(":/icon"); // about
    //     icon.addFile(":/icon_small");
    //     icon.addFile(":/icon_smaller");
    icon.addFile(":/icon_smallest"); // window title bar
    setWindowIcon(icon); // QIcon(":/icon")fuer about und icon in windows titel bar top left
    mHeadSize = -1;
    mCmPerPixel = -1;
    mScene = NULL;
    mTracker = NULL;
    mTrackerReal = NULL; // damit beim zeichnen von control mit analysePlot nicht auf einen feheler laeuft
    mStatusLabelFPS = NULL;
    mStatusPosRealHeight = NULL;
    mStatusLabelPosReal = NULL;
    mImageItem = NULL;
    mRecognitionChanged = true;
    mTrackChanged = true;
    mCoordItem = NULL;
    mImage = NULL;
//    mIplImg = NULL;
//    mIplImgFiltered = NULL;
    setLoading(true);
    //     mPrevIplImgFiltered = NULL;
    //     mPrevFrame = -1;

    setAcceptDrops(true);

//    grabKeyboard(); // nimmt alle Keyboard Eingaben entgegen, eintragen in Text-Felder dann nicht mehr moeglich
//    grabMouse(); // nimmt alle MouseEvents eintgegen, Doppelklick etc. dann nicht mehr moeglich

    int space = 2;
    //    setAccessibleName("PeTrack");

    mBrightContrastFilter.disable();
    //     mContrastFilter.disable();
    //     mBrightFilter.disable();
    mBorderFilter.disable();
    mSwapFilter.disable();
    mBackgroundFilter.disable();
    mStereoContext = NULL;
    mCalibFilter = new CalibFilter; // schoener waere erst zu erzeugen, wenn video geladen wird, da sonst bei stereo erst normealer und dann stereo objekt erzeugt wird
    mCalibFilter->disable();        // aber control widget greift schon bei erzeugung auf alle objekte zur einstellung zurueck
    //mCalibFilter.disable(); //enable();

    //mImageBorderSize=0;

    mControlWidget = new Control(this);
    mControlWidget->setFixedWidth(mControlWidget->geometry().width());
    mControlWidget->setMinimumHeight(mControlWidget->geometry().height());
    mControlWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
    //setFixedSize(mControlWidget->geometry().width(),mControlWidget->geometry().height());
    cw =  mControlWidget; // muss spaeter geloescht werden

    mStereoWidget = new StereoWidget(this);
    mStereoWidget->setWindowFlags(Qt::Window);
    mStereoWidget->setWindowTitle("Stereo parameter");
    //mStereoWidget->show();

    mColorRangeWidget = new ColorRangeWidget(this);
    mColorRangeWidget->setWindowFlags(Qt::Window);
    mColorRangeWidget->setWindowTitle("Color range");

    mColorMarkerWidget = new ColorMarkerWidget(this);
    mColorMarkerWidget->setWindowFlags(Qt::Window);
    mColorMarkerWidget->setWindowTitle("Color marker parameter");
    //mColorMarkerWidget->show();

    mCodeMarkerWidget = new CodeMarkerWidget(this);
    mCodeMarkerWidget->setWindowFlags(Qt::Window);
    mCodeMarkerWidget->setWindowTitle("Code marker parameter");
    //mCodeMarkerWidget->show();


    mMultiColorMarkerWidget = new MultiColorMarkerWidget(this);
    mMultiColorMarkerWidget->setWindowFlags(Qt::Window);
    mMultiColorMarkerWidget->setWindowTitle("MultiColor marker parameter");
    //mColorMarkerWidget->show();

    mScene = new QGraphicsScene(this);
d.kilic's avatar
d.kilic committed

    mImageItem = new ImageItem(this); // durch uebergabe von scene wird indirekt ein scene->addItem() aufgerufen
    mControlWidget->setScene(mScene);

    // wird in controll.cpp behandelt!!!
    //     if (mControlWidget->filterBright->checkState() == Qt::Checked)
    //         mBrightFilter.enable();
    //     else //Qt::Unchecked
    //         mBrightFilter.disable();
    //     if (mControlWidget->filterContrast->checkState() == Qt::Checked)
    //         mContrastFilter.enable();
    //     else //Qt::Unchecked
    //         mContrastFilter.disable();
    //     if (mControlWidget->filterContrast->checkState() == Qt::Checked)
    //         mContrastFilter.enable();
    //     else //Qt::Unchecked
    //         mContrastFilter.disable();

    mAnimation = new Animation(this);

    //     mImage = new QImage; // wird erst bei neuer sequenz erstellt, da dort groesse bekannt,
    //      zudem kann so ueber mImage==NULL beginn abgefragt werden
    //     // hier koennte ein Einfuehrungsbild mit logo etc eingeblendet werden
    //     mImage->load(":/logo");
    //     //C:/Dokumente und Einstellungen/Maik Boltes/Eigene Dateien/diss/logo/logo.png
    //     mImageItem->setLogo(mImage);
    //     // so wurde gruene recogniton area zurueckgesetzt:
    //     //mImageItem->setImage(mImage);
    mLogoItem = new LogoItem(this); // durch uebergabe von scene wird indirekt ein scene->addItem() aufgerufen
    mLogoItem->setZValue(6); // groesser heisst weiter oben

    mExtrCalibration.setMainWindow(this);
    //mExtCalibration = new ExtrCalibration(this); // muss vor CoordItem (und GridItem) stehen damit man auf useExtCalib abfragen kann

    mGridItem = new GridItem(this);
    mGridItem->setZValue(2.5); // durch uebergabe von scene wird indirekt ein scene->addItem() aufgerufen

    mCoordItem = new CoordItem(this);
    mCoordItem->setZValue(3); // groesser heisst weiter oben
Loading
Loading full blame...