diff --git a/ECTrainer2/ECTrainer.cpp b/ECTrainer2/ECTrainer.cpp index 37878b2..185a974 100644 --- a/ECTrainer2/ECTrainer.cpp +++ b/ECTrainer2/ECTrainer.cpp @@ -1,13 +1,33 @@ + #include "ECTrainer.h" +#include "ECTrainerGUI.h" +#include "SceneCamera.h" +// �R���X�g���N�^ ECTrainer::ECTrainer() - : _Running(true) + : _pGui(NULL) + , _pSceneCam(NULL) + , _Running(true) { - - + _pGui = new ECTrainerGUI(this); + _pSceneCam = new SceneCamera(this); } +// �f�X�g���N�^ +ECTrainer::~ECTrainer() { + if (_pGui) delete _pGui; + if (_pSceneCam) delete _pSceneCam; +} + +// ������ bool ECTrainer::Init() { - if (!_GUI.Init()) return false; + if (!_pGui->Init()) return false; + return true; +} + +// ���C�����[�v +bool ECTrainer::Loop() { + _pGui->MainLoop(); + return true; } diff --git a/ECTrainer2/ECTrainer.h b/ECTrainer2/ECTrainer.h index f0d5d72..be7c13f 100644 --- a/ECTrainer2/ECTrainer.h +++ b/ECTrainer2/ECTrainer.h @@ -1,16 +1,20 @@ #pragma once -#include "ECTrainerGUI.h" +class ECTrainerGUI; +class SceneCamera; class ECTrainer { private: - ECTrainerGUI _GUI; + ECTrainerGUI* _pGui; + SceneCamera* _pSceneCam; bool _Running; public: ECTrainer(); + ~ECTrainer(); bool Init(); + bool Loop(); bool IsRunning() { return _Running; } - bool Stop() { _Running = false; } + void Stop() { _Running = false; } }; diff --git a/ECTrainer2/ECTrainer2.vcxproj b/ECTrainer2/ECTrainer2.vcxproj index afcbead..c188ef5 100644 --- a/ECTrainer2/ECTrainer2.vcxproj +++ b/ECTrainer2/ECTrainer2.vcxproj @@ -145,13 +145,14 @@ + - + diff --git a/ECTrainer2/ECTrainer2.vcxproj.filters b/ECTrainer2/ECTrainer2.vcxproj.filters index 7d55447..3227260 100644 --- a/ECTrainer2/ECTrainer2.vcxproj.filters +++ b/ECTrainer2/ECTrainer2.vcxproj.filters @@ -24,11 +24,11 @@ ソース ファイル + + ソース ファイル + - - ヘッダー ファイル - ヘッダー ファイル @@ -41,5 +41,8 @@ ヘッダー ファイル + + ヘッダー ファイル + \ No newline at end of file diff --git a/ECTrainer2/ECTrainerGUI.cpp b/ECTrainer2/ECTrainerGUI.cpp index 84a14c1..ba40979 100644 --- a/ECTrainer2/ECTrainerGUI.cpp +++ b/ECTrainer2/ECTrainerGUI.cpp @@ -1,31 +1,92 @@ + +#include "ECTrainer.h" #include "ECTrainerGUI.h" #define CVUI_IMPLEMENTATION #include "cvui.h" +#ifdef _DEBUG +#include +#endif + +// �R���X�g���N�^ +ECTrainerGUI::ECTrainerGUI(ECTrainer* pEct) + :_pEct(pEct) +{ + +} + // ������ bool ECTrainerGUI::Init() { // ���s�‹��̏��擾 GetDisplayInfo(); // GUI�E�C���h�E cvui::init(WIN_MAIN); + _MainFrame.create(cv::Size(640, 400), CV_8UC3); // �h���񎦃E�C���h�E cv::namedWindow(WIN_DISP, cv::WINDOW_NORMAL | cv::WINDOW_OPENGL); if (_Displays.size() > 1) { // �}���`���j�^�̏ꍇ �T�u��ʂŃt���X�N���[���� cv::moveWindow(WIN_DISP, _Displays[1].left, _Displays[1].top); cv::setWindowProperty(WIN_DISP, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN); + _DispFrame.create(cv::Size(_Displays[1].right - _Displays[1].left, + _Displays[1].bottom - _Displays[1].top), CV_8UC3); } else { // �V���O�����j�^�̏ꍇ cv::moveWindow(WIN_DISP, _Displays[0].left, _Displays[0].top); + _DispFrame.create(cv::Size(640, 480), CV_8UC3); } + _Logo = cv::imread("../images/ECTrainerLogo640x91.png"); + _DispBuffer = cv::imread("../images/calib.png"); + return true; } // �C�x���g���[�v -void ECTrainerGUI::MainLoop() { +bool ECTrainerGUI::MainLoop() { + while (_pEct->IsRunning() && cv::getWindowProperty(WIN_MAIN, 0) >= 0) { + // �\���E�C���h�E�t���[������ + _DispFrame = cv::Scalar(0, 0, 0); + cv::Rect roiRect; + if (_DispBuffer.rows * _DispFrame.cols / _DispFrame.rows > _DispBuffer.cols) { + roiRect.width = _DispBuffer.cols * _DispFrame.rows / _DispBuffer.rows; + roiRect.height = _DispFrame.rows; + } else { + roiRect.width = _DispFrame.cols; + roiRect.height = _DispBuffer.rows * _DispFrame.cols / _DispBuffer.cols; + } + roiRect.x = (_DispFrame.cols - roiRect.width) / 2; + roiRect.y = (_DispFrame.rows - roiRect.height) / 2; + cv::Mat roi(_DispFrame, roiRect); + cv::resize(_DispBuffer, roi, roi.size()); + + // ���C���E�C���h�E�t���[������ + _MainFrame = cv::Scalar(49, 52, 49); + cvui::image(_MainFrame, 0, 0, _Logo); + cvui::beginRow(_MainFrame, 10, 100, -1, -1, 10); + cvui::beginColumn(-1, -1, 10); + if (cvui::button("Calibration")) ; + if (cvui::button("Start")); + if (cvui::button("Quit")) _pEct->Stop(); + cvui::endColumn(); + cvui::beginColumn(); + cvui::text("View camera"); + cvui::space(); + //cvui::image(scene); + cvui::endColumn(); + cvui::endRow(); + + + // ��ʕ\�� + cvui::update(); + cv::imshow(WIN_MAIN, _MainFrame); + cv::imshow(WIN_DISP, _DispFrame); + int key = cv::waitKey(1); + if (key == KEY_ESC) _pEct->Stop(); + } + return true; } // �S�f�B�X�v���C�̏����擾 diff --git a/ECTrainer2/ECTrainerGUI.h b/ECTrainer2/ECTrainerGUI.h index 415ce35..6b80cbd 100644 --- a/ECTrainer2/ECTrainerGUI.h +++ b/ECTrainer2/ECTrainerGUI.h @@ -1,23 +1,31 @@ #pragma once #include +#include #include "myOpenCV.h" #include -#ifdef _DEBUG -#include -#endif +class ECTrainer; class ECTrainerGUI { private: - std::vector _Displays; const cv::String WIN_DISP = "ECTrainer Display"; const cv::String WIN_MAIN = "Eye Contact Trainer"; + const int KEY_ESC = 27; + + ECTrainer* _pEct; + std::vector _Displays; + cv::Mat _MainFrame; // ���C���E�C���h�E�t���[�� + cv::Mat _DispFrame; // �\���E�C���h�E�t���[�� + cv::Mat _DispBuffer; // �\������R���e���c + cv::Mat _Logo; void GetDisplayInfo(); static BOOL CALLBACK MonitorEnumProc(HMONITOR hMon, HDC hdcMon, LPRECT lpMon, LPARAM dwDate); + public: + ECTrainerGUI(ECTrainer* ect); bool Init(); - void MainLoop(); + bool MainLoop(); }; diff --git a/ECTrainer2/SceneCamera.cpp b/ECTrainer2/SceneCamera.cpp new file mode 100644 index 0000000..ea41a83 --- /dev/null +++ b/ECTrainer2/SceneCamera.cpp @@ -0,0 +1,36 @@ + +#include +#include + +#include "ECTrainer.h" +#include "SceneCamera.h" + +// �R���X�g���N�^ +SceneCamera::SceneCamera(ECTrainer* pEct) + :_pEct(pEct) +{ + +} + +// ������ +bool SceneCamera::Init() { + _SceneCam.open("rtsp://" ADDR ":8554/live/scene"); + if (!_SceneCam.isOpened()) { + MessageBox(NULL, _T("cannot open camera " ADDR), NULL, 0); + return false; + } + + return true; +} + +// ���[�v +bool SceneCamera::Loop() { + while (_pEct->IsRunning()) { + // �V�[���B�e + cv::Mat scene; + _SceneCam >> scene; + cv::resize(scene, scene, cv::Size(320, 240)); + } + + return true; +} diff --git a/ECTrainer2/SceneCamera.h b/ECTrainer2/SceneCamera.h new file mode 100644 index 0000000..84db5c1 --- /dev/null +++ b/ECTrainer2/SceneCamera.h @@ -0,0 +1,18 @@ +#pragma once + +#include "myOpenCV.h" + +#define ADDR "192.168.71.50" + +class ECTrainer; + +class SceneCamera +{ + ECTrainer* _pEct; + cv::VideoCapture _SceneCam; + +public: + SceneCamera(ECTrainer* pEct); + bool Init(); + bool Loop(); +}; diff --git a/ECTrainer2/main.cpp b/ECTrainer2/main.cpp index 0f6fd25..ff31260 100644 --- a/ECTrainer2/main.cpp +++ b/ECTrainer2/main.cpp @@ -1,5 +1,11 @@ -#include "main.h" +#include +#include +#include "ECTrainer.h" + +#ifdef _DEBUG +#include +#endif #ifdef _DEBUG int main() @@ -7,11 +13,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) #endif { - ECTrainer ectrainer; - if (!ectrainer.Init()) return 1; + ECTrainer ect; + if (!ect.Init()) return 1; + ect.Loop(); -#ifdef _DEBUG - std::cin.get(); -#endif +//#ifdef _DEBUG +// std::cin.get(); +//#endif return 0; } diff --git a/ECTrainer2/main.h b/ECTrainer2/main.h deleted file mode 100644 index b71a784..0000000 --- a/ECTrainer2/main.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include -#include -#include "ECTrainer.h" diff --git a/images/ECTrainerLogo.png b/images/ECTrainerLogo.png new file mode 100644 index 0000000..9ae7c1e --- /dev/null +++ b/images/ECTrainerLogo.png Binary files differ diff --git a/images/ECTrainerLogo640x91.png b/images/ECTrainerLogo640x91.png new file mode 100644 index 0000000..f4c9f54 --- /dev/null +++ b/images/ECTrainerLogo640x91.png Binary files differ diff --git a/images/calib.png b/images/calib.png new file mode 100644 index 0000000..a9cbe26 --- /dev/null +++ b/images/calib.png Binary files differ