#include #include #include #include "Convert.h" #include "MovieMonitor.h" #include using namespace std; using namespace cv; MovieMonitor::MovieMonitor(QWidget *parent) : QWidget(parent) { int windowWidth(480); m_histoMonitor = new HistoMonitor; m_segmentMonitor = new SegmentMonitor; m_speakersMonitor = new SpeakersMonitor; m_spkDiarMonitor = new SpkDiarMonitor; m_scrollArea = new QScrollArea; m_scrollArea->setWidget(m_segmentMonitor); m_scrollArea->setFixedSize(windowWidth, 150); m_segmentSlider = new QSlider(Qt::Horizontal); m_segmentSlider->setMinimum(windowWidth); m_segmentSlider->setMaximum(200000); m_segmentSlider->setValue(75000); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(m_histoMonitor); layout->addWidget(m_segmentSlider); layout->addWidget(m_scrollArea); layout->addWidget(m_speakersMonitor); layout->addWidget(m_spkDiarMonitor); setLayout(layout); m_histoMonitor->hide(); m_segmentSlider->hide(); m_scrollArea->hide(); m_spkDiarMonitor->hide(); connect(this, SIGNAL(grabSpokenFrame(qint64, const QString &, const QString &)), m_segmentMonitor, SLOT(processSpokenFrame(qint64, const QString &, const QString &))); connect(this, SIGNAL(grabShot(Segment *)), m_segmentMonitor, SLOT(processShot(Segment *))); connect(this, SIGNAL(segmentationGrabbed()), m_segmentMonitor, SLOT(segmentationRetrieved())); connect(this, SIGNAL(updatePosition(qint64)), m_segmentMonitor, SLOT(positionChanged(qint64))); connect(this, SIGNAL(updateDuration(qint64)), m_segmentMonitor, SLOT(updateDuration(qint64))); connect(m_segmentSlider, SIGNAL(valueChanged(int)), m_segmentMonitor, SLOT(setWidth(int))); connect(this, SIGNAL(speakersRetrieved(QList)), m_speakersMonitor, SLOT(speakersRetrieved(QList))); connect(this, SIGNAL(updatePosition(qint64)), m_speakersMonitor, SLOT(positionChanged(qint64))); connect(m_segmentMonitor, SIGNAL(playSegments(QList>)), this, SLOT(playSegments(QList>))); connect(m_segmentMonitor, SIGNAL(setSpeaker(qint64, qint64, const QString &, VideoFrame::SpeakerSource)), this, SLOT(setSpeaker(qint64, qint64, const QString &, VideoFrame::SpeakerSource))); connect(m_segmentMonitor, SIGNAL(resetSpeaker(qint64, qint64, qint64, qint64, bool, VideoFrame::SpeakerSource)), this, SLOT(resetSpeaker(qint64, qint64, qint64, qint64, bool, VideoFrame::SpeakerSource))); connect(this, SIGNAL(initDiarData(const arma::mat &, const arma::mat &, const arma::mat)), m_spkDiarMonitor, SLOT(setDiarData(const arma::mat &, const arma::mat &, const arma::mat))); connect(m_spkDiarMonitor, SIGNAL(playSub(QList)), this, SLOT(playSub(QList))); connect(this, SIGNAL(releasePosition(bool)), m_spkDiarMonitor, SLOT(releasePosition(bool))); } /////////// // slots // /////////// void MovieMonitor::showHisto(bool dispHist) { if (dispHist) { m_histoMonitor->show(); connect(this, SIGNAL(processMat(const cv::Mat &)), m_histoMonitor, SLOT(processMat(const cv::Mat &))); } else { m_histoMonitor->hide(); disconnect(this, SIGNAL(processMat(const cv::Mat &)), m_histoMonitor, SLOT(processMat(const cv::Mat &))); } } void MovieMonitor::processFrame(QVideoFrame frame) { Mat bgrMat = Convert::fromYuvToBgrMat(frame); emit processMat(bgrMat); } void MovieMonitor::viewSegmentation(bool checked, bool annot) { if (checked || annot) { m_segmentMonitor->setWidth(m_segmentSlider->value()); m_segmentMonitor->setAnnotMode(annot); m_segmentSlider->show(); m_scrollArea->show(); } else { m_segmentMonitor->reset(); m_scrollArea->hide(); m_segmentSlider->hide(); } } void MovieMonitor::viewSpeakers(bool checked) { if (checked) m_speakersMonitor->show(); else m_speakersMonitor->hide(); } void MovieMonitor::viewUtteranceTree(bool checked) { if (checked) { connect(this, SIGNAL(getCurrentPattern(const QList> &)), m_spkDiarMonitor, SLOT(getCurrentPattern(const QList> &))); connect(this, SIGNAL(getPatternFirstShot(const QList> &)), m_spkDiarMonitor, SLOT(getPatternFirstShot(const QList> &))); connect(this, SIGNAL(getPatternSecondShot(const QList> &)), m_spkDiarMonitor, SLOT(getPatternSecondShot(const QList> &))); connect(this, SIGNAL(currentSubtitle(int)), m_spkDiarMonitor, SLOT(currentSubtitle(int))); m_spkDiarMonitor->show(); } else { disconnect(this, SIGNAL(getCurrentPattern(const QList> &)), m_spkDiarMonitor, SLOT(getCurrentPattern(const QList> &))); disconnect(this, SIGNAL(getPatternFirstShot(const QList> &)), m_spkDiarMonitor, SLOT(getPatternFirstShot(const QList> &))); disconnect(this, SIGNAL(getPatternSecondShot(const QList> &)), m_spkDiarMonitor, SLOT(getPatternSecondShot(const QList> &))); disconnect(this, SIGNAL(currentSubtitle(int)), m_spkDiarMonitor, SLOT(currentSubtitle(int))); m_spkDiarMonitor->hide(); } } void MovieMonitor::setDiarData(const arma::mat &E, const arma::mat &Sigma, const arma::mat &W) { emit initDiarData(E, Sigma, W); } void MovieMonitor::grabCurrentPattern(const QList> &subFeatures) { emit getCurrentPattern(subFeatures); } void MovieMonitor::grabPatternFirstShot(const QList> &subFeatures) { emit getPatternFirstShot(subFeatures); } void MovieMonitor::grabPatternSecondShot(const QList> &subFeatures) { emit getPatternSecondShot(subFeatures); } void MovieMonitor::getShot(Segment *shot) { emit grabShot(shot); } void MovieMonitor::segmentationRetrieved() { emit segmentationGrabbed(); } void MovieMonitor::speakersGrabbed(QList speakers) { emit speakersRetrieved(speakers); } void MovieMonitor::getSpokenFrame(qint64 position, const QString &text, const QString &speaker) { emit grabSpokenFrame(position, text, speaker); } void MovieMonitor::positionChanged(qint64 position) { m_scrollArea->horizontalScrollBar()->setValue(position * m_segmentMonitor->getRatio() - m_scrollArea->width() / 2); emit updatePosition(position); } void MovieMonitor::playSegments(QList> utterances) { emit playbackSegments(utterances); } void MovieMonitor::durationChanged(qint64 duration) { emit updateDuration(duration); } void MovieMonitor::setSpeaker(qint64 start, qint64 end, const QString &speaker, VideoFrame::SpeakerSource source) { emit newSpeaker(start, end, speaker, source); } void MovieMonitor::resetSpeaker(qint64 prevStart, qint64 prevEnd, qint64 start, qint64 end, bool resetSub, VideoFrame::SpeakerSource source) { emit renewSpeaker(prevStart, prevEnd, start, end, resetSub, source); } void MovieMonitor::playSub(QList utter) { emit playSubtitle(utter); } void MovieMonitor::currSubtitle(int subIdx) { emit currentSubtitle(subIdx); } void MovieMonitor::releasePos(bool released) { emit releasePosition(released); }