Big update - GUI

parent 0c5a98e1
#-------------------------------------------------
#
# Project created by QtCreator 2019-10-10T21:51:08
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = VSSS
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++17
CONFIG += link_pkgconfig
PKGCONFIG += opencv4
SOURCES += \
main.cpp \
mainwindow.cpp \
backend.cpp \
global.cpp
LIBS += -lstdc++fs
HEADERS += \
mainwindow.h \
global.h \
backend.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
This diff is collapsed.
This diff is collapsed.
#ifndef BACKEND_HPP
#define BACKEND_HPP
#include <chrono>
#include <opencv2/opencv.hpp>
extern std::chrono::high_resolution_clock::time_point lastFrame;
double angleBetweenTwoPoints(cv::Point2f p1, cv::Point2f p2);
void startCapture();
void calibration();
void gerenciador();
void getFrame();
void frameMod();
void findBall();
void detectAlly();
void findEnemies();
void estrategia();
#endif // BACKEND_HPP
File added
#include <opencv2/opencv.hpp>
#include "global.h"
#include <mutex>
using namespace std;
using namespace cv;
namespace Global {
int defaultImageHeight;
vector<vector<Point2f>> lastTriangles;
vector<vector<Point2f>> lastAllyFormats;
bool showAllyThreshold = true;
bool showAllyFThreshold = true;
Mutex mtx;
int cameraStatus = 0;
VideoCapture cap;
bool capActive = false;
Mat frame;
Mat correctedFrame;
Mat frameHSV;
Mat thresholdAllyF;
Mat thresholdAllyC;
Mat thresholdBall;
Mat thresholdEnemy;
int frames = 0;
int fps = 0;
bool frameModReady = true;
bool enemyDetectionReady = true;
bool ballDetectionReady = true;
bool allyDetectionReady = true;
bool strategyCompilerReady = true;
int actualTab; ///< Index atual do tab widget
/**
* @defgroup Global
* @brief Constantes e variáveis globais do software
* @addtogroup Global
* @{
* @defgroup Constantes
* @brief Constantes do software
* @addtogroup Constantes
* @{
*/
const double proporcao = 7.5; ///< Proporção do tamanho do campo para píxels, equivale a 1 cm
const int comprimento = 150; ///< Largura do campo em cm
const int altura = 130; ///< Altura do campo em cm
const cv::Point2f marcas[] = {
cv::Point2f(25, 37.5),
cv::Point2f(65, 37.5),
cv::Point2f(105, 37.5),
cv::Point2f(25, 112.5),
cv::Point2f(65, 112.5),
cv::Point2f(105, 112.5)
}; ///< Posição das marcações do campo
const int alturaGol = 40; ///< Altura do gol
const int alturaAG = 70; ///< Altura da área do gol
const int larguraAG = 15; ///< Largura da área do gol
/**
*@}
* @defgroup Bola
* @brief Variáveis utilizadas no reconhecimento da bola
* @addtogroup Bola
* @{
*/
int ballUH = 20; ///< Hue máximo
int ballLH = 9; ///< Hue mínimo
int ballUS = 255; ///< Saturation máximo
int ballLS = 120; ///< Saturation mínimo
int ballUV = 255; ///< Value máximo
int ballLV = 120; ///< Value mínimo
cv::Point2f ballPosition(0, 0);
///@}
/**
* @defgroup Oponentes
* @brief Variáveis usadas no reconhecimento dos oponentes
* @addtogroup Oponentes
* @{
*/
int enemyUH = 60; ///< Hue máximo
int enemyLH = 25; ///< Hue mínimo
int enemyUS = 255; ///< Saturation máximo
int enemyLS = 120; ///< Saturation mínimo
int enemyUV = 255; ///< Value máximo
int enemyLV = 120; ///< Value mínimo
double distanceTolerance = 15; ///< Tolerância de distancia entre pontos para considerar como um robô
vector<cv::Point2f> enemies;
///@}
/**
* @defgroup Aliados
* @brief Vaiáveis de localização dos nossos robôs
* @addtogroup Aliados
* @{
*/
cv::Point2f posRobot1(0,0);
cv::Point2f posRobot2(0,0);
cv::Point2f posRobot3(0,0);
cv::Point2f frenteRobot1(0,0);
cv::Point2f frenteRobot2(0,0);
cv::Point2f frenteRobot3(0,0);
std::vector<cv::Point2f> contornosRobot1;
std::vector<cv::Point2f> contornosRobot2;
std::vector<cv::Point2f> contornosRobot3;
int allyUH = 150; ///< Hue máximo
int allyLH = 100; ///< Hue mínimo
int allyUS = 255; ///< Saturation máximo
int allyLS = 120; ///< Saturation mínimo
int allyUV = 255; ///< Value máximo
int allyLV = 120; ///< Value mínimo
int allyFUH = 180; ///< Hue máximo
int allyFLH = 146; ///< Hue mínimo
int allyFUS = 255; ///< Saturation máximo
int allyFLS = 120; ///< Saturation mínimo
int allyFUV = 255; ///< Value máximo
int allyFLV = 120; ///< Value mínimo
int DISTANCE = 15;
/**
* @}
* @defgroup Calibração
* @brief Variáveis usadas na calibração da câmera
* @addtogroup Calibração
* @{
*/
std::vector<cv::Point2d> corners(4); ///< Cantos do campo
cv::Point2d midLeft; ///< Centro esquerdo do campo
cv::Point2d midRight; ///< Centro direito do campo
double rotation = 0; ///< Angulo de rotação do campo
int confStatus = 0; ///< Estado atual da configuração
bool confConcluded = false; ///< Diz se a configuração foi terminada ou não
cv::Mat homography; ///< Homografia para correção de perspectiva
std::string calibrationFramesPath = "/home/kramer/frames"; ///< Caminho para os frames de calibração
std::vector<std::vector<cv::Point3f>> object_points; ///<Variável utilizada pela função de calibração
std::vector<std::vector<cv::Point2f>> image_points; ///<Variável utilizada pela função de calibração
cv:: Mat intrinsic = cv::Mat(3, 3, CV_32FC1); ///<Variável utilizada pela função de calibração
cv::Mat distCoeffs; ///<Variável utilizada pela função de calibração
std::vector<cv::Mat> rvecs; ///<Variável utilizada pela função de calibração
std::vector<cv::Mat> tvecs; ///<Variável utilizada pela função de calibração
///@}
///@}
}
#ifndef GLOBAL_H
#define GLOBAL_H
#include <opencv2/opencv.hpp>
#include <mutex>
using namespace std;
using namespace cv;
namespace Global {
extern int defaultImageHeight;
extern vector<vector<Point2f>> lastTriangles;
extern vector<vector<Point2f>> lastAllyFormats;
extern bool showAllyThreshold;
extern bool showAllyFThreshold;
extern Mutex mtx;
extern int cameraStatus; ///< Estado da câmera atua, sendo 0 o frame original, 1 o frame recortado e 2 o frame com todas as marcações da visão
extern bool capActive; ///< Determina se está sendo capturada imagem da câmera
extern VideoCapture cap;
extern Mat frame;
extern Mat correctedFrame;
extern Mat frameHSV;
extern Mat thresholdAllyF;
extern Mat thresholdAllyC;
extern Mat thresholdBall;
extern Mat thresholdEnemy;
extern int frames;
extern int fps;
extern bool frameModReady;
extern bool enemyDetectionReady;
extern bool ballDetectionReady;
extern bool allyDetectionReady;
extern bool strategyCompilerReady;
extern int actualTab; ///< Index atual do tab widget
/**
* @defgroup Global
* @brief Constantes e variáveis globais do software
* @addtogroup Global
* @{
* @defgroup Constantes
* @brief Constantes do software
* @addtogroup Constantes
* @{
*/
extern const double proporcao; ///< Proporção do tamanho do campo para píxels, equivale a 1 cm
extern const int comprimento; ///< Largura do campo em cm
extern const int altura; ///< Altura do campo em cm
extern const cv::Point2f marcas[]; ///< Posição das marcações do campo
extern const int alturaGol; ///< Altura do gol
extern const int alturaAG; ///< Altura da área do gol
extern const int larguraAG; ///< Largura da área do gol
/**
*@}
* @defgroup Bola
* @brief Variáveis utilizadas no reconhecimento da bola
* @addtogroup Bola
* @{
*/
extern int ballUH; ///< Hue máximo
extern int ballLH; ///< Hue mínimo
extern int ballUS; ///< Saturation máximo
extern int ballLS; ///< Saturation mínimo
extern int ballUV; ///< Value máximo
extern int ballLV; ///< Value mínimo
extern cv::Point2f ballPosition;
///@}
/**
* @defgroup Oponentes
* @brief Variáveis usadas no reconhecimento dos oponentes
* @addtogroup Oponentes
* @{
*/
extern int enemyUH; ///< Hue máximo
extern int enemyLH; ///< Hue mínimo
extern int enemyUS; ///< Saturation máximo
extern int enemyLS; ///< Saturation mínimo
extern int enemyUV; ///< Value máximo
extern int enemyLV; ///< Value mínimo
extern double distanceTolerance; ///< Tolerância de distancia entre pontos para considerar como um robô
extern vector<cv::Point2f> enemies;
///@}
/**
* @defgroup Aliados
* @brief Vaiáveis de localização dos nossos robôs
* @addtogroup Aliados
* @{
*/
extern cv::Point2f posRobot1;
extern cv::Point2f posRobot2;
extern cv::Point2f posRobot3;
extern cv::Point2f frenteRobot1;
extern cv::Point2f frenteRobot2;
extern cv::Point2f frenteRobot3;
extern std::vector<cv::Point2f> contornosRobot1;
extern std::vector<cv::Point2f> contornosRobot2;
extern std::vector<cv::Point2f> contornosRobot3;
extern int allyUH; ///< Hue máximo
extern int allyLH; ///< Hue mínimo
extern int allyUS; ///< Saturation máximo
extern int allyLS; ///< Saturation mínimo
extern int allyUV; ///< Value máximo
extern int allyLV; ///< Value mínimo
extern int allyFUH; ///< Hue máximo
extern int allyFLH; ///< Hue mínimo
extern int allyFUS; ///< Saturation máximo
extern int allyFLS; ///< Saturation mínimo
extern int allyFUV; ///< Value máximo
extern int allyFLV; ///< Value mínimo
extern int DISTANCE;
/**
* @}
* @defgroup Calibração
* @brief Variáveis usadas na calibração da câmera
* @addtogroup Calibração
* @{
*/
extern std::vector<cv::Point2d> corners; ///< Cantos do campo
extern cv::Point2d midLeft; ///< Centro esquerdo do campo
extern cv::Point2d midRight; ///< Centro direito do campo
extern double rotation; ///< Angulo de rotação do campo
extern int confStatus; ///< Estado atual da configuração
extern bool confConcluded; ///< Diz se a configuração foi terminada ou não
extern cv::Mat homography; ///< Homografia para correção de perspectiva
extern std::string calibrationFramesPath; ///< Caminho para os frames de calibração
extern std::vector<std::vector<cv::Point3f>> object_points; ///<Variável utilizada pela função de calibração
extern std::vector<std::vector<cv::Point2f>> image_points; ///<Variável utilizada pela função de calibração
extern cv:: Mat intrinsic; ///<Variável utilizada pela função de calibração
extern cv::Mat distCoeffs; ///<Variável utilizada pela função de calibração
extern std::vector<cv::Mat> rvecs; ///<Variável utilizada pela função de calibração
extern std::vector<cv::Mat> tvecs; ///<Variável utilizada pela função de calibração
///@}
///@}
}
#endif // GLOBAL_H
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
This diff is collapsed.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btnExit_clicked();
void on_btnCamera_clicked();
void on_btnStart_clicked();
void setUiImage();
private:
Ui::MainWindow *ui;
protected:
void closeEvent(QCloseEvent *event) override;
};
#endif // MAINWINDOW_H
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment