MovieAnalyzer.h
3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef MOVIEANALYZER_H
#define MOVIEANALYZER_H
#include <QWidget>
#include <QString>
#include <QSize>
#include <QVector>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <armadillo>
#include "VideoFrameProcessor.h"
#include "VideoFrame.h"
#include "Segment.h"
#include "UtteranceTree.h"
#include "SpkDiarMonitor.h"
class MovieAnalyzer: public QWidget
{
Q_OBJECT
public:
MovieAnalyzer(QWidget *parent = 0);
~MovieAnalyzer();
bool extractVideoFrames(const QString &fName);
bool extractShots(const QString &fName, int histoType, int nVBins, int nHBins, int nSBins, int metrics, qreal threshold1, qreal threshold2, int nVBlock, int nHBlock, bool viewProgress = true);
bool labelSimilarShots(QString fName, int histoType, int nVBins, int nHBins, int nSBins, int metrics, qreal maxDist, int windowSize, const QList<qint64> &shotPositions, int nVBlock, int nHBlock, bool viewProgress);
QList<qint64> getTruePositive() const;
bool localSpkDiar(QList<QPair<qint64, qint64>> subBound, QMap<QString, QList<QPair<int, qreal>>> shotPatterns, QMap<QString, QList<QPair<qint64, qint64>>> strictShotPattBound, UtteranceTree::DistType dist, bool norm, UtteranceTree::AgrCrit agr, UtteranceTree::PartMeth partMeth, bool weight, bool sigma, const QString &baseName);
bool localSpkDiarBaseline(QMap<QString, QList<QPair<int, qreal>>> shotPatterns, QList<QPair<qint64, qint64>> subBound, QMap<QString, QList<QPair<int, qreal>>> shotUtterances, QMap<QString, QList<QPair<qint64, qint64>>> strictShotPattBound, const QString &baseName);
bool globalSpkDiar(const QString &baseName);
public slots:
void setSpeakerPartition(QList<QList<int>> partition);
void setDiarData(const arma::mat &E, const arma::mat &Sigma, const arma::mat &W);
void setDiarData(const arma::mat &E, const arma::mat &Sigma, const arma::mat &W, QMap<QString, QList<QPair<qreal, qreal>>> speakers);
void playSpeakers(QList<int> speakers);
signals:
void setResolution(const QSize &resolution);
void setFps(qreal fps);
void appendVideoFrame(int id, qint64 position);
void insertShot(qint64 position, Segment::Source source);
void labelSimShot(qint64 position, int nCamera, Segment::Source source);
void setSpeaker(qint64 start, qint64 end, const QString &speaker, VideoFrame::SpeakerSource source);
void playSegments(QList<QPair<qint64, qint64>> segments);
void setLocalDer(const QString &score);
void setGlobalDer(const QString &score);
private:
bool isNewShot() const;
QVector<cv::Mat> splitImage(const cv::Mat &frame, int nVBlock, int nHBlock);
qreal meanDistance(const QVector<qreal> &distance);
void normalize(UtteranceTree::DistType dist);
QPair<qint64, qint64> adjustSubBoundaries(qint64 subStart, qint64 subEnd, QList<QPair<qint64, qint64>> shotPattBound);
QString retrieveDer(const QString fName);
SpkDiarMonitor *m_treeMonitor;
cv::VideoCapture m_cap;
VideoFrameProcessor *m_processor;
QVector<cv::Mat> m_prevLocHisto;
cv::Mat m_prevGlobHisto;
arma::mat E;
arma::mat CovInv;
arma::mat Sigma;
arma::mat CovW;
QMap<QString, QList<QPair<qreal, qreal>>> m_utterances;
QList<QString> m_speakers;
QString m_baseName;
};
#endif