From 7bcbb5e1890e8f8f347eb1376713155991a40235 Mon Sep 17 00:00:00 2001 From: Tadas Baltrusaitis Date: Thu, 26 Oct 2017 08:50:15 +0100 Subject: [PATCH] Separating gaze analysis into a separate project, getting closer to being ready to integrate GUI and CE-CLM branches. --- CMakeLists.txt | 2 + OpenFace.sln | 13 +- exe/FaceLandmarkImg/CMakeLists.txt | 2 + exe/FaceLandmarkImg/FaceLandmarkImg.cpp | 16 +- exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj | 11 +- exe/FaceLandmarkVid/CMakeLists.txt | 2 + exe/FaceLandmarkVid/FaceLandmarkVid.cpp | 6 +- exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj | 11 +- exe/FeatureExtraction/CMakeLists.txt | 2 + exe/FeatureExtraction/FeatureExtraction.cpp | 8 +- .../FeatureExtraction.vcxproj | 11 +- lib/local/FaceAnalyser/FaceAnalyser.vcxproj | 2 - .../FaceAnalyser/FaceAnalyser.vcxproj.filters | 6 - lib/local/GazeAnalyser/CMakeLists.txt | 27 ++++ lib/local/GazeAnalyser/GazeAnalyser.vcxproj | 153 ++++++++++++++++++ .../GazeAnalyser/GazeAnalyser.vcxproj.filters | 23 +++ .../include/GazeEstimation.h | 11 +- .../src/GazeEstimation.cpp | 18 ++- 18 files changed, 277 insertions(+), 47 deletions(-) create mode 100644 lib/local/GazeAnalyser/CMakeLists.txt create mode 100644 lib/local/GazeAnalyser/GazeAnalyser.vcxproj create mode 100644 lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters rename lib/local/{FaceAnalyser => GazeAnalyser}/include/GazeEstimation.h (94%) rename lib/local/{FaceAnalyser => GazeAnalyser}/src/GazeEstimation.cpp (94%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e91c422..6927d730 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,6 +189,8 @@ add_subdirectory(lib/3rdParty/dlib) add_subdirectory(lib/local/LandmarkDetector) # Facial Expression analysis library add_subdirectory(lib/local/FaceAnalyser) +# Gaze library +add_subdirectory(lib/local/GazeAnalyser) # executables add_subdirectory(exe/FaceLandmarkImg) add_subdirectory(exe/FaceLandmarkVid) diff --git a/OpenFace.sln b/OpenFace.sln index 84732ad4..4b497086 100644 --- a/OpenFace.sln +++ b/OpenFace.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.24720.0 +VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dlib", "lib\3rdParty\dlib\dlib.vcxproj", "{B47A5F12-2567-44E9-AE49-35763EC82149}" EndProject @@ -23,6 +23,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FaceLandmarkVid", "exe\Face EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FaceLandmarkImg", "exe\FaceLandmarkImg\FaceLandmarkImg.vcxproj", "{DDC3535E-526C-44EC-9DF4-739E2D3A323B}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GazeAnalyser", "lib\local\GazeAnalyser\GazeAnalyser.vcxproj", "{5F915541-F531-434F-9C81-79F5DB58012B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -95,6 +97,14 @@ Global {DDC3535E-526C-44EC-9DF4-739E2D3A323B}.Release|Win32.Build.0 = Release|Win32 {DDC3535E-526C-44EC-9DF4-739E2D3A323B}.Release|x64.ActiveCfg = Release|x64 {DDC3535E-526C-44EC-9DF4-739E2D3A323B}.Release|x64.Build.0 = Release|x64 + {5F915541-F531-434F-9C81-79F5DB58012B}.Debug|Win32.ActiveCfg = Debug|Win32 + {5F915541-F531-434F-9C81-79F5DB58012B}.Debug|Win32.Build.0 = Debug|Win32 + {5F915541-F531-434F-9C81-79F5DB58012B}.Debug|x64.ActiveCfg = Debug|x64 + {5F915541-F531-434F-9C81-79F5DB58012B}.Debug|x64.Build.0 = Debug|x64 + {5F915541-F531-434F-9C81-79F5DB58012B}.Release|Win32.ActiveCfg = Release|Win32 + {5F915541-F531-434F-9C81-79F5DB58012B}.Release|Win32.Build.0 = Release|Win32 + {5F915541-F531-434F-9C81-79F5DB58012B}.Release|x64.ActiveCfg = Release|x64 + {5F915541-F531-434F-9C81-79F5DB58012B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -108,5 +118,6 @@ Global {2D80FA0B-2DE8-4475-BA5A-C08A9E1EDAAC} = {9961DDAC-BE6E-4A6E-8EEF-FFC7D67BD631} {34032CF2-1B99-4A25-9050-E9C13DD4CD0A} = {9961DDAC-BE6E-4A6E-8EEF-FFC7D67BD631} {DDC3535E-526C-44EC-9DF4-739E2D3A323B} = {9961DDAC-BE6E-4A6E-8EEF-FFC7D67BD631} + {5F915541-F531-434F-9C81-79F5DB58012B} = {99FEBA13-BDDF-4076-B57E-D8EF4076E20D} EndGlobalSection EndGlobal diff --git a/exe/FaceLandmarkImg/CMakeLists.txt b/exe/FaceLandmarkImg/CMakeLists.txt index a6966be6..a2af8df1 100644 --- a/exe/FaceLandmarkImg/CMakeLists.txt +++ b/exe/FaceLandmarkImg/CMakeLists.txt @@ -6,10 +6,12 @@ include_directories(${LandmarkDetector_SOURCE_DIR}/include) include_directories(../../lib/local/LandmarkDetector/include) include_directories(../../lib/local/FaceAnalyser/include) +include_directories(../../lib/local/GazeAnalyser/include) add_executable(FaceLandmarkImg FaceLandmarkImg.cpp) target_link_libraries(FaceLandmarkImg LandmarkDetector) target_link_libraries(FaceLandmarkImg FaceAnalyser) +target_link_libraries(FaceLandmarkImg GazeAnalyser) target_link_libraries(FaceLandmarkImg dlib) target_link_libraries(FaceLandmarkImg ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${BLAS_LIBRARIES}) diff --git a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp index bea0c0ee..80506117 100644 --- a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp +++ b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp @@ -430,9 +430,9 @@ int main (int argc, char **argv) if (success && det_parameters.track_gaze) { - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); - gazeAngle = FaceAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); + gazeAngle = GazeAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1); } auto ActionUnits = face_analyser.PredictStaticAUs(read_image, clnf_model.detected_landmarks, false); @@ -481,7 +481,7 @@ int main (int argc, char **argv) // Draw it in reddish if uncertain, blueish if certain LandmarkDetector::DrawBox(read_image, pose_estimate_to_draw, cv::Scalar(255.0, 0, 0), 3, fx, fy, cx, cy); - FaceAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); + GazeAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); } // displaying detected landmarks @@ -547,9 +547,9 @@ int main (int argc, char **argv) if (det_parameters.track_gaze) { - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); - gazeAngle = FaceAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); + gazeAngle = GazeAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1); } auto ActionUnits = face_analyser.PredictStaticAUs(read_image, clnf_model.detected_landmarks, false); @@ -577,7 +577,7 @@ int main (int argc, char **argv) // Draw it in reddish if uncertain, blueish if certain LandmarkDetector::DrawBox(read_image, pose_estimate_to_draw, cv::Scalar(255.0, 0, 0), 3, fx, fy, cx, cy); - FaceAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); + GazeAnalysis::DrawGaze(read_image, clnf_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); } create_display_image(read_image, display_image, clnf_model); diff --git a/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj b/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj index 140b29c9..08de70ad 100644 --- a/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj +++ b/exe/FaceLandmarkImg/FaceLandmarkImg.vcxproj @@ -112,7 +112,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) StreamingSIMDExtensions2 true @@ -127,7 +127,7 @@ Level3 Disabled WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) AdvancedVectorExtensions true @@ -144,7 +144,7 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false StreamingSIMDExtensions2 true @@ -164,7 +164,7 @@ true true WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false AdvancedVectorExtensions true @@ -183,6 +183,9 @@ {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/exe/FaceLandmarkVid/CMakeLists.txt b/exe/FaceLandmarkVid/CMakeLists.txt index 7ab0120e..ad822c34 100644 --- a/exe/FaceLandmarkVid/CMakeLists.txt +++ b/exe/FaceLandmarkVid/CMakeLists.txt @@ -8,9 +8,11 @@ include_directories(${LandmarkDetector_SOURCE_DIR}/include) include_directories(../../lib/local/LandmarkDetector/include) include_directories(../../lib/local/FaceAnalyser/include) +include_directories(../../lib/local/GazeAnalyser/include) target_link_libraries(FaceLandmarkVid LandmarkDetector) target_link_libraries(FaceLandmarkVid FaceAnalyser) +target_link_libraries(FaceLandmarkVid GazeAnalyser) target_link_libraries(FaceLandmarkVid dlib) diff --git a/exe/FaceLandmarkVid/FaceLandmarkVid.cpp b/exe/FaceLandmarkVid/FaceLandmarkVid.cpp index 54e96be8..8bda2639 100644 --- a/exe/FaceLandmarkVid/FaceLandmarkVid.cpp +++ b/exe/FaceLandmarkVid/FaceLandmarkVid.cpp @@ -119,7 +119,7 @@ void visualise_tracking(cv::Mat& captured_image, const LandmarkDetector::CLNF& f if (det_parameters.track_gaze && detection_success && face_model.eye_model) { - FaceAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); + GazeAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); } } @@ -306,8 +306,8 @@ int main (int argc, char **argv) if (det_parameters.track_gaze && detection_success && clnf_model.eye_model) { - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection0, fx, fy, cx, cy, true); + GazeAnalysis::EstimateGaze(clnf_model, gazeDirection1, fx, fy, cx, cy, false); } visualise_tracking(captured_image, clnf_model, det_parameters, gazeDirection0, gazeDirection1, frame_count, fx, fy, cx, cy); diff --git a/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj b/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj index fc666363..858265cf 100644 --- a/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj +++ b/exe/FaceLandmarkVid/FaceLandmarkVid.vcxproj @@ -112,7 +112,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false StreamingSIMDExtensions2 true @@ -128,7 +128,7 @@ Level3 Disabled WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false AdvancedVectorExtensions true @@ -147,7 +147,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed StreamingSIMDExtensions2 @@ -169,7 +169,7 @@ true WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed AdvancedVectorExtensions @@ -189,6 +189,9 @@ {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/exe/FeatureExtraction/CMakeLists.txt b/exe/FeatureExtraction/CMakeLists.txt index 3b224073..b3e1d18c 100644 --- a/exe/FeatureExtraction/CMakeLists.txt +++ b/exe/FeatureExtraction/CMakeLists.txt @@ -8,9 +8,11 @@ include_directories(${LandmarkDetector_SOURCE_DIR}/include) include_directories(../../lib/local/LandmarkDetector/include) include_directories(../../lib/local/FaceAnalyser/include) +include_directories(../../lib/local/GazeAnalyser/include) target_link_libraries(FeatureExtraction LandmarkDetector) target_link_libraries(FeatureExtraction FaceAnalyser) +target_link_libraries(FeatureExtraction GazeAnalyser) target_link_libraries(FeatureExtraction dlib) target_link_libraries(FeatureExtraction ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${BLAS_LIBRARIES}) diff --git a/exe/FeatureExtraction/FeatureExtraction.cpp b/exe/FeatureExtraction/FeatureExtraction.cpp index 6e55f3fd..5ecdda1d 100644 --- a/exe/FeatureExtraction/FeatureExtraction.cpp +++ b/exe/FeatureExtraction/FeatureExtraction.cpp @@ -176,7 +176,7 @@ void visualise_tracking(cv::Mat& captured_image, const LandmarkDetector::CLNF& f if (det_parameters.track_gaze && detection_success && face_model.eye_model) { - FaceAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); + GazeAnalysis::DrawGaze(captured_image, face_model, gazeDirection0, gazeDirection1, fx, fy, cx, cy); } } @@ -481,9 +481,9 @@ int main (int argc, char **argv) if (det_parameters.track_gaze && detection_success && face_model.eye_model) { - FaceAnalysis::EstimateGaze(face_model, gazeDirection0, fx, fy, cx, cy, true); - FaceAnalysis::EstimateGaze(face_model, gazeDirection1, fx, fy, cx, cy, false); - gazeAngle = FaceAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1); + GazeAnalysis::EstimateGaze(face_model, gazeDirection0, fx, fy, cx, cy, true); + GazeAnalysis::EstimateGaze(face_model, gazeDirection1, fx, fy, cx, cy, false); + gazeAngle = GazeAnalysis::GetGazeAngle(gazeDirection0, gazeDirection1); } // Do face alignment diff --git a/exe/FeatureExtraction/FeatureExtraction.vcxproj b/exe/FeatureExtraction/FeatureExtraction.vcxproj index d289ccb6..12df2bc0 100644 --- a/exe/FeatureExtraction/FeatureExtraction.vcxproj +++ b/exe/FeatureExtraction/FeatureExtraction.vcxproj @@ -111,7 +111,7 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false StreamingSIMDExtensions2 true @@ -127,7 +127,7 @@ Level3 Disabled WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false AdvancedVectorExtensions true @@ -145,7 +145,7 @@ false true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed StreamingSIMDExtensions2 @@ -167,7 +167,7 @@ false true WIN64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\lib\local\FaceAnalyser\include;$(SolutionDir)\lib\local\LandmarkDetector\include;$(SolutionDir)\lib\local\GazeAnalyser\include;%(AdditionalIncludeDirectories) false Speed AdvancedVectorExtensions @@ -188,6 +188,9 @@ {0e7fc556-0e80-45ea-a876-dde4c2fedcd7} + + {5f915541-f531-434f-9c81-79f5db58012b} + {bdc1d107-de17-4705-8e7b-cdde8bfb2bf8} diff --git a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj index cfab08ef..786a34b3 100644 --- a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj +++ b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj @@ -191,7 +191,6 @@ - @@ -205,7 +204,6 @@ - diff --git a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters index 84218c8a..553f5017 100644 --- a/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters +++ b/lib/local/FaceAnalyser/FaceAnalyser.vcxproj.filters @@ -33,9 +33,6 @@ Header Files - - Header Files - Header Files @@ -65,9 +62,6 @@ Source Files - - Source Files - Source Files diff --git a/lib/local/GazeAnalyser/CMakeLists.txt b/lib/local/GazeAnalyser/CMakeLists.txt new file mode 100644 index 00000000..da01951e --- /dev/null +++ b/lib/local/GazeAnalyser/CMakeLists.txt @@ -0,0 +1,27 @@ +#TBB library +include_directories(${TBB_ROOT_DIR}/include) +include_directories(${BLAS_ROOT_DIR}) + +include_directories(${BOOST_INCLUDE_DIR}) + +#OpenBlas library +include_directories(../../3rdParty/OpenBLAS/include) + +#LandmarkDetector library +include_directories(../../local/LandmarkDetector/include) + +SET(SOURCE + src/GazeEstimation.cpp +) + +SET(HEADERS + include/GazeEstimation.h +) + +include_directories(./include) +include_directories(${GAZEANALYSER_SOURCE_DIR}/include) + +add_library( GazeAnalyser ${SOURCE} ${HEADERS}) + +install (TARGETS GazeAnalyser DESTINATION lib) +install (FILES ${HEADERS} DESTINATION include/OpenFace) diff --git a/lib/local/GazeAnalyser/GazeAnalyser.vcxproj b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj new file mode 100644 index 00000000..884d739f --- /dev/null +++ b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj @@ -0,0 +1,153 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {5F915541-F531-434F-9C81-79F5DB58012B} + GazeAnalyser + 8.1 + + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ProjectDir)$(Configuration)\ + + + $(ProjectDir)$(Configuration)\ + + + + Level3 + Disabled + true + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + StreamingSIMDExtensions2 + + + + + Level3 + Disabled + true + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + WIN64;_DEBUG;_LIB;EIGEN_MPL2_ONLY;%(PreprocessorDefinitions) + AdvancedVectorExtensions + + + + + Level3 + MaxSpeed + true + true + + + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + StreamingSIMDExtensions2 + + + true + true + + + + + Level3 + MaxSpeed + true + true + + + ./include;../LandmarkDetector/include;%(AdditionalIncludeDirectories) + true + WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions) + AdvancedVectorExtensions + + + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters new file mode 100644 index 00000000..e15fb020 --- /dev/null +++ b/lib/local/GazeAnalyser/GazeAnalyser.vcxproj.filters @@ -0,0 +1,23 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/lib/local/FaceAnalyser/include/GazeEstimation.h b/lib/local/GazeAnalyser/include/GazeEstimation.h similarity index 94% rename from lib/local/FaceAnalyser/include/GazeEstimation.h rename to lib/local/GazeAnalyser/include/GazeEstimation.h index c8101e22..ce6f0af9 100644 --- a/lib/local/FaceAnalyser/include/GazeEstimation.h +++ b/lib/local/GazeAnalyser/include/GazeEstimation.h @@ -35,10 +35,11 @@ #ifndef __GAZEESTIMATION_h_ #define __GAZEESTIMATION_h_ -#include "opencv2/core/core.hpp" -#include "LandmarkCoreIncludes.h" +#include "LandmarkDetectorModel.h" -namespace FaceAnalysis +#include "opencv2/core/core.hpp" + +namespace GazeAnalysis { void EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye); @@ -46,7 +47,9 @@ namespace FaceAnalysis // Getting the gaze angle in radians with respect to the world coordinates (camera plane), when looking ahead straight at camera plane the gaze angle will be (0,0) cv::Vec2d GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& gaze_vector_2); - + + // Some utilities + cv::Point3f GetPupilPosition(cv::Mat_ eyeLdmks3d); } #endif \ No newline at end of file diff --git a/lib/local/FaceAnalyser/src/GazeEstimation.cpp b/lib/local/GazeAnalyser/src/GazeEstimation.cpp similarity index 94% rename from lib/local/FaceAnalyser/src/GazeEstimation.cpp rename to lib/local/GazeAnalyser/src/GazeEstimation.cpp index ebc002ad..d9456b86 100644 --- a/lib/local/FaceAnalyser/src/GazeEstimation.cpp +++ b/lib/local/GazeAnalyser/src/GazeEstimation.cpp @@ -40,9 +40,12 @@ #include "GazeEstimation.h" +#include "LandmarkDetectorUtils.h" +#include "LandmarkDetectorFunc.h" + using namespace std; -using namespace FaceAnalysis; +using namespace GazeAnalysis; // For subpixel accuracy drawing const int gaze_draw_shiftbits = 4; @@ -76,7 +79,7 @@ cv::Point3f RaySphereIntersect(cv::Point3f rayOrigin, cv::Point3f rayDir, cv::Po return rayOrigin + rayDir * t; } -cv::Point3f GetPupilPosition(cv::Mat_ eyeLdmks3d){ +cv::Point3f GazeAnalysis::GetPupilPosition(cv::Mat_ eyeLdmks3d){ eyeLdmks3d = eyeLdmks3d.t(); @@ -86,7 +89,7 @@ cv::Point3f GetPupilPosition(cv::Mat_ eyeLdmks3d){ return p; } -void FaceAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye) +void GazeAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Point3f& gaze_absolute, float fx, float fy, float cx, float cy, bool left_eye) { cv::Vec6d headPose = LandmarkDetector::GetPose(clnf_model, fx, fy, cx, cy); cv::Vec3d eulerAngles(headPose(3), headPose(4), headPose(5)); @@ -117,7 +120,9 @@ void FaceAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Po cv::Mat faceLdmks3d = clnf_model.GetShape(fx, fy, cx, cy); faceLdmks3d = faceLdmks3d.t(); - cv::Mat offset = (cv::Mat_(3, 1) << 0, -3.50, 7.0); + + cv::Mat offset = (cv::Mat_(3, 1) << 0, -3.5, 7.0); + int eyeIdx = 1; if (left_eye) { @@ -133,7 +138,7 @@ void FaceAnalysis::EstimateGaze(const LandmarkDetector::CLNF& clnf_model, cv::Po gaze_absolute = gazeVecAxis / norm(gazeVecAxis); } -cv::Vec2d FaceAnalysis::GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& gaze_vector_2) +cv::Vec2d GazeAnalysis::GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& gaze_vector_2) { cv::Point3f gaze_vector = (gaze_vector_1 + gaze_vector_2) / 2; @@ -144,8 +149,7 @@ cv::Vec2d FaceAnalysis::GetGazeAngle(cv::Point3f& gaze_vector_1, cv::Point3f& ga return cv::Vec2d(x_angle, y_angle); } - -void FaceAnalysis::DrawGaze(cv::Mat img, const LandmarkDetector::CLNF& clnf_model, cv::Point3f gazeVecAxisLeft, cv::Point3f gazeVecAxisRight, float fx, float fy, float cx, float cy) +void GazeAnalysis::DrawGaze(cv::Mat img, const LandmarkDetector::CLNF& clnf_model, cv::Point3f gazeVecAxisLeft, cv::Point3f gazeVecAxisRight, float fx, float fy, float cx, float cy) { cv::Mat cameraMat = (cv::Mat_(3, 3) << fx, 0, cx, 0, fy, cy, 0, 0, 0);