Blame view

MovieAnalyzer.h 3.14 KB
3f2992b2c   bostx   V1.0
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