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