added face forehead detection
This commit is contained in:
parent
14144ccd27
commit
b2971408f4
|
|
@ -22,7 +22,7 @@ CMAKE_AR:FILEPATH=/usr/bin/ar
|
||||||
|
|
||||||
//Choose the type of build, options are: None Debug Release RelWithDebInfo
|
//Choose the type of build, options are: None Debug Release RelWithDebInfo
|
||||||
// MinSizeRel ...
|
// MinSizeRel ...
|
||||||
CMAKE_BUILD_TYPE:STRING=
|
CMAKE_BUILD_TYPE:STRING=Debug
|
||||||
|
|
||||||
//Enable/Disable color output during build.
|
//Enable/Disable color output during build.
|
||||||
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.16
|
# Generated by "Unix Makefiles" Generator, CMake Version 3.16
|
||||||
|
|
||||||
# compile CXX with /usr/bin/c++
|
# compile CXX with /usr/bin/c++
|
||||||
CXX_FLAGS =
|
CXX_FLAGS = -g
|
||||||
|
|
||||||
CXX_DEFINES =
|
CXX_DEFINES =
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
/usr/bin/c++ CMakeFiles/OpTests.dir/ppg.cpp.o -o OpTests -Wl,-rpath,/home/tom/freenect2/lib /usr/lib/x86_64-linux-gnu/libopencv_stitching.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_aruco.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_bgsegm.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_bioinspired.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_ccalib.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dnn_objdetect.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dnn_superres.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dpm.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_face.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_freetype.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_fuzzy.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_hdf.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_hfs.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_img_hash.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_line_descriptor.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_quality.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_reg.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_rgbd.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_saliency.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_shape.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_stereo.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_structured_light.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_superres.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_surface_matching.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_tracking.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_videostab.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_viz.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_xobjdetect.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_xphoto.so.4.2.0 /home/tom/freenect2/lib/libfreenect2.so -lpthread /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_datasets.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_plot.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_text.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dnn.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_ml.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_phase_unwrapping.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_optflow.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_ximgproc.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_video.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_videoio.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_flann.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_photo.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_core.so.4.2.0
|
/usr/bin/c++ -g CMakeFiles/OpTests.dir/ppg.cpp.o -o OpTests -Wl,-rpath,/home/tom/freenect2/lib /usr/lib/x86_64-linux-gnu/libopencv_stitching.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_aruco.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_bgsegm.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_bioinspired.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_ccalib.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dnn_objdetect.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dnn_superres.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dpm.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_face.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_freetype.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_fuzzy.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_hdf.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_hfs.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_img_hash.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_line_descriptor.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_quality.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_reg.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_rgbd.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_saliency.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_shape.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_stereo.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_structured_light.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_superres.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_surface_matching.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_tracking.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_videostab.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_viz.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_xobjdetect.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_xphoto.so.4.2.0 /home/tom/freenect2/lib/libfreenect2.so -lpthread /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_datasets.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_plot.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_text.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_dnn.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_ml.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_phase_unwrapping.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_optflow.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_ximgproc.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_video.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_videoio.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_flann.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_photo.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0 /usr/lib/x86_64-linux-gnu/libopencv_core.so.4.2.0
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||||
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||||
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_INSTALL_CONFIG_NAME "")
|
set(CMAKE_INSTALL_CONFIG_NAME "Debug")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
56
ppg.cpp
56
ppg.cpp
|
|
@ -35,6 +35,7 @@
|
||||||
#include <libfreenect2/logger.h>
|
#include <libfreenect2/logger.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool protonect_shutdown = false; // Whether the running application should shut down.
|
bool protonect_shutdown = false; // Whether the running application should shut down.
|
||||||
|
|
||||||
void sigint_handler(int s)
|
void sigint_handler(int s)
|
||||||
|
|
@ -97,14 +98,25 @@ int main()
|
||||||
|
|
||||||
cv::Mat rgbmat;
|
cv::Mat rgbmat;
|
||||||
|
|
||||||
|
cv::CascadeClassifier faceDetector;
|
||||||
|
if(!faceDetector.load("./haarcascade_frontalface_alt.xml")){
|
||||||
|
std::cerr <<"[ERROR] Unable to load face cascade" << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool isDiscardData = true;
|
bool isDiscardData = true;
|
||||||
int countDiscard = 0;
|
int countDiscard = 0;
|
||||||
const int DISCARD_DURATION = 5;//maybe do a float?
|
const int DISCARD_DURATION = 2;//maybe do a float?
|
||||||
const int FPS = 30;//can actually switch to 15fps in low light, but for this application it is not very important
|
const int FPS = 30;//can actually switch to 15fps in low light, but for this application it is not very important
|
||||||
|
|
||||||
std::cout << "beginning loop" << std::endl;
|
std::cout << "beginning loop" << std::endl;
|
||||||
while(!protonect_shutdown)
|
while(!protonect_shutdown)
|
||||||
{
|
{
|
||||||
|
int64 start = cv::getTickCount();//gotta check var type is it appropriate
|
||||||
|
|
||||||
listener.waitForNewFrame(frames);
|
listener.waitForNewFrame(frames);
|
||||||
libfreenect2::Frame *rgb = frames[libfreenect2::Frame::Color];
|
libfreenect2::Frame *rgb = frames[libfreenect2::Frame::Color];
|
||||||
cv::Mat(rgb->height, rgb->width, CV_8UC4, rgb->data).copyTo(rgbmat);
|
cv::Mat(rgb->height, rgb->width, CV_8UC4, rgb->data).copyTo(rgbmat);
|
||||||
|
|
@ -119,10 +131,13 @@ int main()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cv::imshow("rgb", rgbmat);
|
|
||||||
|
|
||||||
if(isDiscardData){
|
if(isDiscardData){
|
||||||
countDiscard++;
|
countDiscard++;
|
||||||
|
cv::imshow("rgb", rgbmat);
|
||||||
|
double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
|
||||||
|
std::cout << "FPS : " << fps << std::endl;
|
||||||
if(countDiscard == DISCARD_DURATION*FPS){
|
if(countDiscard == DISCARD_DURATION*FPS){
|
||||||
isDiscardData = false;
|
isDiscardData = false;
|
||||||
std::cout << "not discarding data anymore" << std::endl;
|
std::cout << "not discarding data anymore" << std::endl;
|
||||||
|
|
@ -131,7 +146,44 @@ int main()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cv::Mat frame_gray;
|
||||||
|
cvtColor( rgbmat, frame_gray, cv::COLOR_BGR2GRAY );
|
||||||
|
equalizeHist(frame_gray, frame_gray);
|
||||||
|
|
||||||
|
std::vector<cv::Rect> faceRectangles;
|
||||||
|
faceDetector.detectMultiScale(frame_gray, faceRectangles, 1.1, 3, 0, cv::Size(150, 150));
|
||||||
|
//all default parameters besides setting a min face size to be valid
|
||||||
|
|
||||||
|
/*
|
||||||
|
printf("%zd face(s) are found.\n", faceRectangles.size());
|
||||||
|
for (int i = 0; i < faceRectangles.size(); i++) {
|
||||||
|
cv::Rect r = faceRectangles[i];
|
||||||
|
printf("a face is found at Rect(%d,%d,%d,%d).\n", r.x, r.y, r.width, r.height);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(faceRectangles.empty() == false){//THIS WAS AN INFURIATING BUG
|
||||||
|
cv::rectangle(rgbmat, faceRectangles[0], cv::Scalar(100, 0, 255), 1, 1, 0);
|
||||||
|
|
||||||
|
cv::Rect foreheadROI;
|
||||||
|
foreheadROI = faceRectangles[0];
|
||||||
|
foreheadROI.height *= 0.3;
|
||||||
|
//foreheadROI.width *= 0.8;
|
||||||
|
cv::rectangle(rgbmat, foreheadROI, cv::Scalar(50, 200, 50), 1, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cv::imshow("rgb", rgbmat);
|
||||||
|
//cv::imshow("grayscale", frame_gray);
|
||||||
|
|
||||||
|
double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
|
||||||
|
std::cout << "FPS : " << fps << std::endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
//! [loop end]
|
//! [loop end]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue