Skip to content

Commit

Permalink
Добавил документацию
Browse files Browse the repository at this point in the history
  • Loading branch information
DmitryNekrasov committed Jun 19, 2018
1 parent 1fed862 commit ea7a280
Show file tree
Hide file tree
Showing 8 changed files with 278 additions and 0 deletions.
21 changes: 21 additions & 0 deletions defaultsmarttracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,35 @@

#include <opencv2/tracking/tracking.hpp>

/*!
* Базовая реализация интерфейса трекинга
* Обёртка над алгоритмами трекинга из OpenCV
* \brief The DefaultSmartTracker class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class DefaultSmartTracker : public SmartTracker
{
public:
DefaultSmartTracker(std::string algorithm_name);

virtual ~DefaultSmartTracker() = default;

/*!
* Инициализирует трекер
* \brief init
* \param frame Кадр
* \param roi Область интереса
*/
virtual void init(const cv::Mat& frame, const cv::Rect2d& roi) override;

/*!
* Обновляет трекер
* \brief update
* \param frame Кадр
* \param roi Область интереса
*/
virtual void update(const cv::Mat& frame, cv::Rect2d& roi) override;

private:
Expand Down
101 changes: 101 additions & 0 deletions magicsmarttracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,45 @@

#include "smarttracker.h"

/*!
* Реализация алгоритма трекинга с обработкой препятствий
* \brief The MagicSmartTracker class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class MagicSmartTracker : public SmartTracker
{
public:
MagicSmartTracker(bool scale_invariance);

virtual ~MagicSmartTracker() = default;

/*!
* Инициализирует трекер
* \brief init
* \param frame Кадр
* \param roi Область интереса
*/
virtual void init(const cv::Mat& frame, const cv::Rect2d& roi) override;

/*!
* Обновляет трекер
* \brief update
* \param frame Кадр
* \param roi Область интереса
*/
virtual void update(const cv::Mat& frame, cv::Rect2d& roi) override;

private:

/*!
* Реализация умной очереди - буфера для алгоритма обработки препятствий
* \brief The SmartQueue class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class SmartQueue
{
private:
Expand All @@ -29,6 +57,11 @@ class MagicSmartTracker : public SmartTracker
counter(0)
{}

/*!
* Кладёт патч в очередь
* \brief put
* \param mat Патч
*/
void put(cv::Mat mat) {
mats[index] = mat;
index = (index + 1) % N;
Expand All @@ -37,10 +70,20 @@ class MagicSmartTracker : public SmartTracker
}
}

/*!
* Достаёт патч из очереди
* \brief get
* \return Патч
*/
cv::Mat get() {
return mats[(index + 1) % N];
}

/*!
* Проверяет заполненность очереди
* \brief isFull
* \return true, если очередь заполнена, иначе false
*/
bool isFull() {
return counter == N;
}
Expand Down Expand Up @@ -71,11 +114,69 @@ class MagicSmartTracker : public SmartTracker
SmartQueue m_SmartQueue;

private:
/*!
* Возвращает патч с извлечёнными особенностями
* \brief getFeatures
* \param frame Кадр
* \param initHanningMats Признак построения окна Ханна для сглаживания ядра
* \param scale_adjust Регулирование масштаба
* \return Патч с извлечёнными особенностями
*/
cv::Mat getFeatures(const cv::Mat& frame, bool initHanningMats, float scale_adjust = 1.0f);

/*!
* Создаёт окно Ханна
* Функция вызывается только на первом кадре
* \brief createHanningMats
*/
void createHanningMats();

/*!
* Создаёт пик Гаусса
* Функция вызывается только на первом кадре
* \brief createGaussianPeak
* \param size_y Размер ядра по горизонтали
* \param size_x Размер ядра по вертикали
* \return Ядро
*/
cv::Mat createGaussianPeak(int size_y, int size_x);

/*!
* Обучает трекер на одном изображении
* \brief train
* \param x Матрица - целевой объект трекинга
* \param train_interp_factor Фактор линейной интерполяции
*/
void train(cv::Mat x, double train_interp_factor);

/*!
* Вычисляет ядро Гаусса для всех относительных сдвигов между входными изображениями x1 и x2
* \brief gaussianCorrelation
* \param x1 Изображение x1
* \param x2 Изображение x2
* \return Ядро Гаусса
*/
cv::Mat gaussianCorrelation(cv::Mat x1, cv::Mat x2);

/*!
* Обнаруживает объект на текущем кадре
* \brief detect
* \param z Целевой объект трекинга с предыдущего кадра
* \param x Целевой объект трекинга с текущего кадра
* \param peak_value оценка обнаружения
* \return Положение объекта на кадре
*/
cv::Point2f detect(cv::Mat z, cv::Mat x, float& peak_value);

/*!
* Вычисляет субпиксельный пик для одного измерения
* Вспомогательный метод для метода обнаружения
* Необходим для вычисления положения объекта на новом кадре
* \brief subPixelPeak
* \param left Положение слева
* \param center Положение в центре
* \param right Положение справа
* \return Новое положением(смещение) объекта
*/
float subPixelPeak(float left, float center, float right);
};
20 changes: 20 additions & 0 deletions smarttracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,33 @@

#include <opencv2/opencv.hpp>

/*!
* Интерфейс трекера
* \brief The SmartTracker class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class SmartTracker
{
public:
SmartTracker() {}

virtual ~SmartTracker() = default;

/*!
* Инициализирует трекер
* \brief init
* \param frame Кадр
* \param roi Область интереса
*/
virtual void init(const cv::Mat& frame, const cv::Rect2d& roi) = 0;

/*!
* Обновляет трекер
* \brief update
* \param frame Кадр
* \param roi Область интереса
*/
virtual void update(const cv::Mat& frame, cv::Rect2d& roi) = 0;
};
37 changes: 37 additions & 0 deletions trackerrunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,53 @@

#include "smarttracker.h"

/*!
* Класс для запуска заданного алгоритма трекинга на заданном видеопотоке
* \brief The TrackerRunner class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class TrackerRunner
{
public:
TrackerRunner(std::unique_ptr<VideoStream> video_stream);

public:
/*!
* Обновление трекеров
* \brief update
*/
void update();

/*!
* Возвращает кадр, сконвертированный в QImage
* \brief getFrameAsQImage
* \return Кадр в формате QImage
*/
QImage getFrameAsQImage();

/*!
* Проверяет, остановлен ли видеопоток
* \brief isFinished
* \return Признак остановки
*/
bool isFinished();

/*!
* Возвращает процент воспроизведённого видеопотока
* \brief getPercentageOfVideo
* \return Процент воспроизведённого видеопотока
*/
double getPercentageOfVideo();

/*!
* Устанавливает параметры, необходимые трекерам
* \brief setParams
* \param rois Области интереса
* \param tracker_type Тип трекера
* \param scale_invariance Признак инвариантности к масштабу
*/
void setParams(std::vector<cv::Rect2d> rois, int tracker_type, bool scale_invariance);

private:
Expand Down
24 changes: 24 additions & 0 deletions videostream.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

#include <opencv2/core/core.hpp>

/*!
* Интерфейс видеопотока
* \brief The VideoStream class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class VideoStream
{
public:
Expand All @@ -15,7 +22,24 @@ class VideoStream

virtual ~VideoStream() = default;

/*!
* Возвращает следующий кадр из видеопотока
* \brief nextFrame
* \return Кадр
*/
virtual cv::Mat nextFrame() = 0;

/*!
* Проверяет наличие следующего кадра в видеопотоке
* \brief hasNext
* \return Признак наличия следующего кадра
*/
virtual bool hasNext() = 0;

/*!
* Возвращает процент воспроизведённого видеопотока
* \brief getPercentageOfVideo
* \return Процент воспроизведённого видеопотока
*/
virtual double getPercentageOfVideo() = 0;
};
25 changes: 25 additions & 0 deletions videostreamfromcamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@

#include "videostream.h"

/*!
* Реализация интерфейса видеопотока
* Видеопоток с камеры
* \brief The VideoStream class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class VideoStreamFromCamera : public VideoStream
{
public:
Expand All @@ -17,8 +25,25 @@ class VideoStreamFromCamera : public VideoStream

virtual ~VideoStreamFromCamera() override = default;

/*!
* Возвращает следующий кадр из видеопотока
* \brief nextFrame
* \return Кадр
*/
virtual cv::Mat nextFrame() override;

/*!
* Проверяет наличие следующего кадра в видеопотоке
* \brief hasNext
* \return Признак наличия следующего кадра
*/
virtual bool hasNext() override;

/*!
* Возвращает процент воспроизведённого видеопотока
* \brief getPercentageOfVideo
* \return Процент воспроизведённого видеопотока
*/
virtual double getPercentageOfVideo() override;

private:
Expand Down
25 changes: 25 additions & 0 deletions videostreamfromimagesequence.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@

namespace bfs = boost::filesystem;

/*!
* Реализация интерфейса видеопотока
* Видеопоток из последовательности изображений
* \brief The VideoStream class
* \author Dmitry Nekrasov
* \version 0.1
* \date Июнь 2018
*/
class VideoStreamFromImageSequence : public VideoStream
{
public:
Expand All @@ -23,8 +31,25 @@ class VideoStreamFromImageSequence : public VideoStream

~VideoStreamFromImageSequence() override = default;

/*!
* Возвращает следующий кадр из видеопотока
* \brief nextFrame
* \return Кадр
*/
virtual cv::Mat nextFrame() override;

/*!
* Проверяет наличие следующего кадра в видеопотоке
* \brief hasNext
* \return Признак наличия следующего кадра
*/
virtual bool hasNext() override;

/*!
* Возвращает процент воспроизведённого видеопотока
* \brief getPercentageOfVideo
* \return Процент воспроизведённого видеопотока
*/
virtual double getPercentageOfVideo() override;

private:
Expand Down
Loading

0 comments on commit ea7a280

Please sign in to comment.