diff --git a/src/computervision/HandDetectRegion.cpp b/src/computervision/HandDetectRegion.cpp index 9c451a9..3ef6c28 100644 --- a/src/computervision/HandDetectRegion.cpp +++ b/src/computervision/HandDetectRegion.cpp @@ -38,10 +38,15 @@ namespace computervision /*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); + //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) @@ -60,7 +65,7 @@ namespace computervision 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), Scalar(255, 255, 255)); + 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; } @@ -84,6 +89,7 @@ namespace computervision std::vector HandDetectRegion::CalculateSkinTresholds() { std::cout << "calibrating skin " << region_id << std::endl; + hand_calibrator.SetSkinCalibration(true); return skin_detector.calibrateAndReturn(frame_out); } @@ -91,6 +97,7 @@ namespace computervision { std::cout << "setting skin " << region_id << std::endl; skin_detector.setTresholds(tresholds); + hand_calibrator.SetSkinCalibration(true); } } diff --git a/src/computervision/calibration/HandCalibrator.cpp b/src/computervision/calibration/HandCalibrator.cpp index caa4d03..dcf2911 100644 --- a/src/computervision/calibration/HandCalibrator.cpp +++ b/src/computervision/calibration/HandCalibrator.cpp @@ -3,7 +3,7 @@ #include #define MIN_MENU_HAND_SIZE 10000 -#define MIN_GAME_HAND_SIZE 4000 // todo change +#define MIN_GAME_HAND_SIZE 3000 // todo change namespace computervision { namespace handcalibration @@ -25,11 +25,7 @@ namespace computervision 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); - 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); + DrawBackgroundSkinCalibrated(output_frame); if (hand_present) { @@ -38,6 +34,16 @@ namespace computervision } } + 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; @@ -65,11 +71,10 @@ namespace computervision if (points.size() == 0) return false; - std::cout << std::endl; for (int p = 0; p < points.size(); p++) { int area = cv::contourArea(points[p]); - std::cout << area << std::endl; + if (type == handcalibration::HandDetectionType::MENU) if (area > MIN_MENU_HAND_SIZE) return true; diff --git a/src/computervision/calibration/HandCalibrator.h b/src/computervision/calibration/HandCalibrator.h index fadc66d..ca71fde 100644 --- a/src/computervision/calibration/HandCalibrator.h +++ b/src/computervision/calibration/HandCalibrator.h @@ -62,6 +62,8 @@ namespace computervision */ void SetAmountOfFingers(int amount); + void DrawBackgroundSkinCalibrated(cv::Mat& output_frame); + private: bool background_calibrated; diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 0eede19..44db2e9 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -44,6 +44,7 @@ namespace scene scene::Scenes scene::In_Game_Scene::start(GLFWwindow* window) { + // set up squares according to size of camera input cv::Mat camera_frame = objDetect.ReadCamera(); // get camera frame to know the width and heigth reg_left.SetXPos(10); reg_left.SetYPos(camera_frame.rows / 2 - reg_left.GetHeight()/2);