Compare commits
5 Commits
feature/ca
...
feature/re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5939f7702 | ||
|
|
2cec8e9a62 | ||
|
|
820c5a2eb0 | ||
|
|
942ddf24d8 | ||
|
|
1f2258bc01 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -428,6 +428,4 @@ FodyWeavers.xsd
|
|||||||
**/docs/*
|
**/docs/*
|
||||||
**/doc/*
|
**/doc/*
|
||||||
|
|
||||||
**/pose_iter_160000.caffemodel
|
|
||||||
|
|
||||||
# End of https://www.toptal.com/developers/gitignore/api/c++,visualstudio,visualstudiocode,opencv
|
# End of https://www.toptal.com/developers/gitignore/api/c++,visualstudio,visualstudiocode,opencv
|
||||||
|
|||||||
0
gameoverScene.cpp
Normal file
0
gameoverScene.cpp
Normal file
0
gameoverScene.h
Normal file
0
gameoverScene.h
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,31 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
|
||||||
#include "../entities/entity.h"
|
|
||||||
|
|
||||||
namespace collision
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This structure represents a collision box inside the world.
|
|
||||||
*
|
|
||||||
* center_pos: The center position of the collision box
|
|
||||||
* size: The size in each axis of the collision box
|
|
||||||
*/
|
|
||||||
struct Box
|
|
||||||
{
|
|
||||||
glm::vec3 center_pos;
|
|
||||||
glm::vec3 size;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure represents a collision between 2 entities
|
|
||||||
*
|
|
||||||
* entity1: The first entity
|
|
||||||
* entity2: The second entity
|
|
||||||
*/
|
|
||||||
struct Collision
|
|
||||||
{
|
|
||||||
entities::Entity& entity1;
|
|
||||||
entities::Entity& entity2;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#include "collision_handler.h"
|
|
||||||
|
|
||||||
namespace collision
|
|
||||||
{
|
|
||||||
void CheckCollisions(std::vector<entities::CollisionEntity*>& entities)
|
|
||||||
{
|
|
||||||
if (entities.size() == 2)
|
|
||||||
{
|
|
||||||
if (entities[0]->IsColliding(*entities[1]))
|
|
||||||
{
|
|
||||||
collision::Collision c = { *entities[0], *entities[1] };
|
|
||||||
entities[0]->OnCollide(c);
|
|
||||||
entities[1]->OnCollide(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < entities.size() - 2; i++)
|
|
||||||
{
|
|
||||||
entities::CollisionEntity* entity = entities[i];
|
|
||||||
|
|
||||||
for (int j = i + 1; i < entities.size() - 1; j++)
|
|
||||||
{
|
|
||||||
entities::CollisionEntity* entity2 = entities[j];
|
|
||||||
|
|
||||||
if (entity == entity2)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity->IsColliding(*entity2))
|
|
||||||
{
|
|
||||||
collision::Collision c = { *entity, *entity2 };
|
|
||||||
entity->OnCollide(c);
|
|
||||||
entity2->OnCollide(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "../entities/collision_entity.h"
|
|
||||||
#include "collision.h"
|
|
||||||
|
|
||||||
namespace collision
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* @brief: This function will check all the collision entities for
|
|
||||||
* collisions and call the OnCollide function when a entity collides.
|
|
||||||
*
|
|
||||||
* @param entities: A list with all the collision entities.
|
|
||||||
*/
|
|
||||||
void CheckCollisions(std::vector<entities::CollisionEntity*>& entities);
|
|
||||||
}
|
|
||||||
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
namespace computervision
|
namespace computervision
|
||||||
{
|
{
|
||||||
|
|
||||||
FingerCount::FingerCount(void) {
|
FingerCount::FingerCount(void) {
|
||||||
color_blue = Scalar(255, 0, 0);
|
color_blue = Scalar(255, 0, 0);
|
||||||
color_green = Scalar(0, 255, 0);
|
color_green = Scalar(0, 255, 0);
|
||||||
@@ -36,6 +35,9 @@ namespace computervision
|
|||||||
if (input_image.channels() != 1)
|
if (input_image.channels() != 1)
|
||||||
return contours_image;
|
return contours_image;
|
||||||
|
|
||||||
|
vector<vector<Point>> contours;
|
||||||
|
vector<Vec4i> hierarchy;
|
||||||
|
|
||||||
findContours(input_image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
|
findContours(input_image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
|
||||||
|
|
||||||
// we need at least one contour to work
|
// we need at least one contour to work
|
||||||
@@ -43,7 +45,7 @@ namespace computervision
|
|||||||
return contours_image;
|
return contours_image;
|
||||||
|
|
||||||
// find the biggest contour (let's suppose it's our hand)
|
// find the biggest contour (let's suppose it's our hand)
|
||||||
biggest_contour_index = -1;
|
int biggest_contour_index = -1;
|
||||||
double biggest_area = 0.0;
|
double biggest_area = 0.0;
|
||||||
|
|
||||||
for (int i = 0; i < contours.size(); i++) {
|
for (int i = 0; i < contours.size(); i++) {
|
||||||
@@ -149,21 +151,9 @@ namespace computervision
|
|||||||
drawVectorPoints(frame, filtered_finger_points, color_yellow, false);
|
drawVectorPoints(frame, filtered_finger_points, color_yellow, false);
|
||||||
putText(frame, to_string(filtered_finger_points.size()), center_bounding_rect, FONT_HERSHEY_PLAIN, 3, color_purple);
|
putText(frame, to_string(filtered_finger_points.size()), center_bounding_rect, FONT_HERSHEY_PLAIN, 3, color_purple);
|
||||||
|
|
||||||
amount_of_fingers = filtered_finger_points.size();
|
|
||||||
|
|
||||||
return contours_image;
|
return contours_image;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FingerCount::DrawHandContours(Mat& image)
|
|
||||||
{
|
|
||||||
drawContours(image, contours, biggest_contour_index, color_green, 2, 8, hierarchy);
|
|
||||||
}
|
|
||||||
|
|
||||||
int FingerCount::getAmountOfFingers()
|
|
||||||
{
|
|
||||||
return amount_of_fingers;
|
|
||||||
}
|
|
||||||
|
|
||||||
double FingerCount::findPointsDistance(Point a, Point b) {
|
double FingerCount::findPointsDistance(Point a, Point b) {
|
||||||
Point difference = a - b;
|
Point difference = a - b;
|
||||||
return sqrt(difference.ddot(difference));
|
return sqrt(difference.ddot(difference));
|
||||||
|
|||||||
@@ -24,22 +24,7 @@ namespace computervision
|
|||||||
*/
|
*/
|
||||||
Mat findFingersCount(Mat input_image, Mat frame);
|
Mat findFingersCount(Mat input_image, Mat frame);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief gets the currently held-up finger count.
|
|
||||||
*
|
|
||||||
* @return the currently held-up finger count
|
|
||||||
*/
|
|
||||||
int getAmountOfFingers();
|
|
||||||
|
|
||||||
void DrawHandContours(Mat& image);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
int biggest_contour_index;
|
|
||||||
vector<vector<Point>> contours;
|
|
||||||
vector<Vec4i> hierarchy;
|
|
||||||
|
|
||||||
|
|
||||||
// colors to use
|
// colors to use
|
||||||
Scalar color_blue;
|
Scalar color_blue;
|
||||||
Scalar color_green;
|
Scalar color_green;
|
||||||
@@ -49,8 +34,6 @@ namespace computervision
|
|||||||
Scalar color_yellow;
|
Scalar color_yellow;
|
||||||
Scalar color_purple;
|
Scalar color_purple;
|
||||||
|
|
||||||
int amount_of_fingers;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief finds the distance between 2 points.
|
* @brief finds the distance between 2 points.
|
||||||
*
|
*
|
||||||
@@ -123,7 +106,5 @@ namespace computervision
|
|||||||
* @param with_numbers if the numbers should be drawn with the points
|
* @param with_numbers if the numbers should be drawn with the points
|
||||||
*/
|
*/
|
||||||
void drawVectorPoints(Mat image, vector<Point> points, Scalar color, bool with_numbers);
|
void drawVectorPoints(Mat image, vector<Point> points, Scalar color, bool with_numbers);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
|
|
||||||
#include "HandDetectRegion.h"
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
|
|
||||||
HandDetectRegion::HandDetectRegion(std::string id,int x_pos, int y_pos, int width, int height)
|
|
||||||
{
|
|
||||||
region_id = id;
|
|
||||||
start_x_pos = x_pos;
|
|
||||||
start_y_pos = y_pos;
|
|
||||||
region_width = width;
|
|
||||||
region_height = height;
|
|
||||||
hand_mask_generated = false;
|
|
||||||
hand_present = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandDetectRegion::DetectHand(cv::Mat& camera_frame)
|
|
||||||
{
|
|
||||||
Mat input_frame = GenerateHandMaskSquare(camera_frame);
|
|
||||||
frame_out = input_frame.clone();
|
|
||||||
|
|
||||||
// detect skin color
|
|
||||||
skin_detector.drawSkinColorSampler(camera_frame,start_x_pos,start_y_pos,region_width,region_height);
|
|
||||||
|
|
||||||
// remove background from image
|
|
||||||
foreground = background_remover.getForeground(input_frame);
|
|
||||||
|
|
||||||
// detect the hand contours
|
|
||||||
handMask = skin_detector.getSkinMask(foreground);
|
|
||||||
|
|
||||||
// draw the hand rectangle on the camera input, and draw text showing if the hand is open or closed.
|
|
||||||
DrawHandMask(&camera_frame);
|
|
||||||
|
|
||||||
//imshow("output" + region_id, frame_out);
|
|
||||||
//imshow("foreground" + region_id, foreground);
|
|
||||||
//imshow("handMask" + region_id, handMask);
|
|
||||||
/*imshow("handDetection", fingerCountDebug);*/
|
|
||||||
|
|
||||||
hand_present = hand_calibrator.CheckIfHandPresent(handMask,handcalibration::HandDetectionType::GAME);
|
|
||||||
//std::string text = (hand_present ? "hand" : "no");
|
|
||||||
//cv::putText(camera_frame, text, cv::Point(start_x_pos, start_y_pos), cv::FONT_HERSHEY_COMPLEX, 2.0, cv::Scalar(0, 255, 255), 2);
|
|
||||||
hand_calibrator.SetHandPresent(hand_present);
|
|
||||||
|
|
||||||
//draw black rectangle behind calibration information text
|
|
||||||
cv::rectangle(camera_frame, cv::Rect(0, camera_frame.rows - 55, 450, camera_frame.cols), cv::Scalar(0, 0, 0), -1);
|
|
||||||
|
|
||||||
hand_calibrator.DrawBackgroundSkinCalibrated(camera_frame);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
cv::Mat HandDetectRegion::GenerateHandMaskSquare(cv::Mat img)
|
|
||||||
{
|
|
||||||
cv::Mat mask = cv::Mat::zeros(img.size(), img.type());
|
|
||||||
cv::Mat distance_img = cv::Mat::zeros(img.size(), img.type());
|
|
||||||
|
|
||||||
cv::rectangle(mask, cv::Rect(start_x_pos, start_y_pos, region_width, region_height), cv::Scalar(255, 255, 255), -1);
|
|
||||||
|
|
||||||
img.copyTo(distance_img, mask);
|
|
||||||
|
|
||||||
hand_mask_generated = true;
|
|
||||||
return distance_img;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HandDetectRegion::DrawHandMask(cv::Mat* input)
|
|
||||||
{
|
|
||||||
if (!hand_mask_generated) return false;
|
|
||||||
rectangle(*input, Rect(start_x_pos, start_y_pos, region_width, region_height), (hand_present ? Scalar(0, 255, 0) : Scalar(0,0,255)),2);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HandDetectRegion::IsHandPresent()
|
|
||||||
{
|
|
||||||
return hand_present;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandDetectRegion::CalibrateBackground()
|
|
||||||
{
|
|
||||||
std::cout << "calibrating background " << region_id << std::endl;
|
|
||||||
background_remover.calibrate(frame_out);
|
|
||||||
hand_calibrator.SetBackGroundCalibrated(true);
|
|
||||||
}
|
|
||||||
void HandDetectRegion::CalibrateSkin()
|
|
||||||
{
|
|
||||||
skin_detector.calibrate(frame_out);
|
|
||||||
hand_calibrator.SetSkinCalibration(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<int> HandDetectRegion::CalculateSkinTresholds()
|
|
||||||
{
|
|
||||||
std::cout << "calibrating skin " << region_id << std::endl;
|
|
||||||
hand_calibrator.SetSkinCalibration(true);
|
|
||||||
return skin_detector.calibrateAndReturn(frame_out);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandDetectRegion::setSkinTresholds(std::vector<int>& tresholds)
|
|
||||||
{
|
|
||||||
std::cout << "setting skin " << region_id << std::endl;
|
|
||||||
skin_detector.setTresholds(tresholds);
|
|
||||||
hand_calibrator.SetSkinCalibration(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <opencv2/core.hpp>
|
|
||||||
#include <opencv2/imgproc.hpp>
|
|
||||||
#include "async/StaticCameraInstance.h"
|
|
||||||
#include "calibration/HandCalibrator.h"
|
|
||||||
#include "BackgroundRemover.h"
|
|
||||||
#include "SkinDetector.h"
|
|
||||||
#include "FingerCount.h"
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
class HandDetectRegion
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
HandDetectRegion(std::string id,int x_pos, int y_pos, int width, int height);
|
|
||||||
|
|
||||||
void SetXPos(int x) { start_x_pos = x; }
|
|
||||||
void SetYPos(int y) { start_y_pos = y; }
|
|
||||||
int GetXPos() { return start_x_pos; }
|
|
||||||
int GetYPos() { return start_y_pos; }
|
|
||||||
|
|
||||||
void SetWidth(int width) { region_width = width; }
|
|
||||||
void SetHeigth(int height) { region_height = height; }
|
|
||||||
int GetWidth() { return region_width; }
|
|
||||||
int GetHeight() { return region_height; }
|
|
||||||
|
|
||||||
cv::Mat GenerateHandMaskSquare(cv::Mat img);
|
|
||||||
|
|
||||||
void DetectHand(cv::Mat& camera_frame);
|
|
||||||
|
|
||||||
bool IsHandPresent();
|
|
||||||
|
|
||||||
void CalibrateBackground();
|
|
||||||
void CalibrateSkin();
|
|
||||||
|
|
||||||
std::vector<int> CalculateSkinTresholds();
|
|
||||||
|
|
||||||
void setSkinTresholds(std::vector<int>& tresholds);
|
|
||||||
|
|
||||||
private:
|
|
||||||
int start_x_pos;
|
|
||||||
int start_y_pos;
|
|
||||||
int region_height;
|
|
||||||
int region_width;
|
|
||||||
bool hand_mask_generated;
|
|
||||||
bool hand_present;
|
|
||||||
cv::Mat frame, frame_out, handMask, foreground, fingerCountDebug;
|
|
||||||
BackgroundRemover background_remover;
|
|
||||||
SkinDetector skin_detector;
|
|
||||||
handcalibration::HandCalibrator hand_calibrator;
|
|
||||||
std::string region_id;
|
|
||||||
|
|
||||||
bool DrawHandMask(cv::Mat* input);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,147 +1,84 @@
|
|||||||
|
|
||||||
#include <opencv2/videoio.hpp>
|
|
||||||
#include <opencv2/highgui.hpp>
|
|
||||||
#include <opencv2/video.hpp>
|
|
||||||
|
|
||||||
#include "ObjectDetection.h"
|
#include "ObjectDetection.h"
|
||||||
#include "BackgroundRemover.h"
|
#include "BackgroundRemover.h"
|
||||||
#include "SkinDetector.h"
|
#include "SkinDetector.h"
|
||||||
#include "FingerCount.h"
|
#include "FingerCount.h"
|
||||||
#include "async/StaticCameraInstance.h"
|
|
||||||
#include "calibration/HandCalibrator.h"
|
|
||||||
|
|
||||||
namespace computervision
|
namespace computervision
|
||||||
{
|
{
|
||||||
|
cv::VideoCapture cap(0);
|
||||||
|
|
||||||
cv::Mat img, img_gray, img2, img2_gray, img3, img4;
|
cv::Mat img, imgGray, img2, img2Gray, img3, img4;
|
||||||
|
|
||||||
int hand_mask_start_x_pos, hand_mask_start_y_pos, hand_mask_width, hand_mask_height;
|
Mat frame, frameOut, handMask, foreground, fingerCountDebug;
|
||||||
bool hand_mask_generated = false;
|
BackgroundRemover backgroundRemover;
|
||||||
|
SkinDetector skinDetector;
|
||||||
|
FingerCount fingerCount;
|
||||||
|
|
||||||
Mat frame, frame_out, handMask, foreground, fingerCountDebug;
|
|
||||||
BackgroundRemover background_remover;
|
|
||||||
SkinDetector skin_detector;
|
|
||||||
FingerCount finger_count;
|
|
||||||
handcalibration::HandCalibrator hand_calibrator;
|
|
||||||
|
|
||||||
cv::VideoCapture cap = static_camera::getCap();
|
|
||||||
|
|
||||||
ObjectDetection::ObjectDetection()
|
ObjectDetection::ObjectDetection()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
cv::Mat ObjectDetection::ReadCamera() {
|
bool ObjectDetection::setup()
|
||||||
cap.read(img);
|
{
|
||||||
return img;
|
if (!cap.isOpened()) {
|
||||||
|
cout << "Can't find camera!" << endl;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cv::VideoCapture ObjectDetection::GetCap()
|
cap.read(frame);
|
||||||
{
|
frameOut = frame.clone();
|
||||||
return cap;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ObjectDetection::DetectHand(Mat camera_frame, bool& hand_present)
|
skinDetector.drawSkinColorSampler(frameOut);
|
||||||
{
|
|
||||||
Mat input_frame = GenerateHandMaskSquare(camera_frame);
|
|
||||||
frame_out = input_frame.clone();
|
|
||||||
|
|
||||||
// detect skin color
|
foreground = backgroundRemover.getForeground(frame);
|
||||||
skin_detector.drawSkinColorSampler(camera_frame);
|
handMask = skinDetector.getSkinMask(foreground);
|
||||||
|
fingerCountDebug = fingerCount.findFingersCount(handMask, frameOut);
|
||||||
|
|
||||||
// remove background from image
|
//backgroundRemover.calibrate(frame);
|
||||||
foreground = background_remover.getForeground(input_frame);
|
|
||||||
|
|
||||||
// detect the hand contours
|
|
||||||
handMask = skin_detector.getSkinMask(foreground);
|
|
||||||
|
|
||||||
// count the amount of fingers and put the info on the matrix
|
|
||||||
fingerCountDebug = finger_count.findFingersCount(handMask, frame_out);
|
|
||||||
|
|
||||||
// get the amount of fingers
|
|
||||||
int fingers_amount = finger_count.getAmountOfFingers();
|
|
||||||
|
|
||||||
// draw the hand rectangle on the camera input, and draw text showing if the hand is open or closed.
|
|
||||||
DrawHandMask(&camera_frame);
|
|
||||||
|
|
||||||
|
|
||||||
hand_calibrator.SetAmountOfFingers(fingers_amount);
|
imshow("output", frameOut);
|
||||||
finger_count.DrawHandContours(camera_frame);
|
|
||||||
hand_calibrator.DrawHandCalibrationText(camera_frame);
|
|
||||||
imshow("camera", camera_frame);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*imshow("output", frame_out);
|
|
||||||
imshow("foreground", foreground);
|
imshow("foreground", foreground);
|
||||||
imshow("handMask", handMask);
|
imshow("handMask", handMask);
|
||||||
imshow("handDetection", fingerCountDebug);*/
|
imshow("handDetection", fingerCountDebug);
|
||||||
|
|
||||||
hand_present = hand_calibrator.CheckIfHandPresent(handMask,handcalibration::HandDetectionType::MENU);
|
|
||||||
hand_calibrator.SetHandPresent(hand_present);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int key = waitKey(1);
|
int key = waitKey(1);
|
||||||
|
|
||||||
if (key == 98) // b, calibrate the background
|
if (key == 98) // b
|
||||||
{
|
backgroundRemover.calibrate(frame);
|
||||||
background_remover.calibrate(input_frame);
|
else if (key == 115) // s
|
||||||
hand_calibrator.SetBackGroundCalibrated(true);
|
skinDetector.calibrate(frame);
|
||||||
}
|
|
||||||
else if (key == 115) // s, calibrate the skin color
|
|
||||||
{
|
|
||||||
skin_detector.calibrate(input_frame);
|
|
||||||
hand_calibrator.SetSkinCalibration(true);
|
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjectDetection::calculateDifference()
|
||||||
return fingers_amount > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ObjectDetection::CalculateDifference()
|
|
||||||
{
|
{
|
||||||
cap.read(img);
|
cap.read(img);
|
||||||
cap.read(img2);
|
cap.read(img2);
|
||||||
|
|
||||||
cv::cvtColor(img, img_gray, cv::COLOR_RGBA2GRAY);
|
cv::cvtColor(img, imgGray, cv::COLOR_RGBA2GRAY);
|
||||||
cv::cvtColor(img2, img2_gray, cv::COLOR_RGBA2GRAY);
|
cv::cvtColor(img2, img2Gray, cv::COLOR_RGBA2GRAY);
|
||||||
|
|
||||||
cv::absdiff(img_gray, img2_gray, img3);
|
cv::absdiff(imgGray, img2Gray, img3);
|
||||||
cv::threshold(img3, img4, 50, 170, cv::THRESH_BINARY);
|
cv::threshold(img3, img4, 50, 170, cv::THRESH_BINARY);
|
||||||
|
|
||||||
imshow("threshold", img4);
|
imshow("threshold", img4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjectDetection::detect()
|
||||||
cv::Mat ObjectDetection::GenerateHandMaskSquare(cv::Mat img)
|
|
||||||
{
|
{
|
||||||
hand_mask_start_x_pos = 20;
|
int key = waitKey(1);
|
||||||
hand_mask_start_y_pos = img.rows / 5;
|
|
||||||
hand_mask_width = img.cols / 3;
|
|
||||||
hand_mask_height = img.cols / 3;
|
|
||||||
|
|
||||||
|
|
||||||
cv::Mat mask = cv::Mat::zeros(img.size(), img.type());
|
|
||||||
cv::Mat distance_img = cv::Mat::zeros(img.size(), img.type());
|
|
||||||
|
|
||||||
cv::rectangle(mask, Rect(hand_mask_start_x_pos, hand_mask_start_y_pos, hand_mask_width, hand_mask_height), Scalar(255, 255, 255), -1);
|
|
||||||
|
|
||||||
img.copyTo(distance_img, mask);
|
|
||||||
|
|
||||||
hand_mask_generated = true;
|
|
||||||
return distance_img;
|
|
||||||
|
|
||||||
|
if (key == 98) // b
|
||||||
|
backgroundRemover.calibrate(frame);
|
||||||
|
else if (key == 115) // s
|
||||||
|
skinDetector.calibrate(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectDetection::DrawHandMask(cv::Mat* input)
|
void ObjectDetection::showWebcam()
|
||||||
{
|
|
||||||
if (!hand_mask_generated) return false;
|
|
||||||
rectangle(*input, Rect(hand_mask_start_x_pos, hand_mask_start_y_pos, hand_mask_width, hand_mask_height), Scalar(255, 255, 255));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ObjectDetection::ShowWebcam()
|
|
||||||
{
|
{
|
||||||
imshow("Webcam image", img);
|
imshow("Webcam image", img);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,70 +22,29 @@ namespace computervision
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ObjectDetection();
|
ObjectDetection();
|
||||||
|
/**
|
||||||
|
* @brief Initializes the object detection, captures a frame and modifies it
|
||||||
|
* so it is ready to use for object detection
|
||||||
|
*
|
||||||
|
* @return return true if webcam is connected, returns false if it isn't
|
||||||
|
*/
|
||||||
|
bool setup();
|
||||||
/**
|
/**
|
||||||
* @brief Displays an image of the current webcam-footage
|
* @brief Displays an image of the current webcam-footage
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void ShowWebcam();
|
void showWebcam();
|
||||||
/**
|
/**
|
||||||
* @brief Calculates the difference between two images
|
* @brief Calculates the difference between two images
|
||||||
* and outputs an image that only shows the difference
|
* and outputs an image that only shows the difference
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void CalculateDifference();
|
void calculateDifference();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief generates the square that will hold the mask in which the hand will be detected.
|
* @brief Listens for keypresses and handles them
|
||||||
*
|
*
|
||||||
* @param img the current camear frame
|
|
||||||
* @return a matrix containing the mask
|
|
||||||
*/
|
*/
|
||||||
cv::Mat GenerateHandMaskSquare(cv::Mat img);
|
void detect();
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief reads the camera and returns it in a matrix.
|
|
||||||
*
|
|
||||||
* @return the camera frame in a matrix
|
|
||||||
*/
|
|
||||||
cv::Mat ReadCamera();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief detects a hand based on the given hand mask input frame.
|
|
||||||
*
|
|
||||||
* @param inputFrame the input frame from the camera
|
|
||||||
* @param hand_present boolean that will hold true if the hand is detected, false if not.
|
|
||||||
* @return true if hand is open, false if hand is closed
|
|
||||||
*/
|
|
||||||
bool DetectHand(cv::Mat camera_frame, bool& hand_present);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief draws the hand mask rectangle on the given input matrix.
|
|
||||||
*
|
|
||||||
* @param input the input matrix to draw the rectangle on
|
|
||||||
*/
|
|
||||||
bool DrawHandMask(cv::Mat *input);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief checks if the hand of the user is open.
|
|
||||||
*
|
|
||||||
* @return true if the hand is open, false if not.
|
|
||||||
*/
|
|
||||||
bool IsHandOpen();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief checks whether the hand is held within the detection square.
|
|
||||||
*
|
|
||||||
* @return true if the hand is in the detection square, false if not.
|
|
||||||
*/
|
|
||||||
bool IsHandPresent();
|
|
||||||
|
|
||||||
cv::VideoCapture GetCap();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool is_hand_open;
|
|
||||||
bool is_hand_present;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,108 +0,0 @@
|
|||||||
#include "OpenPoseVideo.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace cv;
|
|
||||||
using namespace cv::dnn;
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
#define MPI
|
|
||||||
|
|
||||||
#ifdef MPI
|
|
||||||
const int POSE_PAIRS[7][2] =
|
|
||||||
{
|
|
||||||
{0,1}, {1,2}, {2,3},
|
|
||||||
{3,4}, {1,5}, {5,6},
|
|
||||||
{6,7}
|
|
||||||
};
|
|
||||||
|
|
||||||
string protoFile = "res/pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt";
|
|
||||||
string weightsFile = "res/pose/mpi/pose_iter_160000.caffemodel";
|
|
||||||
|
|
||||||
int nPoints = 8;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef COCO
|
|
||||||
const int POSE_PAIRS[17][2] =
|
|
||||||
{
|
|
||||||
{1,2}, {1,5}, {2,3},
|
|
||||||
{3,4}, {5,6}, {6,7},
|
|
||||||
{1,8}, {8,9}, {9,10},
|
|
||||||
{1,11}, {11,12}, {12,13},
|
|
||||||
{1,0}, {0,14},
|
|
||||||
{14,16}, {0,15}, {15,17}
|
|
||||||
};
|
|
||||||
|
|
||||||
string protoFile = "pose/coco/pose_deploy_linevec.prototxt";
|
|
||||||
string weightsFile = "pose/coco/pose_iter_440000.caffemodel";
|
|
||||||
|
|
||||||
int nPoints = 18;
|
|
||||||
#endif
|
|
||||||
Net net;
|
|
||||||
|
|
||||||
void OpenPoseVideo::setup() {
|
|
||||||
net = readNetFromCaffe(protoFile, weightsFile);
|
|
||||||
|
|
||||||
net.setPreferableBackend(DNN_TARGET_CPU);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OpenPoseVideo::movementSkeleton(Mat& inputImage, std::function<void(std::vector<Point>&, cv::Mat& poinst_on_image)> f) {
|
|
||||||
std::cout << "movement skeleton start" << std::endl;
|
|
||||||
|
|
||||||
int inWidth = 368;
|
|
||||||
int inHeight = 368;
|
|
||||||
float thresh = 0.01;
|
|
||||||
|
|
||||||
Mat frame;
|
|
||||||
int frameWidth = inputImage.size().width;
|
|
||||||
int frameHeight = inputImage.size().height;
|
|
||||||
|
|
||||||
double t = (double)cv::getTickCount();
|
|
||||||
std::cout << "reading input image and blob" << std::endl;
|
|
||||||
|
|
||||||
frame = inputImage;
|
|
||||||
Mat inpBlob = blobFromImage(frame, 1.0 / 255, Size(inWidth, inHeight), Scalar(0, 0, 0), false, false);
|
|
||||||
|
|
||||||
std::cout << "done reading image and blob" << std::endl;
|
|
||||||
|
|
||||||
net.setInput(inpBlob);
|
|
||||||
|
|
||||||
std::cout << "done setting input to net" << std::endl;
|
|
||||||
Mat output = net.forward();
|
|
||||||
std::cout << "time took to set input and forward: " << t << std::endl;
|
|
||||||
|
|
||||||
int H = output.size[2];
|
|
||||||
int W = output.size[3];
|
|
||||||
|
|
||||||
std::cout << "about to find position of boxy parts" << std::endl;
|
|
||||||
// find the position of the body parts
|
|
||||||
vector<Point> points(nPoints);
|
|
||||||
for (int n = 0; n < nPoints; n++)
|
|
||||||
{
|
|
||||||
// Probability map of corresponding body's part.
|
|
||||||
Mat probMap(H, W, CV_32F, output.ptr(0, n));
|
|
||||||
|
|
||||||
Point2f p(-1, -1);
|
|
||||||
Point maxLoc;
|
|
||||||
double prob;
|
|
||||||
minMaxLoc(probMap, 0, &prob, 0, &maxLoc);
|
|
||||||
if (prob > thresh)
|
|
||||||
{
|
|
||||||
p = maxLoc;
|
|
||||||
p.x *= (float)frameWidth / W;
|
|
||||||
p.y *= (float)frameHeight / H;
|
|
||||||
|
|
||||||
circle(frame, cv::Point((int)p.x, (int)p.y), 8, Scalar(0, 255, 255), -1);
|
|
||||||
cv::putText(frame, cv::format("%d", n), cv::Point((int)p.x, (int)p.y), cv::FONT_HERSHEY_COMPLEX, 1.1, cv::Scalar(0, 0, 255), 2);
|
|
||||||
}
|
|
||||||
points[n] = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
cv::putText(frame, cv::format("time taken = %.2f sec", t), cv::Point(50, 50), cv::FONT_HERSHEY_COMPLEX, .8, cv::Scalar(255, 50, 0), 2);
|
|
||||||
std::cout << "time taken: " << t << std::endl;
|
|
||||||
//imshow("Output-Keypoints", frame);
|
|
||||||
//imshow("Output-Skeleton", frame);
|
|
||||||
std::cout << "about to call points receiving method" << std::endl;
|
|
||||||
f(points,frame);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <opencv2/dnn.hpp>
|
|
||||||
#include <opencv2/imgproc.hpp>
|
|
||||||
#include <opencv2/highgui.hpp>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace cv;
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
class OpenPoseVideo{
|
|
||||||
private:
|
|
||||||
|
|
||||||
public:
|
|
||||||
void movementSkeleton(Mat& inputImage, std::function<void(std::vector<Point>&, cv::Mat& poinst_on_image)> f);
|
|
||||||
void setup();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "SkinDetector.h"
|
#include "SkinDetector.h"
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Author: Pierfrancesco Soffritti https://github.com/PierfrancescoSoffritti
|
Author: Pierfrancesco Soffritti https://github.com/PierfrancescoSoffritti
|
||||||
@@ -23,8 +22,8 @@ namespace computervision
|
|||||||
void SkinDetector::drawSkinColorSampler(Mat input) {
|
void SkinDetector::drawSkinColorSampler(Mat input) {
|
||||||
int frameWidth = input.size().width, frameHeight = input.size().height;
|
int frameWidth = input.size().width, frameHeight = input.size().height;
|
||||||
|
|
||||||
int rectangleSize = 25;
|
int rectangleSize = 20;
|
||||||
Scalar rectangleColor = Scalar(0, 255, 255);
|
Scalar rectangleColor = Scalar(255, 0, 255);
|
||||||
|
|
||||||
skinColorSamplerRectangle1 = Rect(frameWidth / 5, frameHeight / 2, rectangleSize, rectangleSize);
|
skinColorSamplerRectangle1 = Rect(frameWidth / 5, frameHeight / 2, rectangleSize, rectangleSize);
|
||||||
skinColorSamplerRectangle2 = Rect(frameWidth / 5, frameHeight / 3, rectangleSize, rectangleSize);
|
skinColorSamplerRectangle2 = Rect(frameWidth / 5, frameHeight / 3, rectangleSize, rectangleSize);
|
||||||
@@ -42,29 +41,6 @@ namespace computervision
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkinDetector::drawSkinColorSampler(Mat input,int x, int y,int width, int height) {
|
|
||||||
int frameWidth = width, frameHeight = height;
|
|
||||||
|
|
||||||
int rectangleSize = 25;
|
|
||||||
Scalar rectangleColor = Scalar(0, 255, 255);
|
|
||||||
|
|
||||||
skinColorSamplerRectangle1 = Rect(frameWidth / 5 + x, frameHeight / 2 + y, rectangleSize, rectangleSize);
|
|
||||||
skinColorSamplerRectangle2 = Rect(frameWidth / 5 + x, frameHeight / 3 + y, rectangleSize, rectangleSize);
|
|
||||||
|
|
||||||
rectangle(
|
|
||||||
input,
|
|
||||||
skinColorSamplerRectangle1,
|
|
||||||
rectangleColor
|
|
||||||
);
|
|
||||||
|
|
||||||
rectangle(
|
|
||||||
input,
|
|
||||||
skinColorSamplerRectangle2,
|
|
||||||
rectangleColor
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SkinDetector::calibrate(Mat input) {
|
void SkinDetector::calibrate(Mat input) {
|
||||||
|
|
||||||
Mat hsvInput;
|
Mat hsvInput;
|
||||||
@@ -78,19 +54,6 @@ namespace computervision
|
|||||||
calibrated = true;
|
calibrated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> SkinDetector::calibrateAndReturn(Mat input)
|
|
||||||
{
|
|
||||||
Mat hsvInput;
|
|
||||||
cvtColor(input, hsvInput, CV_BGR2HSV);
|
|
||||||
|
|
||||||
Mat sample1 = Mat(hsvInput, skinColorSamplerRectangle1);
|
|
||||||
Mat sample2 = Mat(hsvInput, skinColorSamplerRectangle2);
|
|
||||||
|
|
||||||
calibrated = true;
|
|
||||||
return calculateAndReturnTresholds(sample1, sample2);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SkinDetector::calculateThresholds(Mat sample1, Mat sample2) {
|
void SkinDetector::calculateThresholds(Mat sample1, Mat sample2) {
|
||||||
int offsetLowThreshold = 80;
|
int offsetLowThreshold = 80;
|
||||||
int offsetHighThreshold = 30;
|
int offsetHighThreshold = 30;
|
||||||
@@ -112,39 +75,6 @@ namespace computervision
|
|||||||
//vHighThreshold = 255;
|
//vHighThreshold = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> SkinDetector::calculateAndReturnTresholds(Mat sample1, Mat sample2)
|
|
||||||
{
|
|
||||||
|
|
||||||
calculateThresholds(sample1, sample2);
|
|
||||||
std::vector<int> res;
|
|
||||||
res.push_back(hLowThreshold);
|
|
||||||
res.push_back(hHighThreshold);
|
|
||||||
res.push_back(sLowThreshold);
|
|
||||||
res.push_back(sHighThreshold);
|
|
||||||
res.push_back(vLowThreshold);
|
|
||||||
res.push_back(vHighThreshold);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SkinDetector::setTresholds(std::vector<int>& tresholds)
|
|
||||||
{
|
|
||||||
if (tresholds.size() != 6)
|
|
||||||
{
|
|
||||||
std::cout << "tresholds array not the right size!" << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
hLowThreshold = tresholds[0];
|
|
||||||
hHighThreshold = tresholds[1];
|
|
||||||
sLowThreshold = tresholds[2];
|
|
||||||
sHighThreshold = tresholds[3];
|
|
||||||
vLowThreshold = tresholds[4];
|
|
||||||
vHighThreshold = tresholds[5];
|
|
||||||
|
|
||||||
calibrated = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Mat SkinDetector::getSkinMask(Mat input) {
|
Mat SkinDetector::getSkinMask(Mat input) {
|
||||||
Mat skinMask;
|
Mat skinMask;
|
||||||
|
|
||||||
|
|||||||
@@ -24,9 +24,6 @@ namespace computervision
|
|||||||
*/
|
*/
|
||||||
void drawSkinColorSampler(Mat input);
|
void drawSkinColorSampler(Mat input);
|
||||||
|
|
||||||
void drawSkinColorSampler(Mat input, int x, int y, int width, int heigth);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief calibrates the skin color detector with the given input frame
|
* @brief calibrates the skin color detector with the given input frame
|
||||||
*
|
*
|
||||||
@@ -34,10 +31,6 @@ namespace computervision
|
|||||||
*/
|
*/
|
||||||
void calibrate(Mat input);
|
void calibrate(Mat input);
|
||||||
|
|
||||||
std::vector<int> calibrateAndReturn(Mat input);
|
|
||||||
|
|
||||||
void setTresholds(std::vector<int>& tresholds);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief gets the mask for the hand
|
* @brief gets the mask for the hand
|
||||||
*
|
*
|
||||||
@@ -70,8 +63,6 @@ namespace computervision
|
|||||||
*/
|
*/
|
||||||
void calculateThresholds(Mat sample1, Mat sample2);
|
void calculateThresholds(Mat sample1, Mat sample2);
|
||||||
|
|
||||||
std::vector<int> calculateAndReturnTresholds(Mat sample1, Mat sample2);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief the opening. it generates the structuring element and performs the morphological transformations required to detect the hand.
|
* @brief the opening. it generates the structuring element and performs the morphological transformations required to detect the hand.
|
||||||
* This needs to be done to get the skin mask.
|
* This needs to be done to get the skin mask.
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <opencv2/videoio.hpp>
|
|
||||||
|
|
||||||
namespace static_camera
|
|
||||||
{
|
|
||||||
|
|
||||||
static cv::VideoCapture getCap()
|
|
||||||
{
|
|
||||||
static cv::VideoCapture cap(0);
|
|
||||||
return cap;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
#include "async_arm_detection.h"
|
|
||||||
#include "../OpenPoseVideo.h"
|
|
||||||
#include <thread>
|
|
||||||
#include "StaticCameraInstance.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
AsyncArmDetection::AsyncArmDetection()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void AsyncArmDetection::run_arm_detection(std::function<void(std::vector<Point>, cv::Mat poinst_on_image)> points_ready_func, OpenPoseVideo op)
|
|
||||||
{
|
|
||||||
VideoCapture cap = static_camera::getCap();
|
|
||||||
|
|
||||||
std::cout << "STARTING THREAD LAMBDA" << std::endl;
|
|
||||||
/*cv::VideoCapture cap = static_camera::GetCap();*/
|
|
||||||
|
|
||||||
if (!cap.isOpened())
|
|
||||||
{
|
|
||||||
std::cout << "capture was closed, opening..." << std::endl;
|
|
||||||
cap.open(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
Mat img;
|
|
||||||
cap.read(img);
|
|
||||||
op.movementSkeleton(img, points_ready_func);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void AsyncArmDetection::start(std::function<void(std::vector<Point>, cv::Mat poinst_on_image)> points_ready_func, OpenPoseVideo op)
|
|
||||||
{
|
|
||||||
|
|
||||||
std::cout << "starting function" << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
std::thread async_arm_detect_thread(&AsyncArmDetection::run_arm_detection,this, points_ready_func, op);
|
|
||||||
|
|
||||||
async_arm_detect_thread.detach(); // makes sure the thread is detached from the variable.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <vector>
|
|
||||||
#include <opencv2/core/types.hpp>
|
|
||||||
#include <opencv2/videoio.hpp>
|
|
||||||
#include <functional>
|
|
||||||
#include "../OpenPoseVideo.h"
|
|
||||||
#include "StaticCameraInstance.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
class AsyncArmDetection
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AsyncArmDetection(void);
|
|
||||||
|
|
||||||
|
|
||||||
void start(std::function<void(std::vector<cv::Point>, cv::Mat poinst_on_image)>, computervision::OpenPoseVideo op);
|
|
||||||
private:
|
|
||||||
void run_arm_detection(std::function<void(std::vector<Point>, cv::Mat poinst_on_image)> points_ready_func, OpenPoseVideo op);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
|
|
||||||
#include "HandCalibrator.h"
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#define MIN_MENU_HAND_SIZE 10000
|
|
||||||
#define MIN_GAME_HAND_SIZE 3000 // todo change
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
namespace handcalibration
|
|
||||||
{
|
|
||||||
|
|
||||||
HandCalibrator::HandCalibrator()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandCalibrator::DrawHandCalibrationText(cv::Mat& output_frame)
|
|
||||||
{
|
|
||||||
cv::rectangle(output_frame, cv::Rect(0, 0, output_frame.cols, 40), cv::Scalar(0, 0, 0), -1);
|
|
||||||
cv::putText(output_frame, "Hand calibration", cv::Point(output_frame.cols / 2 - 100, 25), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(18, 219, 65), 2);
|
|
||||||
cv::putText(output_frame, "press 'b' to calibrate background,then press 's' to calibrate skin tone", cv::Point(5, 35), cv::FONT_HERSHEY_PLAIN, 1.0, cv::Scalar(18, 219, 65), 1);
|
|
||||||
|
|
||||||
cv::rectangle(output_frame, cv::Rect(0, output_frame.rows - 80, 450, output_frame.cols), cv::Scalar(0, 0, 0), -1);
|
|
||||||
|
|
||||||
cv::putText(output_frame, "hand in frame:", cv::Point(5, output_frame.rows - 50), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 255, 0), 1);
|
|
||||||
cv::rectangle(output_frame, cv::Rect(420, output_frame.rows - 67, 15, 15), hand_present ? cv::Scalar(0, 255, 0) : cv::Scalar(0, 0, 255), -1);
|
|
||||||
|
|
||||||
DrawBackgroundSkinCalibrated(output_frame);
|
|
||||||
|
|
||||||
if (hand_present)
|
|
||||||
{
|
|
||||||
std::string hand_text = fingers_amount > 0 ? "open" : "closed";
|
|
||||||
cv::putText(output_frame, hand_text, cv::Point(10, 75), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 0, 255), 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandCalibrator::DrawBackgroundSkinCalibrated(cv::Mat& output_frame)
|
|
||||||
{
|
|
||||||
|
|
||||||
cv::putText(output_frame, "background calibrated:", cv::Point(5, output_frame.rows - 30), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 255, 0), 1);
|
|
||||||
cv::rectangle(output_frame, cv::Rect(420, output_frame.rows - 47, 15, 15), background_calibrated ? cv::Scalar(0, 255, 0) : cv::Scalar(0, 0, 255), -1);
|
|
||||||
|
|
||||||
cv::putText(output_frame, "skin color calibrated:", cv::Point(5, output_frame.rows - 10), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 255, 0), 1);
|
|
||||||
cv::rectangle(output_frame, cv::Rect(420, output_frame.rows - 27, 15, 15), skintone_calibrated ? cv::Scalar(0, 255, 0) : cv::Scalar(0, 0, 255), -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandCalibrator::SetSkinCalibration(bool val)
|
|
||||||
{
|
|
||||||
skintone_calibrated = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandCalibrator::SetBackGroundCalibrated(bool val)
|
|
||||||
{
|
|
||||||
background_calibrated = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandCalibrator::SetHandPresent(bool val)
|
|
||||||
{
|
|
||||||
hand_present = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandCalibrator::SetAmountOfFingers(int amount)
|
|
||||||
{
|
|
||||||
fingers_amount = amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HandCalibrator::CheckIfHandPresent(cv::Mat input_image, HandDetectionType type)
|
|
||||||
{
|
|
||||||
std::vector<std::vector<cv::Point>> points;
|
|
||||||
cv::findContours(input_image, points, cv::RetrievalModes::RETR_LIST, cv::ContourApproximationModes::CHAIN_APPROX_SIMPLE);
|
|
||||||
|
|
||||||
if (points.size() == 0) return false;
|
|
||||||
|
|
||||||
for (int p = 0; p < points.size(); p++)
|
|
||||||
{
|
|
||||||
int area = cv::contourArea(points[p]);
|
|
||||||
|
|
||||||
if (type == handcalibration::HandDetectionType::MENU)
|
|
||||||
if (area > MIN_MENU_HAND_SIZE) return true;
|
|
||||||
|
|
||||||
if (type == handcalibration::HandDetectionType::GAME)
|
|
||||||
if (area > MIN_GAME_HAND_SIZE) return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <opencv2/core/base.hpp>
|
|
||||||
#include <opencv2/imgcodecs.hpp>
|
|
||||||
#include <opencv2/imgproc.hpp>
|
|
||||||
|
|
||||||
namespace computervision
|
|
||||||
{
|
|
||||||
namespace handcalibration
|
|
||||||
{
|
|
||||||
enum class HandDetectionType
|
|
||||||
{
|
|
||||||
MENU,
|
|
||||||
GAME
|
|
||||||
};
|
|
||||||
|
|
||||||
class HandCalibrator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
HandCalibrator();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief draws the text to show the status of the calibration on the image
|
|
||||||
*
|
|
||||||
* @param output_frame the frame to draw on.
|
|
||||||
*/
|
|
||||||
void DrawHandCalibrationText(cv::Mat& output_frame);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sets the skin calibration variable.
|
|
||||||
*
|
|
||||||
* @param val the value to set
|
|
||||||
*/
|
|
||||||
void SetSkinCalibration(bool val);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sets the background calibration variable.
|
|
||||||
*
|
|
||||||
* @param val the value to set
|
|
||||||
*/
|
|
||||||
void SetBackGroundCalibrated(bool val);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sets the value for if the hand is present.
|
|
||||||
*
|
|
||||||
* @param val the value to set.
|
|
||||||
*/
|
|
||||||
void SetHandPresent(bool val);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief checks if the hand is present in the given image
|
|
||||||
*
|
|
||||||
* @param input_image the input image to check.
|
|
||||||
*/
|
|
||||||
bool CheckIfHandPresent(cv::Mat input_image, HandDetectionType type);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief sets the amount of fingers that are currently detected.
|
|
||||||
*
|
|
||||||
* @param amount the amount of fingers.
|
|
||||||
*/
|
|
||||||
void SetAmountOfFingers(int amount);
|
|
||||||
|
|
||||||
void DrawBackgroundSkinCalibrated(cv::Mat& output_frame);
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
bool background_calibrated;
|
|
||||||
bool skintone_calibrated;
|
|
||||||
bool hand_present;
|
|
||||||
int fingers_amount;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,8 @@ namespace entities
|
|||||||
|
|
||||||
class Entity
|
class Entity
|
||||||
{
|
{
|
||||||
protected:
|
private:
|
||||||
models::TexturedModel model;
|
models::TexturedModel model;
|
||||||
|
|
||||||
glm::vec3 position;
|
glm::vec3 position;
|
||||||
glm::vec3 rotation;
|
glm::vec3 rotation;
|
||||||
float scale;
|
float scale;
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
#include "collision_entity.h"
|
|
||||||
|
|
||||||
namespace entities
|
|
||||||
{
|
|
||||||
CollisionEntity::CollisionEntity(const models::TexturedModel& model, const glm::vec3& position,
|
|
||||||
const glm::vec3& rotation, float scale, const collision::Box& bounding_box)
|
|
||||||
: Entity(model, position, rotation, scale),
|
|
||||||
bounding_box(bounding_box)
|
|
||||||
{
|
|
||||||
MoveCollisionBox();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CollisionEntity::OnCollide(const collision::Collision& collision)
|
|
||||||
{
|
|
||||||
if (on_collide != nullptr)
|
|
||||||
{
|
|
||||||
on_collide(collision);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CollisionEntity::IsColliding(const glm::vec3& point) const
|
|
||||||
{
|
|
||||||
return (point.x >= min_xyz.x && point.x <= max_xyz.x) &&
|
|
||||||
(point.y >= min_xyz.y && point.y <= max_xyz.y) &&
|
|
||||||
(point.z >= min_xyz.z && point.z <= max_xyz.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CollisionEntity::IsColliding(const CollisionEntity& e) const
|
|
||||||
{
|
|
||||||
return (min_xyz.x <= e.max_xyz.x && max_xyz.x >= e.min_xyz.x) &&
|
|
||||||
(min_xyz.y <= e.max_xyz.y && max_xyz.y >= e.min_xyz.y) &&
|
|
||||||
(min_xyz.z <= e.max_xyz.z && max_xyz.z >= e.min_xyz.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CollisionEntity::MoveCollisionBox()
|
|
||||||
{
|
|
||||||
bounding_box.center_pos = position;
|
|
||||||
|
|
||||||
const glm::vec3 size = bounding_box.size;
|
|
||||||
|
|
||||||
min_xyz = bounding_box.center_pos;
|
|
||||||
max_xyz = glm::vec3(min_xyz.x + size.x, min_xyz.y + size.y, min_xyz.z + size.z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "entity.h"
|
|
||||||
#include "../collision/collision.h"
|
|
||||||
|
|
||||||
namespace entities
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This class is an entity with a collision box
|
|
||||||
*/
|
|
||||||
class CollisionEntity : public Entity
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
collision::Box bounding_box;
|
|
||||||
|
|
||||||
glm::vec3 min_xyz;
|
|
||||||
glm::vec3 max_xyz;
|
|
||||||
|
|
||||||
void (*on_collide)(const collision::Collision& collision);
|
|
||||||
|
|
||||||
public:
|
|
||||||
CollisionEntity(const models::TexturedModel& model, const glm::vec3& position, const glm::vec3& rotation,
|
|
||||||
float scale, const collision::Box& bounding_box);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to do some sort of behaviour when the entity collides
|
|
||||||
*
|
|
||||||
* @param collision: The collision
|
|
||||||
*/
|
|
||||||
virtual void OnCollide(const collision::Collision& collision);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to check if the entity is colliding with a point in 3D space
|
|
||||||
*
|
|
||||||
* @param point: The point to check if its colliding with the entity
|
|
||||||
*
|
|
||||||
* @return: True is the entity is colliding, false if not
|
|
||||||
*/
|
|
||||||
bool IsColliding(const glm::vec3& point) const;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to check if the entity is colliding with another entity
|
|
||||||
*
|
|
||||||
* @param e: The other entity to check if its colliding with this
|
|
||||||
*
|
|
||||||
* @return: True is the entity is colliding, false if not
|
|
||||||
*/
|
|
||||||
bool IsColliding(const CollisionEntity& e) const;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: A function to set the collision behaviour of the entity
|
|
||||||
*
|
|
||||||
* @param function: A function pointer to a function with the collision behaviour
|
|
||||||
*/
|
|
||||||
void SetCollisionBehaviour(void (*function)(const collision::Collision& collision))
|
|
||||||
{ if (function != nullptr) { on_collide = function; } }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: This method moves the collision to the center of the entity
|
|
||||||
*/
|
|
||||||
void MoveCollisionBox();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include "gui_interactable.h"
|
#include "gui_interactable.h"
|
||||||
|
|
||||||
|
|||||||
142
src/main.cpp
142
src/main.cpp
@@ -1,14 +1,12 @@
|
|||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#include <functional>
|
|
||||||
#include <vector>
|
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include "stb_image.h"
|
#include "stb_image.h"
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
#include <opencv2/core.hpp>
|
#include <opencv2/core.hpp>
|
||||||
#include <opencv2/videoio.hpp>
|
#include <opencv2/videoio.hpp>
|
||||||
@@ -21,15 +19,12 @@
|
|||||||
#include "renderEngine/renderer.h"
|
#include "renderEngine/renderer.h"
|
||||||
#include "shaders/entity_shader.h"
|
#include "shaders/entity_shader.h"
|
||||||
#include "toolbox/toolbox.h"
|
#include "toolbox/toolbox.h"
|
||||||
|
|
||||||
#include "scenes/scene.h"
|
#include "scenes/scene.h"
|
||||||
#include "scenes/in_Game_Scene.h"
|
#include "scenes/startupScene.h"
|
||||||
#include "scenes/startup_Scene.h"
|
#include "scenes/inGameScene.h"
|
||||||
|
|
||||||
#include "computervision/ObjectDetection.h"
|
#include "computervision/ObjectDetection.h"
|
||||||
//#include "computervision/OpenPoseImage.h"
|
|
||||||
#include "computervision/OpenPoseVideo.h"
|
|
||||||
|
|
||||||
#include "computervision/async/async_arm_detection.h"
|
|
||||||
|
|
||||||
#pragma comment(lib, "glfw3.lib")
|
#pragma comment(lib, "glfw3.lib")
|
||||||
#pragma comment(lib, "glew32s.lib")
|
#pragma comment(lib, "glew32s.lib")
|
||||||
@@ -37,24 +32,16 @@
|
|||||||
|
|
||||||
static double UpdateDelta();
|
static double UpdateDelta();
|
||||||
|
|
||||||
scene::Scene* current_scene;
|
|
||||||
|
|
||||||
static GLFWwindow* window;
|
static GLFWwindow* window;
|
||||||
bool points_img_available = false;
|
|
||||||
cv::Mat points_img;
|
|
||||||
|
|
||||||
void retrieve_points(std::vector<Point> arm_points, cv::Mat points_on_image)
|
//Scene management variables
|
||||||
{
|
std::map<Scenes, Scene*> scenes;
|
||||||
|
Scene* current_scene = nullptr;
|
||||||
|
|
||||||
std::cout << "got points!!" << std::endl;
|
|
||||||
std::cout << "points: " << arm_points << std::endl;
|
|
||||||
points_img = points_on_image;
|
|
||||||
points_img_available = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
#pragma region OPENGL_SETTINGS
|
#pragma region OPENGL_SETTINGS
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
throw "Could not inditialize glwf";
|
throw "Could not inditialize glwf";
|
||||||
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGT, "SDBA", NULL, NULL);
|
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGT, "SDBA", NULL, NULL);
|
||||||
@@ -66,52 +53,101 @@ int main(void)
|
|||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
glewInit();
|
glewInit();
|
||||||
glGetError();
|
glGetError();
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
|
||||||
current_scene = new scene::Startup_Scene();
|
|
||||||
|
|
||||||
glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods)
|
glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
|
current_scene->onKey(key, scancode, action, mods);
|
||||||
if (key == GLFW_KEY_ESCAPE)
|
if (key == GLFW_KEY_ESCAPE)
|
||||||
{
|
|
||||||
glfwSetWindowShouldClose(window, true);
|
glfwSetWindowShouldClose(window, true);
|
||||||
}
|
|
||||||
|
|
||||||
current_scene->onKey(window, key, scancode, action, mods);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bool window_open = true;
|
scenes[Scenes::STARTUP] = new StartupScene();
|
||||||
// Main game loop
|
scenes[Scenes::INGAME] = new InGameScene();
|
||||||
while (!glfwWindowShouldClose(window) && window_open)
|
|
||||||
|
models::RawModel raw_model = render_engine::LoadObjModel("res/House.obj");
|
||||||
|
models::ModelTexture texture = { render_engine::loader::LoadTexture("res/Texture.png") };
|
||||||
|
texture.shine_damper = 10;
|
||||||
|
texture.reflectivity = 0;
|
||||||
|
models::TexturedModel model = { raw_model, texture };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* load and add some models (in this case some level sections) to the entities list.
|
||||||
|
* */
|
||||||
|
std::vector<entities::Entity> entities;
|
||||||
|
int z = 0;
|
||||||
|
for (int i = 0; i < 5; ++i)
|
||||||
{
|
{
|
||||||
//Update
|
entities.push_back(entities::Entity(model, glm::vec3(0, -50, -50 - z), glm::vec3(0, 90, 0), 20));
|
||||||
|
z += (raw_model.model_size.x * 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<entities::Light> lights;
|
||||||
|
lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5)));
|
||||||
|
lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
||||||
|
lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
||||||
|
|
||||||
|
shaders::EntityShader shader;
|
||||||
|
shader.Init();
|
||||||
|
render_engine::renderer::Init(shader);
|
||||||
|
|
||||||
|
entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0));
|
||||||
|
|
||||||
|
|
||||||
|
// GUI stuff
|
||||||
|
shaders::GuiShader gui_shader;
|
||||||
|
gui_shader.Init();
|
||||||
|
|
||||||
|
std::vector<gui::GuiTexture*> guis;
|
||||||
|
gui::Button button(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.5f, 0.0f), glm::vec2(0.25f, 0.25f));
|
||||||
|
button.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png"));
|
||||||
|
button.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png"));
|
||||||
|
button.SetOnClickAction([]()
|
||||||
|
{
|
||||||
|
std::cout << "I got clicked on!" << std::endl;
|
||||||
|
});
|
||||||
|
guis.push_back(&button);
|
||||||
|
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
while (!glfwWindowShouldClose(window))
|
||||||
|
{
|
||||||
|
// Update
|
||||||
const double delta = UpdateDelta();
|
const double delta = UpdateDelta();
|
||||||
|
camera.Move(window);
|
||||||
|
button.Update(window);
|
||||||
|
|
||||||
scene::Scenes return_value = current_scene->start(window);
|
// Render
|
||||||
delete current_scene;
|
render_engine::renderer::Prepare();
|
||||||
|
|
||||||
switch (return_value) {
|
// Start rendering the entities
|
||||||
case scene::Scenes::STOP:
|
shader.Start();
|
||||||
window_open = false;
|
shader.LoadSkyColor(render_engine::renderer::SKY_COLOR);
|
||||||
break;
|
shader.LoadLights(lights);
|
||||||
|
shader.LoadViewMatrix(camera);
|
||||||
|
|
||||||
case scene::Scenes::STARTUP:
|
// Renders each entity in the entities list
|
||||||
current_scene = new scene::Startup_Scene();
|
for (entities::Entity& entity : entities)
|
||||||
break;
|
{
|
||||||
|
render_engine::renderer::Render(entity, shader);
|
||||||
case scene::Scenes::INGAME:
|
|
||||||
current_scene = new scene::In_Game_Scene();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
std::cout << "Wrong return value!!! ->" << std::endl;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up -> preventing memory leaks!!!
|
// Stop rendering the entities
|
||||||
std::cout << "ending..." << std::endl;
|
shader.Stop();
|
||||||
|
|
||||||
|
// Render GUI items
|
||||||
|
render_engine::renderer::Render(guis, gui_shader);
|
||||||
|
|
||||||
|
// Finish up
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
shader.CleanUp();
|
||||||
|
gui_shader.CleanUp();
|
||||||
|
render_engine::loader::CleanUp();
|
||||||
|
current_scene->stop();
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/scenes/inGameScene.cpp
Normal file
29
src/scenes/inGameScene.cpp
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#include "inGameScene.h"
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
void InGameScene::start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::stop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::render()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::update(GLFWwindow* window)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void InGameScene::onKey(int key, int scancode, int action, int mods)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* misschien iets van als niet in settings dan hoeft alleen escape een knop zijn als reserve optie. Als wel in settings, dan heb je hetzelfde hoe je in het in het begin scherm hebt.
|
||||||
|
**/
|
||||||
|
}
|
||||||
17
src/scenes/inGameScene.h
Normal file
17
src/scenes/inGameScene.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "scene.h"
|
||||||
|
class InGameScene : public Scene
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
void start() override;
|
||||||
|
void stop() override;
|
||||||
|
void render() override;
|
||||||
|
void update(GLFWwindow* window) override;
|
||||||
|
void onKey(int key, int scancode, int action, int mods) override;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
#include <iostream>
|
|
||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include "in_Game_Scene.h"
|
|
||||||
#include "startup_Scene.h"
|
|
||||||
#include "../gui/gui_interactable.h"
|
|
||||||
#include "../models/model.h"
|
|
||||||
#include "../renderEngine/loader.h"
|
|
||||||
#include "../renderEngine/obj_loader.h"
|
|
||||||
#include "../renderEngine/renderer.h"
|
|
||||||
#include "../shaders/entity_shader.h"
|
|
||||||
#include "../toolbox/toolbox.h"
|
|
||||||
#include <opencv2/core/base.hpp>
|
|
||||||
#include "../computervision/HandDetectRegion.h"
|
|
||||||
#include "../computervision/ObjectDetection.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
std::vector<entities::Entity> entities;
|
|
||||||
std::vector<entities::Light> lights;
|
|
||||||
models::RawModel raw_model;
|
|
||||||
models::ModelTexture texture;
|
|
||||||
shaders::EntityShader *shader;
|
|
||||||
shaders::GuiShader *gui_shader;
|
|
||||||
entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0));
|
|
||||||
std::vector<gui::GuiTexture*> guis;
|
|
||||||
|
|
||||||
|
|
||||||
std::vector<computervision::HandDetectRegion> regions;
|
|
||||||
computervision::HandDetectRegion reg_left("left", 0, 0, 150, 150), reg_right("right", 0, 0, 150, 150), reg_up("up", 0, 0, 150, 150);
|
|
||||||
|
|
||||||
|
|
||||||
In_Game_Scene::In_Game_Scene()
|
|
||||||
{
|
|
||||||
shader = new shaders::EntityShader;
|
|
||||||
shader->Init();
|
|
||||||
render_engine::renderer::Init(*shader);
|
|
||||||
|
|
||||||
gui_shader = new shaders::GuiShader();
|
|
||||||
gui_shader->Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
scene::Scenes scene::In_Game_Scene::start(GLFWwindow* window)
|
|
||||||
{
|
|
||||||
// set up squares according to size of camera input
|
|
||||||
cv::Mat camera_frame;
|
|
||||||
static_camera::getCap().read(camera_frame); // get camera frame to know the width and heigth
|
|
||||||
reg_left.SetXPos(10);
|
|
||||||
reg_left.SetYPos(camera_frame.rows / 2 - reg_left.GetHeight()/2);
|
|
||||||
reg_right.SetXPos(camera_frame.cols - 10 - reg_right.GetWidth());
|
|
||||||
reg_right.SetYPos(camera_frame.rows / 2 - reg_right.GetHeight()/2);
|
|
||||||
reg_up.SetXPos(camera_frame.cols / 2 - reg_up.GetWidth() / 2);
|
|
||||||
reg_up.SetYPos(10);
|
|
||||||
|
|
||||||
|
|
||||||
raw_model = render_engine::LoadObjModel("res/House.obj");
|
|
||||||
texture = { render_engine::loader::LoadTexture("res/Texture.png") };
|
|
||||||
texture.shine_damper = 10;
|
|
||||||
texture.reflectivity = 0;
|
|
||||||
models::TexturedModel model = { raw_model, texture };
|
|
||||||
|
|
||||||
int z = 0;
|
|
||||||
for (int i = 0; i < 5; ++i)
|
|
||||||
{
|
|
||||||
entities.push_back(entities::Entity(model, glm::vec3(0, -50, -50 - z), glm::vec3(0, 90, 0), 20));
|
|
||||||
z += (raw_model.model_size.x * 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5)));
|
|
||||||
lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
|
||||||
lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f)));
|
|
||||||
|
|
||||||
// GUI stuff
|
|
||||||
gui::Button button(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.5f, 0.0f), glm::vec2(0.25f, 0.25f));
|
|
||||||
button.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png"));
|
|
||||||
button.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png"));
|
|
||||||
button.SetOnClickAction([]()
|
|
||||||
{
|
|
||||||
std::cout << "I got clicked on!" << std::endl;
|
|
||||||
});
|
|
||||||
guis.push_back(&button);
|
|
||||||
|
|
||||||
|
|
||||||
while (return_value == scene::Scenes::INGAME)
|
|
||||||
{
|
|
||||||
update(window);
|
|
||||||
button.Update(window);
|
|
||||||
render();
|
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
|
||||||
glfwPollEvents();
|
|
||||||
}
|
|
||||||
shader->CleanUp();
|
|
||||||
gui_shader->CleanUp();
|
|
||||||
render_engine::loader::CleanUp();
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::render()
|
|
||||||
{
|
|
||||||
// Render
|
|
||||||
render_engine::renderer::Prepare();
|
|
||||||
|
|
||||||
shader->Start();
|
|
||||||
shader->LoadSkyColor(render_engine::renderer::SKY_COLOR);
|
|
||||||
shader->LoadLights(lights);
|
|
||||||
shader->LoadViewMatrix(camera);
|
|
||||||
|
|
||||||
// Renders each entity in the entities list
|
|
||||||
for (entities::Entity& entity : entities)
|
|
||||||
{
|
|
||||||
render_engine::renderer::Render(entity, *shader);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render GUI items
|
|
||||||
render_engine::renderer::Render(guis, *gui_shader);
|
|
||||||
|
|
||||||
// Stop rendering the entities
|
|
||||||
shader->Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::update(GLFWwindow* window)
|
|
||||||
{
|
|
||||||
camera.Move(window);
|
|
||||||
update_hand_detection();
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods)
|
|
||||||
{
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
|
|
||||||
{
|
|
||||||
cv::destroyWindow("camera");
|
|
||||||
return_value = scene::Scenes::STOP;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_B) == GLFW_PRESS)
|
|
||||||
{
|
|
||||||
reg_left.CalibrateBackground();
|
|
||||||
reg_right.CalibrateBackground();
|
|
||||||
reg_up.CalibrateBackground();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
|
|
||||||
{
|
|
||||||
std::vector<int> tresholds = reg_left.CalculateSkinTresholds();
|
|
||||||
reg_right.setSkinTresholds(tresholds);
|
|
||||||
reg_up.setSkinTresholds(tresholds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::In_Game_Scene::update_hand_detection()
|
|
||||||
{
|
|
||||||
cv::Mat camera_frame;
|
|
||||||
static_camera::getCap().read(camera_frame);
|
|
||||||
reg_left.DetectHand(camera_frame);
|
|
||||||
reg_right.DetectHand(camera_frame);
|
|
||||||
reg_up.DetectHand(camera_frame);
|
|
||||||
|
|
||||||
cv::imshow("camera", camera_frame);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "scene.h"
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
|
|
||||||
class In_Game_Scene : public scene::Scene
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
scene::Scenes return_value = scene::Scenes::INGAME;
|
|
||||||
void update_hand_detection();
|
|
||||||
|
|
||||||
public:
|
|
||||||
In_Game_Scene();
|
|
||||||
|
|
||||||
Scenes start(GLFWwindow* window) override;
|
|
||||||
void render() override;
|
|
||||||
void update(GLFWwindow* window) override;
|
|
||||||
void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
1
src/scenes/scene.cpp
Normal file
1
src/scenes/scene.cpp
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#include "scene.h"
|
||||||
@@ -1,31 +1,23 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <map>
|
|
||||||
|
class Scene
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void start() = 0;
|
||||||
|
virtual void stop() = 0;
|
||||||
|
virtual void render() = 0;
|
||||||
|
virtual void update(GLFWwindow* window) = 0;
|
||||||
|
virtual void onKey(int key, int scancode, int action, int mods) {};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
namespace scene {
|
|
||||||
|
|
||||||
enum class Scenes
|
enum class Scenes
|
||||||
{
|
{
|
||||||
STARTUP,
|
STARTUP,
|
||||||
INGAME,
|
INGAME,
|
||||||
GAMEOVER,
|
GAMEOVER,
|
||||||
CALIBRATION,
|
SETTINGS,
|
||||||
STOP
|
CALIBRATION
|
||||||
};
|
};
|
||||||
|
|
||||||
class Scene
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual Scenes start(GLFWwindow* window) = 0;
|
|
||||||
virtual void render() = 0;
|
|
||||||
virtual void update(GLFWwindow* window) = 0;
|
|
||||||
virtual void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) {};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
31
src/scenes/startupScene.cpp
Normal file
31
src/scenes/startupScene.cpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#include "startupScene.h"
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
void StartupScene::start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::stop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::render()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::update(GLFWwindow* window)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartupScene::onKey(int key, int scancode, int action, int mods)
|
||||||
|
{
|
||||||
|
if (key == GLFW_KEY_DOWN && action == GLFW_RELEASE)
|
||||||
|
{
|
||||||
|
//ideetje voor het scrollen door het menu heen
|
||||||
|
//menuIndex = (menuIndex + 1) % 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
15
src/scenes/startupScene.h
Normal file
15
src/scenes/startupScene.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "scene.h"
|
||||||
|
class StartupScene : public Scene
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int menuIndex;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void start() override;
|
||||||
|
void stop() override;
|
||||||
|
void render() override;
|
||||||
|
void update(GLFWwindow* window) override;
|
||||||
|
void onKey(int key, int scancode, int action, int mods) override;
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
#include <GL/glew.h>
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <map>
|
|
||||||
#include "startup_Scene.h"
|
|
||||||
#include "../computervision/ObjectDetection.h"
|
|
||||||
#include "../computervision/HandDetectRegion.h"
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
computervision::ObjectDetection objDetect;
|
|
||||||
scene::Scenes scene::Startup_Scene::start(GLFWwindow *window)
|
|
||||||
{
|
|
||||||
while (return_value == scene::Scenes::STARTUP)
|
|
||||||
{
|
|
||||||
render();
|
|
||||||
update(window);
|
|
||||||
|
|
||||||
glfwSwapBuffers(window);
|
|
||||||
glfwPollEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::Startup_Scene::render()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::Startup_Scene::update(GLFWwindow* window)
|
|
||||||
{
|
|
||||||
bool hand_present;
|
|
||||||
objDetect.DetectHand(objDetect.ReadCamera(),hand_present);
|
|
||||||
}
|
|
||||||
|
|
||||||
void scene::Startup_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods)
|
|
||||||
{
|
|
||||||
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
|
|
||||||
{
|
|
||||||
return_value = scene::Scenes::INGAME;
|
|
||||||
cv::destroyWindow("camera");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include "scene.h"
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
namespace scene
|
|
||||||
{
|
|
||||||
extern GLFWwindow* window;
|
|
||||||
|
|
||||||
class Startup_Scene : public scene::Scene
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
scene::Scenes return_value = scene::Scenes::STARTUP;
|
|
||||||
|
|
||||||
public:
|
|
||||||
Scenes start(GLFWwindow* window) override;
|
|
||||||
void render() override;
|
|
||||||
void update(GLFWwindow* window) override;
|
|
||||||
void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace toolbox
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This class represents a timer which needs to be updated
|
|
||||||
* every frame to work correctly.
|
|
||||||
*/
|
|
||||||
class Timer
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
float current_time;
|
|
||||||
float final_time;
|
|
||||||
bool has_finished;
|
|
||||||
|
|
||||||
public:
|
|
||||||
/*
|
|
||||||
* @brief: Constructor to make the timer
|
|
||||||
*
|
|
||||||
* @param final_time: The time which the timer needs to count to
|
|
||||||
*/
|
|
||||||
Timer(float final_time): current_time(0), final_time(final_time), has_finished(false) {}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: Updates the timer. Call this method once every iteration in the game loop
|
|
||||||
*
|
|
||||||
* @param delta: The deltatime of the game
|
|
||||||
*/
|
|
||||||
void UpdateTimer(const double delta)
|
|
||||||
{
|
|
||||||
current_time += delta;
|
|
||||||
|
|
||||||
if (current_time >= final_time)
|
|
||||||
{
|
|
||||||
has_finished = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief: Returns if the timer has finished
|
|
||||||
*
|
|
||||||
* @return: True if the timer has finished
|
|
||||||
*/
|
|
||||||
bool HasFinished() const { return has_finished; }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -19,18 +19,13 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\collision\collision_handler.cpp" />
|
<ClCompile Include="src\scenes\inGameScene.cpp" />
|
||||||
<ClCompile Include="src\computervision\calibration\HandCalibrator.cpp" />
|
<ClCompile Include="src\scenes\scene.cpp" />
|
||||||
<ClCompile Include="src\computervision\HandDetectRegion.cpp" />
|
|
||||||
<ClCompile Include="src\scenes\in_Game_Scene.cpp" />
|
|
||||||
<ClCompile Include="src\computervision\async\async_arm_detection.cpp" />
|
|
||||||
<ClCompile Include="src\computervision\ObjectDetection.cpp" />
|
<ClCompile Include="src\computervision\ObjectDetection.cpp" />
|
||||||
<ClCompile Include="src\computervision\OpenPoseVideo.cpp" />
|
|
||||||
<ClCompile Include="src\computervision\SkinDetector.cpp" />
|
<ClCompile Include="src\computervision\SkinDetector.cpp" />
|
||||||
<ClCompile Include="src\computervision\FingerCount.cpp" />
|
<ClCompile Include="src\computervision\FingerCount.cpp" />
|
||||||
<ClCompile Include="src\computervision\BackgroundRemover.cpp" />
|
<ClCompile Include="src\computervision\BackgroundRemover.cpp" />
|
||||||
<ClCompile Include="src\entities\camera.cpp" />
|
<ClCompile Include="src\entities\camera.cpp" />
|
||||||
<ClCompile Include="src\entities\collision_entity.cpp" />
|
|
||||||
<ClCompile Include="src\entities\entity.cpp" />
|
<ClCompile Include="src\entities\entity.cpp" />
|
||||||
<ClCompile Include="src\gui\gui_interactable.cpp" />
|
<ClCompile Include="src\gui\gui_interactable.cpp" />
|
||||||
<ClCompile Include="src\main.cpp" />
|
<ClCompile Include="src\main.cpp" />
|
||||||
@@ -41,25 +36,16 @@
|
|||||||
<ClCompile Include="src\shaders\shader_program.cpp" />
|
<ClCompile Include="src\shaders\shader_program.cpp" />
|
||||||
<ClCompile Include="src\shaders\entity_shader.cpp" />
|
<ClCompile Include="src\shaders\entity_shader.cpp" />
|
||||||
<ClCompile Include="src\toolbox\toolbox.cpp" />
|
<ClCompile Include="src\toolbox\toolbox.cpp" />
|
||||||
<ClCompile Include="src\scenes\startup_Scene.cpp" />
|
<ClCompile Include="src\scenes\startupScene.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="src\collision\collision.h" />
|
<ClInclude Include="src\scenes\inGameScene.h" />
|
||||||
<ClInclude Include="src\collision\collision_handler.h" />
|
|
||||||
<ClInclude Include="src\computervision\calibration\HandCalibrator.h" />
|
|
||||||
<ClInclude Include="src\computervision\calibration\StaticSkinTreshold.h" />
|
|
||||||
<ClInclude Include="src\computervision\HandDetectRegion.h" />
|
|
||||||
<ClInclude Include="src\scenes\in_Game_Scene.h" />
|
|
||||||
<ClInclude Include="src\scenes\scene.h" />
|
<ClInclude Include="src\scenes\scene.h" />
|
||||||
<ClInclude Include="src\computervision\async\async_arm_detection.h" />
|
|
||||||
<ClInclude Include="src\computervision\async\StaticCameraInstance.h" />
|
|
||||||
<ClInclude Include="src\computervision\FingerCount.h" />
|
<ClInclude Include="src\computervision\FingerCount.h" />
|
||||||
<ClInclude Include="src\computervision\BackgroundRemover.h" />
|
<ClInclude Include="src\computervision\BackgroundRemover.h" />
|
||||||
<ClInclude Include="src\computervision\OpenPoseVideo.h" />
|
|
||||||
<ClInclude Include="src\computervision\SkinDetector.h" />
|
<ClInclude Include="src\computervision\SkinDetector.h" />
|
||||||
<ClInclude Include="src\computervision\ObjectDetection.h" />
|
<ClInclude Include="src\computervision\ObjectDetection.h" />
|
||||||
<ClInclude Include="src\entities\camera.h" />
|
<ClInclude Include="src\entities\camera.h" />
|
||||||
<ClInclude Include="src\entities\collision_entity.h" />
|
|
||||||
<ClInclude Include="src\entities\entity.h" />
|
<ClInclude Include="src\entities\entity.h" />
|
||||||
<ClInclude Include="src\entities\light.h" />
|
<ClInclude Include="src\entities\light.h" />
|
||||||
<ClInclude Include="src\gui\gui_element.h" />
|
<ClInclude Include="src\gui\gui_element.h" />
|
||||||
@@ -72,19 +58,12 @@
|
|||||||
<ClInclude Include="src\shaders\shader_program.h" />
|
<ClInclude Include="src\shaders\shader_program.h" />
|
||||||
<ClInclude Include="src\shaders\entity_shader.h" />
|
<ClInclude Include="src\shaders\entity_shader.h" />
|
||||||
<ClInclude Include="src\stb_image.h" />
|
<ClInclude Include="src\stb_image.h" />
|
||||||
<ClInclude Include="src\toolbox\Timer.h" />
|
|
||||||
<ClInclude Include="src\toolbox\toolbox.h" />
|
<ClInclude Include="src\toolbox\toolbox.h" />
|
||||||
<ClInclude Include="src\scenes\startup_Scene.h" />
|
<ClInclude Include="src\scenes\startupScene.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Xml Include="res\haarcascade_frontalface_alt.xml" />
|
<Xml Include="res\haarcascade_frontalface_alt.xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\Avans Hogeschool\Kim Veldhoen - Proftaak 2.4\pose_iter_160000.caffemodel" />
|
|
||||||
<None Include="res\pose\coco\pose_deploy_linevec.prototxt" />
|
|
||||||
<None Include="res\pose\mpi\pose_deploy_linevec_faster_4_stages.prototxt" />
|
|
||||||
<None Include="res\pose\mpi\pose_iter_160000.caffemodel" />
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{A7ECF1BE-DB22-4BF7-BFF6-E3BF72691EE6}</ProjectGuid>
|
<ProjectGuid>{A7ECF1BE-DB22-4BF7-BFF6-E3BF72691EE6}</ProjectGuid>
|
||||||
@@ -143,18 +122,16 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<IncludePath>C:\opencv\build\include;$(IncludePath);C:\opencv\opencv\build\include;C:\opencv\build\include</IncludePath>
|
<IncludePath>C:\opencv\build\include;$(IncludePath);C:\opencv\opencv\build\include</IncludePath>
|
||||||
<LibraryPath>C:\opencv\build\x64\vc15\lib;$(LibraryPath);C:\opencv\opencv\build\x64\vc15\lib;C:\opencv\build\x64\vc15\lib</LibraryPath>
|
<LibraryPath>C:\opencv\build\x64\vc15\lib;$(LibraryPath);C:\opencv\opencv\build\x64\vc15\lib</LibraryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);;C:\opencv\opencv\build\include;C:\opencv\build\include</IncludePath>
|
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);;C:\opencv\opencv\build\include</IncludePath>
|
||||||
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);C:\opencv\opencv\build\x64\vc15\lib;C:\opencv\build\x64\vc15\lib</LibraryPath>
|
<LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);C:\opencv\opencv\build\x64\vc15\lib</LibraryPath>
|
||||||
<IncludePath>C:\opencv\build\include\;$(VC_IncludePath);$(WindowsSDK_IncludePath);C:\opencv\opencv\build\include</IncludePath>
|
|
||||||
<LibraryPath>C:\opencv\build\x64\vc15\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);C:\opencv\opencv\build\x64\vc15\lib</LibraryPath>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
@@ -186,7 +163,7 @@
|
|||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>opencv_world452d.lib;%(AdditionalDependencies); opencv_world452.lib;opencv_world452d.lib</AdditionalDependencies>
|
<AdditionalDependencies>opencv_world452d.lib;%(AdditionalDependencies); opencv_world452.lib</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@@ -227,8 +204,7 @@
|
|||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>$(SolutionDir)lib\glfw-3.3.2\$(Platform);$(SolutionDir)lib\glew-2.1.0\lib\Release\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies); opencv_world452.lib;opencv_world452d.lib</AdditionalDependencies>
|
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies); opencv_world452.lib</AdditionalDependencies>
|
||||||
<AdditionalDependencies>opencv_world452.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|||||||
@@ -1,70 +1,141 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\collision\collision_handler.cpp" />
|
<Filter Include="Source Files">
|
||||||
<ClCompile Include="src\scenes\in_Game_Scene.cpp" />
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
<ClCompile Include="src\computervision\async\async_arm_detection.cpp" />
|
<Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
<ClCompile Include="src\computervision\ObjectDetection.cpp" />
|
</Filter>
|
||||||
<ClCompile Include="src\computervision\OpenPoseVideo.cpp" />
|
<Filter Include="Header Files">
|
||||||
<ClCompile Include="src\computervision\SkinDetector.cpp" />
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
<ClCompile Include="src\computervision\FingerCount.cpp" />
|
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||||
<ClCompile Include="src\computervision\BackgroundRemover.cpp" />
|
</Filter>
|
||||||
<ClCompile Include="src\entities\camera.cpp" />
|
<Filter Include="Resource Files">
|
||||||
<ClCompile Include="src\entities\collision_entity.cpp" />
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
<ClCompile Include="src\entities\entity.cpp" />
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
<ClCompile Include="src\gui\gui_interactable.cpp" />
|
</Filter>
|
||||||
<ClCompile Include="src\main.cpp" />
|
|
||||||
<ClCompile Include="src\renderEngine\loader.cpp" />
|
|
||||||
<ClCompile Include="src\renderEngine\obj_loader.cpp" />
|
|
||||||
<ClCompile Include="src\renderEngine\renderer.cpp" />
|
|
||||||
<ClCompile Include="src\shaders\gui_shader.cpp" />
|
|
||||||
<ClCompile Include="src\shaders\shader_program.cpp" />
|
|
||||||
<ClCompile Include="src\shaders\entity_shader.cpp" />
|
|
||||||
<ClCompile Include="src\toolbox\toolbox.cpp" />
|
|
||||||
<ClCompile Include="src\scenes\startup_Scene.cpp" />
|
|
||||||
<ClCompile Include="src\computervision\calibration\HandCalibrator.cpp" />
|
|
||||||
<ClCompile Include="src\computervision\HandDetectRegion.cpp" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="src\collision\collision.h" />
|
<ClCompile Include="src\entities\Camera.cpp">
|
||||||
<ClInclude Include="src\collision\collision_handler.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\scenes\in_Game_Scene.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\scenes\scene.h" />
|
<ClCompile Include="src\entities\Entity.cpp">
|
||||||
<ClInclude Include="src\computervision\async\async_arm_detection.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\computervision\async\StaticCameraInstance.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\computervision\FingerCount.h" />
|
<ClCompile Include="src\renderEngine\Loader.cpp">
|
||||||
<ClInclude Include="src\computervision\BackgroundRemover.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\computervision\OpenPoseVideo.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\computervision\SkinDetector.h" />
|
<ClCompile Include="src\renderEngine\Renderer.cpp">
|
||||||
<ClInclude Include="src\computervision\ObjectDetection.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\entities\camera.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\entities\collision_entity.h" />
|
<ClCompile Include="src\main.cpp">
|
||||||
<ClInclude Include="src\entities\entity.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\entities\light.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\gui\gui_element.h" />
|
<ClCompile Include="src\shaders\shader_program.cpp">
|
||||||
<ClInclude Include="src\gui\gui_interactable.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\models\model.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\renderEngine\loader.h" />
|
<ClCompile Include="src\renderEngine\obj_loader.cpp">
|
||||||
<ClInclude Include="src\renderEngine\obj_loader.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\renderEngine\renderer.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\shaders\gui_shader.h" />
|
<ClCompile Include="src\toolbox\toolbox.cpp">
|
||||||
<ClInclude Include="src\shaders\shader_program.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\shaders\entity_shader.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\stb_image.h" />
|
<ClCompile Include="src\shaders\entity_shader.cpp">
|
||||||
<ClInclude Include="src\toolbox\Timer.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\toolbox\toolbox.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\scenes\startup_Scene.h" />
|
<ClCompile Include="src\shaders\gui_shader.cpp">
|
||||||
<ClInclude Include="src\computervision\calibration\HandCalibrator.h" />
|
<Filter>Source Files</Filter>
|
||||||
<ClInclude Include="src\computervision\HandDetectRegion.h" />
|
</ClCompile>
|
||||||
<ClInclude Include="src\computervision\calibration\StaticSkinTreshold.h" />
|
<ClCompile Include="src\gui\gui_interactable.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\computervision\ObjectDetection.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\computervision\SkinDetector.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\computervision\FingerCount.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\computervision\BackgroundRemover.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\scenes\scene.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\scenes\startupScene.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\scenes\inGameScene.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\entities\Camera.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\entities\Entity.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\models\Model.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\renderEngine\Loader.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\renderEngine\Renderer.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\stb_image.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\shaders\shader_program.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\renderEngine\obj_loader.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\toolbox\toolbox.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\entities\light.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\shaders\entity_shader.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\shaders\gui_shader.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\gui\gui_element.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\gui\gui_interactable.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\computervision\ObjectDetection.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\computervision\SkinDetector.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\computervision\FingerCount.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\computervision\BackgroundRemover.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\scenes\scene.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\scenes\startupScene.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\scenes\inGameScene.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Xml Include="res\haarcascade_frontalface_alt.xml" />
|
<Xml Include="res\haarcascade_frontalface_alt.xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\Avans Hogeschool\Kim Veldhoen - Proftaak 2.4\pose_iter_160000.caffemodel" />
|
|
||||||
<None Include="res\pose\coco\pose_deploy_linevec.prototxt" />
|
|
||||||
<None Include="res\pose\mpi\pose_deploy_linevec_faster_4_stages.prototxt" />
|
|
||||||
<None Include="res\pose\mpi\pose_iter_160000.caffemodel" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
Reference in New Issue
Block a user