[ADD] better info on camera
This commit is contained in:
@@ -38,10 +38,15 @@ namespace computervision
|
|||||||
/*imshow("handDetection", fingerCountDebug);*/
|
/*imshow("handDetection", fingerCountDebug);*/
|
||||||
|
|
||||||
hand_present = hand_calibrator.CheckIfHandPresent(handMask,handcalibration::HandDetectionType::GAME);
|
hand_present = hand_calibrator.CheckIfHandPresent(handMask,handcalibration::HandDetectionType::GAME);
|
||||||
std::string text = (hand_present ? "hand" : "no");
|
//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);
|
//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);
|
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 HandDetectRegion::GenerateHandMaskSquare(cv::Mat img)
|
||||||
@@ -60,7 +65,7 @@ namespace computervision
|
|||||||
bool HandDetectRegion::DrawHandMask(cv::Mat* input)
|
bool HandDetectRegion::DrawHandMask(cv::Mat* input)
|
||||||
{
|
{
|
||||||
if (!hand_mask_generated) return false;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,6 +89,7 @@ namespace computervision
|
|||||||
std::vector<int> HandDetectRegion::CalculateSkinTresholds()
|
std::vector<int> HandDetectRegion::CalculateSkinTresholds()
|
||||||
{
|
{
|
||||||
std::cout << "calibrating skin " << region_id << std::endl;
|
std::cout << "calibrating skin " << region_id << std::endl;
|
||||||
|
hand_calibrator.SetSkinCalibration(true);
|
||||||
return skin_detector.calibrateAndReturn(frame_out);
|
return skin_detector.calibrateAndReturn(frame_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +97,7 @@ namespace computervision
|
|||||||
{
|
{
|
||||||
std::cout << "setting skin " << region_id << std::endl;
|
std::cout << "setting skin " << region_id << std::endl;
|
||||||
skin_detector.setTresholds(tresholds);
|
skin_detector.setTresholds(tresholds);
|
||||||
|
hand_calibrator.SetSkinCalibration(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define MIN_MENU_HAND_SIZE 10000
|
#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 computervision
|
||||||
{
|
{
|
||||||
namespace handcalibration
|
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::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::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);
|
DrawBackgroundSkinCalibrated(output_frame);
|
||||||
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);
|
|
||||||
|
|
||||||
if (hand_present)
|
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)
|
void HandCalibrator::SetSkinCalibration(bool val)
|
||||||
{
|
{
|
||||||
skintone_calibrated = val;
|
skintone_calibrated = val;
|
||||||
@@ -65,11 +71,10 @@ namespace computervision
|
|||||||
|
|
||||||
if (points.size() == 0) return false;
|
if (points.size() == 0) return false;
|
||||||
|
|
||||||
std::cout << std::endl;
|
|
||||||
for (int p = 0; p < points.size(); p++)
|
for (int p = 0; p < points.size(); p++)
|
||||||
{
|
{
|
||||||
int area = cv::contourArea(points[p]);
|
int area = cv::contourArea(points[p]);
|
||||||
std::cout << area << std::endl;
|
|
||||||
if (type == handcalibration::HandDetectionType::MENU)
|
if (type == handcalibration::HandDetectionType::MENU)
|
||||||
if (area > MIN_MENU_HAND_SIZE) return true;
|
if (area > MIN_MENU_HAND_SIZE) return true;
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ namespace computervision
|
|||||||
*/
|
*/
|
||||||
void SetAmountOfFingers(int amount);
|
void SetAmountOfFingers(int amount);
|
||||||
|
|
||||||
|
void DrawBackgroundSkinCalibrated(cv::Mat& output_frame);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool background_calibrated;
|
bool background_calibrated;
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ namespace scene
|
|||||||
|
|
||||||
scene::Scenes scene::In_Game_Scene::start(GLFWwindow* window)
|
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
|
cv::Mat camera_frame = objDetect.ReadCamera(); // get camera frame to know the width and heigth
|
||||||
reg_left.SetXPos(10);
|
reg_left.SetXPos(10);
|
||||||
reg_left.SetYPos(camera_frame.rows / 2 - reg_left.GetHeight()/2);
|
reg_left.SetYPos(camera_frame.rows / 2 - reg_left.GetHeight()/2);
|
||||||
|
|||||||
Reference in New Issue
Block a user