[FIX] detecting hand when its just a finger or hair

This commit is contained in:
Sem van der Hoeven
2021-06-04 14:48:19 +02:00
parent 81dec3b9f4
commit ca2959bf2d
4 changed files with 19 additions and 7 deletions

View File

@@ -2,6 +2,7 @@
#include <opencv2/imgproc.hpp> #include <opencv2/imgproc.hpp>
#include <iostream> #include <iostream>
#define MIN_HAND_SIZE 10000
namespace computervision namespace computervision
{ {
@@ -10,9 +11,16 @@ namespace computervision
std::vector<std::vector<cv::Point>> points; std::vector<std::vector<cv::Point>> points;
cv::Mat imgCont; cv::Mat imgCont;
cv::findContours(inputImage, points, cv::RetrievalModes::RETR_LIST, cv::ContourApproximationModes::CHAIN_APPROX_SIMPLE); cv::findContours(inputImage, points, cv::RetrievalModes::RETR_LIST, cv::ContourApproximationModes::CHAIN_APPROX_SIMPLE);
bool hand_present = points.size() > 0;
std::cout << (hand_present ? "hey a hand!" : "damn no hand") << std::endl; if (points.size() == 0) return false;
return hand_present;
for (int p = 0; p < points.size(); p++)
{
int area = cv::contourArea(points[p]);
if (area > MIN_HAND_SIZE) return true;
}
return false;
} }
} }

View File

@@ -41,7 +41,7 @@ namespace computervision
return cap; return cap;
} }
bool ObjectDetection::detectHand(Mat cameraFrame) bool ObjectDetection::detectHand(Mat cameraFrame, bool& hand_present)
{ {
Mat inputFrame = generateHandMaskSquare(cameraFrame); Mat inputFrame = generateHandMaskSquare(cameraFrame);
frameOut = inputFrame.clone(); frameOut = inputFrame.clone();
@@ -72,7 +72,7 @@ namespace computervision
//imshow("handMask", handMask); //imshow("handMask", handMask);
//imshow("handDetection", fingerCountDebug); //imshow("handDetection", fingerCountDebug);
check_if_hand_present(handMask); hand_present = check_if_hand_present(handMask);

View File

@@ -54,9 +54,10 @@ namespace computervision
* @brief detects a hand based on the given hand mask input frame. * @brief detects a hand based on the given hand mask input frame.
* *
* @param inputFrame the input frame from the camera * @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 * @return true if hand is open, false if hand is closed
*/ */
bool detectHand(cv::Mat cameraFrame); bool detectHand(cv::Mat cameraFrame, bool& hand_present);
/** /**
* @brief draws the hand mask rectangle on the given input matrix. * @brief draws the hand mask rectangle on the given input matrix.

View File

@@ -3,6 +3,7 @@
#include <map> #include <map>
#include "startup_Scene.h" #include "startup_Scene.h"
#include "../computervision/ObjectDetection.h" #include "../computervision/ObjectDetection.h"
#include <iostream>
namespace scene namespace scene
{ {
@@ -29,7 +30,9 @@ namespace scene
void scene::Startup_Scene::update(GLFWwindow* window) void scene::Startup_Scene::update(GLFWwindow* window)
{ {
objDetect.detectHand(objDetect.readCamera()); bool hand_detected = false;
objDetect.detectHand(objDetect.readCamera(),hand_detected);
if (hand_detected) std::cout << "there's a hand!" << std::endl;
} }