提交 9e1d6e41 编写于 作者: G gineshidalgo99

3D updating bug fixed, dlog in experimental module

上级 4986dadd
...@@ -144,7 +144,8 @@ if (${GPU_MODE} MATCHES "CUDA") ...@@ -144,7 +144,8 @@ if (${GPU_MODE} MATCHES "CUDA")
endif (${GPU_MODE} MATCHES "CUDA") endif (${GPU_MODE} MATCHES "CUDA")
# Suboptions for OpenPose 3D Reconstruction demo # Suboptions for OpenPose 3D Reconstruction demo
option(BUILD_MODULE_3D "Build OpenPose 3D Reconstruction module." OFF) option(WITH_3D_RENDERER "Add OpenPose 3D renderer module (it requires FreeGLUT library)." OFF)
option(WITH_FLIR_CAMERA "Add FLIR (formerly Point Grey) camera code (requires Spinnaker SDK already installed)." OFF)
# Download the models # Download the models
option(DOWNLOAD_COCO_MODEL "Download COCO model." ON) option(DOWNLOAD_COCO_MODEL "Download COCO model." ON)
...@@ -171,10 +172,14 @@ if (${GPU_MODE} MATCHES "CUDA") ...@@ -171,10 +172,14 @@ if (${GPU_MODE} MATCHES "CUDA")
endif () endif ()
# Adding 3D # Adding 3D
if (BUILD_MODULE_3D) if (WITH_3D_RENDERER)
# OpenPose flags # OpenPose flags
add_definitions(-DBUILD_MODULE_3D) add_definitions(-DWITH_3D_RENDERER)
endif (BUILD_MODULE_3D) endif (WITH_3D_RENDERER)
if (WITH_FLIR_CAMERA)
# OpenPose flags
add_definitions(-DWITH_FLIR_CAMERA)
endif (WITH_FLIR_CAMERA)
if (UNIX AND NOT APPLE) if (UNIX AND NOT APPLE)
if (${GPU_MODE} MATCHES "CUDA") if (${GPU_MODE} MATCHES "CUDA")
...@@ -193,19 +198,21 @@ if (UNIX AND NOT APPLE) ...@@ -193,19 +198,21 @@ if (UNIX AND NOT APPLE)
endif (OpenCV_CONFIG_FILE) endif (OpenCV_CONFIG_FILE)
# 3D # 3D
if (BUILD_MODULE_3D) if (WITH_3D_RENDERER)
# GLUT # GLUT
find_package(GLUT REQUIRED) find_package(GLUT REQUIRED)
endif (WITH_3D_RENDERER)
if (WITH_FLIR_CAMERA)
# Spinnaker # Spinnaker
find_package(Spinnaker) find_package(Spinnaker)
if (NOT SPINNAKER_FOUND) if (NOT SPINNAKER_FOUND)
message(FATAL_ERROR "Spinnaker not found. Either turn off the `BUILD_MODULE_3D` option or specify the path of message(FATAL_ERROR "Spinnaker not found. Either turn off the `WITH_FLIR_CAMERA` option or specify the path to
Spinnaker includes and libs.") the Spinnaker includes and libs.")
endif (NOT SPINNAKER_FOUND) endif (NOT SPINNAKER_FOUND)
# Otherwise error if 3D module enabled, and then disabled (with Spinnaker not installed) # Otherwise error if 3D module enabled, and then disabled (with Spinnaker not installed)
else (BUILD_MODULE_3D) else (WITH_FLIR_CAMERA)
set(SPINNAKER_LIB "") set(SPINNAKER_LIB "")
endif (BUILD_MODULE_3D) endif (WITH_FLIR_CAMERA)
# OpenMP # OpenMP
if (${GPU_MODE} MATCHES "CPU_ONLY") if (${GPU_MODE} MATCHES "CPU_ONLY")
...@@ -271,9 +278,9 @@ if (WIN32) ...@@ -271,9 +278,9 @@ if (WIN32)
download_zip("opencv_310.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 1e5240a64b814b3c0b822f136be78ad7) download_zip("opencv_310.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 1e5240a64b814b3c0b822f136be78ad7)
download_zip("caffe3rdparty_2017_07_14.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} ec0f800c8fb337e33304f3375bd06a80) download_zip("caffe3rdparty_2017_07_14.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} ec0f800c8fb337e33304f3375bd06a80)
download_zip("caffe_2018_01_18.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 4b8e548cc7ea20abea472950dd5301bd) download_zip("caffe_2018_01_18.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 4b8e548cc7ea20abea472950dd5301bd)
if (BUILD_MODULE_3D) if (WITH_3D_RENDERER)
download_zip("freeglut_2018_01_14.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} BB182187285E06880F0EDE3A39530091) download_zip("freeglut_2018_01_14.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} BB182187285E06880F0EDE3A39530091)
endif (BUILD_MODULE_3D) endif (WITH_3D_RENDERER)
message(STATUS "Windows dependencies downloaded.") message(STATUS "Windows dependencies downloaded.")
find_library(OpenCV_LIBS opencv_world310 HINTS ${FIND_LIB_PREFIX}/opencv/x64/vc14/lib) find_library(OpenCV_LIBS opencv_world310 HINTS ${FIND_LIB_PREFIX}/opencv/x64/vc14/lib)
...@@ -284,20 +291,24 @@ if (WIN32) ...@@ -284,20 +291,24 @@ if (WIN32)
find_library(OpenCV_LIBS opencv_world310 HINTS ${FIND_LIB_PREFIX}/opencv/x64/vc14/lib) find_library(OpenCV_LIBS opencv_world310 HINTS ${FIND_LIB_PREFIX}/opencv/x64/vc14/lib)
find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe/lib) find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe/lib)
find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe/lib) find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe/lib)
if (BUILD_MODULE_3D) if (WITH_3D_RENDERER)
find_library(SPINNAKER_LIB spinnaker_v140 HINTS ${FIND_LIB_PREFIX}/spinnaker/lib)
find_library(GLUT_LIBRARY freeglut HINTS ${FIND_LIB_PREFIX}/freeglut/lib) find_library(GLUT_LIBRARY freeglut HINTS ${FIND_LIB_PREFIX}/freeglut/lib)
message(STATUS "\${GLUT_LIBRARY} = ${GLUT_LIBRARY}") message(STATUS "\${GLUT_LIBRARY} = ${GLUT_LIBRARY}")
endif (BUILD_MODULE_3D) endif (WITH_3D_RENDERER)
if (WITH_FLIR_CAMERA)
find_library(SPINNAKER_LIB spinnaker_v140 HINTS ${FIND_LIB_PREFIX}/spinnaker/lib)
endif (WITH_FLIR_CAMERA)
set(Caffe_LIBS ${Caffe_LIB};${Caffe_Proto_LIB}) set(Caffe_LIBS ${Caffe_LIB};${Caffe_Proto_LIB})
set(OpenCV_INCLUDE_DIRS "3rdparty/windows/opencv/include") set(OpenCV_INCLUDE_DIRS "3rdparty/windows/opencv/include")
set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe/include;3rdparty/windows/caffe/include2") set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe/include;3rdparty/windows/caffe/include2")
set(Boost_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include/boost-1_61") set(Boost_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include/boost-1_61")
set(WINDOWS_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include") set(WINDOWS_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include")
if (BUILD_MODULE_3D) if (WITH_3D_RENDERER)
set(SPINNAKER_INCLUDE_DIRS "3rdparty/windows/spinnaker/include")
set(GLUT_INCLUDE_DIRS "3rdparty/windows/freeglut/include") set(GLUT_INCLUDE_DIRS "3rdparty/windows/freeglut/include")
endif (BUILD_MODULE_3D) endif (WITH_3D_RENDERER)
if (WITH_FLIR_CAMERA)
set(SPINNAKER_INCLUDE_DIRS "3rdparty/windows/spinnaker/include")
endif (WITH_FLIR_CAMERA)
set(Caffe_FOUND 1) set(Caffe_FOUND 1)
endif (WIN32) endif (WIN32)
...@@ -445,9 +456,12 @@ if (${GPU_MODE} MATCHES "CUDA") ...@@ -445,9 +456,12 @@ if (${GPU_MODE} MATCHES "CUDA")
${CUDA_INCLUDE_DIRS}) ${CUDA_INCLUDE_DIRS})
endif () endif ()
# 3D # 3D
if (BUILD_MODULE_3D) if (WITH_3D_RENDERER)
include_directories(${GLUT_INCLUDE_DIRS} ${SPINNAKER_INCLUDE_DIRS}) include_directories(${GLUT_INCLUDE_DIRS})
endif (BUILD_MODULE_3D) endif (WITH_3D_RENDERER)
if (WITH_FLIR_CAMERA)
include_directories(${SPINNAKER_INCLUDE_DIRS})
endif (WITH_FLIR_CAMERA)
# Windows includes # Windows includes
if (WIN32) if (WIN32)
include_directories( include_directories(
......
...@@ -198,7 +198,7 @@ By default, the body MPI model is not downloaded. You can download it by turning ...@@ -198,7 +198,7 @@ By default, the body MPI model is not downloaded. You can download it by turning
#### OpenPose 3D Reconstruction Module and Demo #### OpenPose 3D Reconstruction Module and Demo
You can include the 3D reconstruction module by: You can include the 3D reconstruction module by:
1. Install the FLIR camera driver and software, Spinnaker SDK. It is a propietary software, so we cannot provide direct download link. 1. Install the FLIR camera software, Spinnaker SDK. It is a propietary software, so we cannot provide direct download link. Note: You might skip this step if you intend to use the 3-D OpenPose module with a different camera brand.
1. Ubuntu: Get and install the latest Spinnaker SKD version in their default path. OpenPose will automatically find it. Otherwise, set the right path with CMake. 1. Ubuntu: Get and install the latest Spinnaker SKD version in their default path. OpenPose will automatically find it. Otherwise, set the right path with CMake.
2. Windows: Donwload the latest Spinnaker SKD version from [https://www.ptgrey.com/support/downloads](https://www.ptgrey.com/support/downloads). 2. Windows: Donwload the latest Spinnaker SKD version from [https://www.ptgrey.com/support/downloads](https://www.ptgrey.com/support/downloads).
- Copy `{PointGreyParentDirectory}\Point Grey Research\Spinnaker\bin64\vs2015\` as `{OpenPoseDirectory}\3rdparty\windows\spinnaker\bin\`. You can remove all the *.exe files. - Copy `{PointGreyParentDirectory}\Point Grey Research\Spinnaker\bin64\vs2015\` as `{OpenPoseDirectory}\3rdparty\windows\spinnaker\bin\`. You can remove all the *.exe files.
...@@ -216,7 +216,7 @@ You can include the 3D reconstruction module by: ...@@ -216,7 +216,7 @@ You can include the 3D reconstruction module by:
- Copy `{freeglutParentDirectory}\freeglut\bin\x64\` as `{OpenPoseDirectory}\3rdparty\windows\freeglut\bin\`. - Copy `{freeglutParentDirectory}\freeglut\bin\x64\` as `{OpenPoseDirectory}\3rdparty\windows\freeglut\bin\`.
- Copy `{freeglutParentDirectory}\freeglut\include\` as `{OpenPoseDirectory}\3rdparty\windows\freeglut\include\`. - Copy `{freeglutParentDirectory}\freeglut\include\` as `{OpenPoseDirectory}\3rdparty\windows\freeglut\include\`.
- Copy `{freeglutParentDirectory}\freeglut\lib\x64\` as `{OpenPoseDirectory}\3rdparty\windows\freeglut\lib\`. - Copy `{freeglutParentDirectory}\freeglut\lib\x64\` as `{OpenPoseDirectory}\3rdparty\windows\freeglut\lib\`.
3. Follow the CMake installation steps, and set the `BUILD_MODULE_3D` option. 3. Follow the CMake installation steps. In addition, set the `WITH_FLIR_CAMERA` (only if Spinnaker was installed) and `WITH_3D_RENDERER` options.
4. In Windows, after openning the OpenPose visual studio solution: 4. In Windows, after openning the OpenPose visual studio solution:
1. Right-click on `Solution 'OpenPose'` of the `Solution Explorer` window, usually placed at the top-right part of the VS screen. 1. Right-click on `Solution 'OpenPose'` of the `Solution Explorer` window, usually placed at the top-right part of the VS screen.
2. Click on `Properties`. Go to `Configuration Properties` -> `Configuration` and check `Build` for the `OpenPose3DReconstruction` project. 2. Click on `Properties`. Go to `Configuration Properties` -> `Configuration` and check `Build` for the `OpenPose3DReconstruction` project.
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
4. [Camera Calibration](#camera-calibration) 4. [Camera Calibration](#camera-calibration)
5. [Camera Ordering](#camera-ordering) 5. [Camera Ordering](#camera-ordering)
6. [Installing the OpenPose 3-D Reconstruction Module](#installing-the-openpose-3-d-reconstruction-module) 6. [Installing the OpenPose 3-D Reconstruction Module](#installing-the-openpose-3-d-reconstruction-module)
7. [Known Bug](#known-bug) 7. [Using a Different Camera Brand](#using-a-different-camera-brand)
8. [Known Bug](#known-bug)
...@@ -87,6 +88,11 @@ It should be similar to the following image. ...@@ -87,6 +88,11 @@ It should be similar to the following image.
## Using a Different Camera Brand
You can copy and modify the OpenPose 3-D demo to use any camera brand, by modifying the frames producer. For that, you would need to provide your custom code to retrieve synchronized images from your cameras, as well as their intrinsic and extrinsic camera parameters.
## Known Bug ## Known Bug
FreeGLUT is a quite light library. Due to that, there is a known bug in the 3D module: FreeGLUT is a quite light library. Due to that, there is a known bug in the 3D module:
......
add_subdirectory(experimental_3d)
add_subdirectory(openpose) add_subdirectory(openpose)
add_subdirectory(tutorial_add_module) add_subdirectory(tutorial_add_module)
add_subdirectory(tutorial_pose) add_subdirectory(tutorial_pose)
add_subdirectory(tutorial_thread) add_subdirectory(tutorial_thread)
add_subdirectory(tutorial_wrapper) add_subdirectory(tutorial_wrapper)
if (BUILD_MODULE_3D)
add_subdirectory(experimental_3d)
endif (BUILD_MODULE_3D)
if (UNIX AND NOT APPLE) if (UNIX AND NOT APPLE)
add_subdirectory(tests) add_subdirectory(tests)
endif (UNIX AND NOT APPLE) endif (UNIX AND NOT APPLE)
...@@ -206,7 +206,7 @@ int openpose() ...@@ -206,7 +206,7 @@ int openpose()
// Initializing the user custom classes // Initializing the user custom classes
// Frames producer (e.g. video, webcam, ...) // Frames producer (e.g. video, webcam, ...)
auto wPointGrey = std::make_shared<op::WPointGrey>(); auto wFlirReader = std::make_shared<op::WFlirReader>();
// Processing // Processing
auto wReconstruction3D = std::make_shared<op::WReconstruction3D>(); auto wReconstruction3D = std::make_shared<op::WReconstruction3D>();
// GUI (Display) // GUI (Display)
...@@ -215,7 +215,7 @@ int openpose() ...@@ -215,7 +215,7 @@ int openpose()
op::Wrapper<std::vector<op::Datum3D>> opWrapper; op::Wrapper<std::vector<op::Datum3D>> opWrapper;
// Add custom input // Add custom input
const auto workerInputOnNewThread = true; const auto workerInputOnNewThread = true;
opWrapper.setWorkerInput(wPointGrey, workerInputOnNewThread); opWrapper.setWorkerInput(wFlirReader, workerInputOnNewThread);
// Add custom processing // Add custom processing
const auto workerProcessingOnNewThread = true; const auto workerProcessingOnNewThread = true;
opWrapper.setWorkerPostProcessing(wReconstruction3D, workerProcessingOnNewThread); opWrapper.setWorkerPostProcessing(wReconstruction3D, workerProcessingOnNewThread);
......
...@@ -14,6 +14,7 @@ namespace op ...@@ -14,6 +14,7 @@ namespace op
Array<float> faceKeypoints3D; Array<float> faceKeypoints3D;
Array<float> leftHandKeypoints3D; Array<float> leftHandKeypoints3D;
Array<float> rightHandKeypoints3D; Array<float> rightHandKeypoints3D;
cv::Mat cameraParameterMatrix;
}; };
} }
......
...@@ -7,22 +7,25 @@ ...@@ -7,22 +7,25 @@
namespace op namespace op
{ {
// Following OpenPose `tutorial_wrapper/` examples, we create our own class inherited from WorkerProducer. /**
// This worker: * FLIR (Point-Grey) camera producer
// 1. Set hardware trigger and the buffer to get the latest obtained frame. * Following OpenPose `tutorial_wrapper/` examples, we create our own class inherited from WorkerProducer.
// 2. Read images from FLIR cameras. * This worker:
// 3. Turn them into std::vector<cv::Mat>. * 1. Set hardware trigger and the buffer to get the latest obtained frame.
// 4. Return the resulting images wrapped into a std::shared_ptr<std::vector<Datum3D>>. * 2. Read images from FLIR cameras.
// The HW trigger + reading FLIR camera code is highly based on the Spinnaker SDK examples `AcquisitionMultipleCamera` * 3. Turn them into std::vector<cv::Mat>.
// and specially `Trigger` * 4. Return the resulting images wrapped into a std::shared_ptr<std::vector<Datum3D>>.
// (located in `src/`). See them for more details about the cameras. * The HW trigger + reading FLIR camera code is highly based on the Spinnaker SDK examples
// See `examples/tutorial_wrapper/` for more details about inhering the WorkerProducer class. * `AcquisitionMultipleCamera` and specially `Trigger`
class OP_API WPointGrey : public WorkerProducer<std::shared_ptr<std::vector<Datum3D>>> * (located in `src/`). See them for more details about the cameras.
* See `examples/tutorial_wrapper/` for more details about inhering the WorkerProducer class.
*/
class OP_API WFlirReader : public WorkerProducer<std::shared_ptr<std::vector<Datum3D>>>
{ {
public: public:
WPointGrey(); WFlirReader();
~WPointGrey(); ~WFlirReader();
void initializationOnThread(); void initializationOnThread();
...@@ -31,8 +34,8 @@ namespace op ...@@ -31,8 +34,8 @@ namespace op
private: private:
// PIMPL idiom // PIMPL idiom
// http://www.cppsamples.com/common-tasks/pimpl.html // http://www.cppsamples.com/common-tasks/pimpl.html
struct ImplWPointGrey; struct ImplWFlirReader;
std::unique_ptr<ImplWPointGrey> upImpl; std::unique_ptr<ImplWFlirReader> upImpl;
}; };
} }
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
#include <openpose/experimental/3d/cameraParameters.hpp> #include <openpose/experimental/3d/cameraParameters.hpp>
// Datum3D // Datum3D
#include <openpose/experimental/3d/datum3D.hpp> #include <openpose/experimental/3d/datum3D.hpp>
// PointGrey cameras // Flir (Point-Grey) cameras
#include <openpose/experimental/3d/pointGrey.hpp> #include <openpose/experimental/3d/flirReader.hpp>
// 3D reconstruction // 3D reconstruction
#include <openpose/experimental/3d/reconstruction3D.hpp> #include <openpose/experimental/3d/reconstruction3D.hpp>
// OpenGL Renderer // OpenGL Renderer
......
...@@ -9,11 +9,11 @@ namespace op ...@@ -9,11 +9,11 @@ namespace op
{ {
// Following OpenPose `tutorial_wrapper/` examples, we create our own class inherited from Worker. // Following OpenPose `tutorial_wrapper/` examples, we create our own class inherited from Worker.
// This worker will do 3-D reconstruction // This worker will do 3-D reconstruction
// We apply the simple Direct linear transformation (DLT) algorithm, asumming each keypoint (e.g. right hip) is seen // We apply the simple Direct linear transformation (DLT) algorithm, asumming each keypoint (e.g. right hip) is
// by all the cameras. // seen by all the cameras.
// No non-linear minimization used, and if some camera misses the point, it is not reconstructed. // No non-linear minimization used, and if some camera misses the point, it is not reconstructed.
// See `examples/tutorial_wrapper/` for more details about inhering the Worker class and using it for post-processing // See `examples/tutorial_wrapper/` for more details about inhering the Worker class and using it for
// purposes. // post-processing purposes.
class OP_API WReconstruction3D : public Worker<std::shared_ptr<std::vector<Datum3D>>> class OP_API WReconstruction3D : public Worker<std::shared_ptr<std::vector<Datum3D>>>
{ {
public: public:
......
...@@ -15,8 +15,8 @@ namespace op ...@@ -15,8 +15,8 @@ namespace op
{ {
public: public:
/** /**
* Constructor of ImageDirectoryReader. It sets the image directory path from which the images will be loaded and * Constructor of ImageDirectoryReader. It sets the image directory path from which the images will be loaded
* generates a std::vector<std::string> with the list of images on that directory. * and generates a std::vector<std::string> with the list of images on that directory.
* @param imageDirectoryPath const std::string parameter with the folder path containing the images. * @param imageDirectoryPath const std::string parameter with the folder path containing the images.
*/ */
explicit ImageDirectoryReader(const std::string& imageDirectoryPath); explicit ImageDirectoryReader(const std::string& imageDirectoryPath);
......
set(SOURCES_OP_3D set(SOURCES_OP_3D
cameraParameters.cpp cameraParameters.cpp
pointGrey.cpp flirReader.cpp
reconstruction3D.cpp reconstruction3D.cpp
renderer.cpp) renderer.cpp)
......
#include <chrono> #include <chrono>
#include <thread> #include <thread>
#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgproc/imgproc.hpp>
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
#include <Spinnaker.h> #include <Spinnaker.h>
#endif #endif
#include <openpose/experimental/3d/cameraParameters.hpp> #include <openpose/experimental/3d/cameraParameters.hpp>
#include <openpose/utilities/check.hpp> #include <openpose/utilities/check.hpp>
#include <openpose/experimental/3d/pointGrey.hpp> #include <openpose/experimental/3d/flirReader.hpp>
namespace op namespace op
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
/* /*
* This function converts between Spinnaker::ImagePtr container to cv::Mat container used in OpenCV. * This function converts between Spinnaker::ImagePtr container to cv::Mat container used in OpenCV.
*/ */
cv::Mat pointGreyToCvMat(const Spinnaker::ImagePtr &imagePtr) cv::Mat flirReaderToCvMat(const Spinnaker::ImagePtr &imagePtr)
{ {
try try
{ {
...@@ -266,10 +266,10 @@ namespace op ...@@ -266,10 +266,10 @@ namespace op
for (auto i = 0u; i < imagePtrs.size(); i++) for (auto i = 0u; i < imagePtrs.size(); i++)
{ {
// Baseline // Baseline
// cvMats.emplace_back(pointGreyToCvMat(imagePtrs.at(i)).clone()); // cvMats.emplace_back(flirReaderToCvMat(imagePtrs.at(i)).clone());
// Undistort // Undistort
// http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistort // http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistort
auto auxCvMat = pointGreyToCvMat(imagePtrs.at(i)); auto auxCvMat = flirReaderToCvMat(imagePtrs.at(i));
cvMats.emplace_back(); cvMats.emplace_back();
cv::undistort(auxCvMat, cvMats[i], getIntrinsics(i), getDistorsion(i)); cv::undistort(auxCvMat, cvMats[i], getIntrinsics(i), getDistorsion(i));
} }
...@@ -321,29 +321,29 @@ namespace op ...@@ -321,29 +321,29 @@ namespace op
} }
#endif #endif
struct WPointGrey::ImplWPointGrey struct WFlirReader::ImplWFlirReader
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
bool mInitialized; bool mInitialized;
Spinnaker::CameraList mCameraList; Spinnaker::CameraList mCameraList;
Spinnaker::SystemPtr mSystemPtr; Spinnaker::SystemPtr mSystemPtr;
ImplWPointGrey() : ImplWFlirReader() :
mInitialized{false} mInitialized{false}
{ {
} }
#endif #endif
}; };
WPointGrey::WPointGrey() WFlirReader::WFlirReader()
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
: upImpl{new ImplWPointGrey{}} : upImpl{new ImplWFlirReader{}}
#endif #endif
{ {
try try
{ {
#ifndef BUILD_MODULE_3D #ifndef WITH_FLIR_CAMERA
error("OpenPose must be compiled with `BUILD_MODULE_3D` in order to use this class.", error("OpenPose must be compiled with `WITH_FLIR_CAMERA` in order to use this class.",
__LINE__, __FUNCTION__, __FILE__); __LINE__, __FUNCTION__, __FILE__);
#endif #endif
} }
...@@ -353,9 +353,9 @@ namespace op ...@@ -353,9 +353,9 @@ namespace op
} }
} }
WPointGrey::~WPointGrey() WFlirReader::~WFlirReader()
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
try try
{ {
if (upImpl->mInitialized) if (upImpl->mInitialized)
...@@ -417,9 +417,9 @@ namespace op ...@@ -417,9 +417,9 @@ namespace op
#endif #endif
} }
void WPointGrey::initializationOnThread() void WFlirReader::initializationOnThread()
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
try try
{ {
upImpl->mInitialized = true; upImpl->mInitialized = true;
...@@ -600,13 +600,15 @@ namespace op ...@@ -600,13 +600,15 @@ namespace op
#endif #endif
} }
std::shared_ptr<std::vector<Datum3D>> WPointGrey::workProducer() std::shared_ptr<std::vector<Datum3D>> WFlirReader::workProducer()
{ {
try try
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_FLIR_CAMERA
try try
{ {
// Debugging log
dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
// Profiling speed // Profiling speed
const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__);
// Get image from each camera // Get image from each camera
...@@ -616,7 +618,8 @@ namespace op ...@@ -616,7 +618,8 @@ namespace op
for (auto i = 0u ; i < cvMats.size() ; i++) for (auto i = 0u ; i < cvMats.size() ; i++)
{ {
datums3d->at(i).cvInputData = cvMats.at(i); datums3d->at(i).cvInputData = cvMats.at(i);
datums3d->at(i).cvOutputData = (*datums3d)[i].cvInputData; (*datums3d)[i].cvOutputData = (*datums3d)[i].cvInputData;
(*datums3d)[i].cameraParameterMatrix = getM(i);
} }
// Profiling speed // Profiling speed
if (!cvMats.empty()) if (!cvMats.empty())
...@@ -624,6 +627,8 @@ namespace op ...@@ -624,6 +627,8 @@ namespace op
Profiler::timerEnd(profilerKey); Profiler::timerEnd(profilerKey);
Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__);
} }
// Debugging log
dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
// Return Datum // Return Datum
return datums3d; return datums3d;
} }
...@@ -634,7 +639,7 @@ namespace op ...@@ -634,7 +639,7 @@ namespace op
return nullptr; return nullptr;
} }
#else #else
error("OpenPose must be compiled with `BUILD_MODULE_3D` in order to use this class.", error("OpenPose must be compiled with `WITH_FLIR_CAMERA` in order to use this class.",
__LINE__, __FUNCTION__, __FILE__); __LINE__, __FUNCTION__, __FILE__);
return nullptr; return nullptr;
#endif #endif
......
#include <opencv2/opencv.hpp> #include <opencv2/opencv.hpp>
#include <openpose/experimental/3d/cameraParameters.hpp>
#include <openpose/experimental/3d/reconstruction3D.hpp> #include <openpose/experimental/3d/reconstruction3D.hpp>
namespace op namespace op
...@@ -7,7 +6,7 @@ namespace op ...@@ -7,7 +6,7 @@ namespace op
double calcReprojectionError(const cv::Mat& X, const std::vector<cv::Mat>& M, const std::vector<cv::Point2d>& pt2D) double calcReprojectionError(const cv::Mat& X, const std::vector<cv::Mat>& M, const std::vector<cv::Point2d>& pt2D)
{ {
auto averageError = 0.; auto averageError = 0.;
for(unsigned int i = 0 ; i < M.size() ; i++) for (auto i = 0u ; i < M.size() ; i++)
{ {
cv::Mat imageX = M[i] * X; cv::Mat imageX = M[i] * X;
imageX /= imageX.at<double>(2,0); imageX /= imageX.at<double>(2,0);
...@@ -31,7 +30,8 @@ namespace op ...@@ -31,7 +30,8 @@ namespace op
cv::Mat A = cv::Mat::zeros(numberCameras*2, 4, CV_64F); cv::Mat A = cv::Mat::zeros(numberCameras*2, 4, CV_64F);
for (auto i = 0 ; i < numberCameras ; i++) for (auto i = 0 ; i < numberCameras ; i++)
{ {
cv::Mat temp = pointOnEachCamera[i].x*matrixEachCamera[i].rowRange(2,3) - matrixEachCamera[i].rowRange(0,1); cv::Mat temp = pointOnEachCamera[i].x*matrixEachCamera[i].rowRange(2,3)
- matrixEachCamera[i].rowRange(0,1);
temp.copyTo(A.rowRange(i*2,i*2+1)); temp.copyTo(A.rowRange(i*2,i*2+1));
temp = pointOnEachCamera[i].y*matrixEachCamera[i].rowRange(2,3) - matrixEachCamera[i].rowRange(1,2); temp = pointOnEachCamera[i].y*matrixEachCamera[i].rowRange(2,3) - matrixEachCamera[i].rowRange(1,2);
temp.copyTo(A.rowRange(i*2+1,i*2+2)); temp.copyTo(A.rowRange(i*2+1,i*2+2));
...@@ -42,7 +42,7 @@ namespace op ...@@ -42,7 +42,7 @@ namespace op
X /= X.at<double>(3); X /= X.at<double>(3);
} }
// TODO: ask Hanbyul for the missing function: TriangulationOptimization // TODO: ask for the missing function: TriangulationOptimization
double triangulateWithOptimization(cv::Mat& X, const std::vector<cv::Mat>& matrixEachCamera, double triangulateWithOptimization(cv::Mat& X, const std::vector<cv::Mat>& matrixEachCamera,
const std::vector<cv::Point2d>& pointOnEachCamera) const std::vector<cv::Point2d>& pointOnEachCamera)
{ {
...@@ -57,7 +57,8 @@ namespace op ...@@ -57,7 +57,8 @@ namespace op
return 0.; return 0.;
} }
void reconstructArray(Array<float>& keypoints3D, const std::vector<Array<float>>& keypointsVector) void reconstructArray(Array<float>& keypoints3D, const std::vector<Array<float>>& keypointsVector,
const std::vector<cv::Mat>& matrixEachCamera)
{ {
// Get number body parts // Get number body parts
auto detectionMissed = false; auto detectionMissed = false;
...@@ -106,7 +107,7 @@ namespace op ...@@ -106,7 +107,7 @@ namespace op
for (auto i = 0u; i < xyPoints.size(); i++) for (auto i = 0u; i < xyPoints.size(); i++)
{ {
cv::Mat X; cv::Mat X;
triangulateWithOptimization(X, getMs(), xyPoints[i]); triangulateWithOptimization(X, matrixEachCamera, xyPoints[i]);
xyzPoints[i] = cv::Point3d{ X.at<double>(0), X.at<double>(1), X.at<double>(2) }; xyzPoints[i] = cv::Point3d{ X.at<double>(0), X.at<double>(1), X.at<double>(2) };
} }
...@@ -143,10 +144,13 @@ namespace op ...@@ -143,10 +144,13 @@ namespace op
// datum.poseKeypoints: Array<float> with the estimated pose // datum.poseKeypoints: Array<float> with the estimated pose
try try
{ {
// Debugging log
dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
// Profiling speed // Profiling speed
const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__);
if (datumsPtr != nullptr && !datumsPtr->empty()) if (datumsPtr != nullptr && !datumsPtr->empty())
{ {
std::vector<cv::Mat> matrixEachCamera;
std::vector<Array<float>> poseKeypointVector; std::vector<Array<float>> poseKeypointVector;
std::vector<Array<float>> faceKeypointVector; std::vector<Array<float>> faceKeypointVector;
std::vector<Array<float>> leftHandKeypointVector; std::vector<Array<float>> leftHandKeypointVector;
...@@ -157,18 +161,21 @@ namespace op ...@@ -157,18 +161,21 @@ namespace op
faceKeypointVector.emplace_back(datumsElement.faceKeypoints); faceKeypointVector.emplace_back(datumsElement.faceKeypoints);
leftHandKeypointVector.emplace_back(datumsElement.handKeypoints[0]); leftHandKeypointVector.emplace_back(datumsElement.handKeypoints[0]);
rightHandKeypointVector.emplace_back(datumsElement.handKeypoints[1]); rightHandKeypointVector.emplace_back(datumsElement.handKeypoints[1]);
matrixEachCamera.emplace_back(datumsElement.cameraParameterMatrix);
} }
// Pose 3-D reconstruction // Pose 3-D reconstruction
reconstructArray(datumsPtr->at(0).poseKeypoints3D, poseKeypointVector); reconstructArray(datumsPtr->at(0).poseKeypoints3D, poseKeypointVector, matrixEachCamera);
// Face 3-D reconstruction // Face 3-D reconstruction
reconstructArray(datumsPtr->at(0).faceKeypoints3D, faceKeypointVector); reconstructArray(datumsPtr->at(0).faceKeypoints3D, faceKeypointVector, matrixEachCamera);
// Left hand 3-D reconstruction // Left hand 3-D reconstruction
reconstructArray(datumsPtr->at(0).leftHandKeypoints3D, leftHandKeypointVector); reconstructArray(datumsPtr->at(0).leftHandKeypoints3D, leftHandKeypointVector, matrixEachCamera);
// Right hand 3-D reconstruction // Right hand 3-D reconstruction
reconstructArray(datumsPtr->at(0).rightHandKeypoints3D, rightHandKeypointVector); reconstructArray(datumsPtr->at(0).rightHandKeypoints3D, rightHandKeypointVector, matrixEachCamera);
// Profiling speed // Profiling speed
Profiler::timerEnd(profilerKey); Profiler::timerEnd(profilerKey);
Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__); Profiler::printAveragedTimeMsOnIterationX(profilerKey, __LINE__, __FUNCTION__, __FILE__);
// Debugging log
dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
} }
} }
catch (const std::exception& e) catch (const std::exception& e)
......
#include <mutex> #include <mutex>
#include <stdio.h> #include <stdio.h>
#ifdef BUILD_MODULE_3D #ifdef WITH_3D_RENDERER
#include <GL/glut.h> #include <GL/glut.h>
#include <GL/freeglut_ext.h> // glutLeaveMainLoop #include <GL/freeglut_ext.h> // glutLeaveMainLoop
#include <GL/freeglut_std.h> #include <GL/freeglut_std.h>
...@@ -15,7 +15,7 @@ namespace op ...@@ -15,7 +15,7 @@ namespace op
{ {
const bool LOG_VERBOSE_3D_RENDERER = false; const bool LOG_VERBOSE_3D_RENDERER = false;
#ifdef BUILD_MODULE_3D #ifdef WITH_3D_RENDERER
struct Keypoints3D struct Keypoints3D
{ {
Array<float> mPoseKeypoints; Array<float> mPoseKeypoints;
...@@ -206,7 +206,7 @@ namespace op ...@@ -206,7 +206,7 @@ namespace op
} }
// this is the actual idle function // this is the actual idle function
void idleFunc() void idleFunction()
{ {
glutPostRedisplay(); glutPostRedisplay();
glutSwapBuffers(); glutSwapBuffers();
...@@ -381,8 +381,7 @@ namespace op ...@@ -381,8 +381,7 @@ namespace op
char *my_argv[] = { NULL }; char *my_argv[] = { NULL };
int my_argc = 0; int my_argc = 0;
glutInit(&my_argc, my_argv); glutInit(&my_argc, my_argv);
// Setup the size, position, and display mode for new windows
// setup the size, position, and display mode for new windows
glutInitWindowSize(1280, 720); glutInitWindowSize(1280, 720);
glutInitWindowPosition(200, 0); glutInitWindowPosition(200, 0);
// glutSetOption(GLUT_MULTISAMPLE,8); // glutSetOption(GLUT_MULTISAMPLE,8);
...@@ -390,14 +389,14 @@ namespace op ...@@ -390,14 +389,14 @@ namespace op
// button, but it does not work (tested in Ubuntu) // button, but it does not work (tested in Ubuntu)
// https://stackoverflow.com/questions/3799803/is-it-possible-to-make-a-window-withouth-a-top-in-glut // https://stackoverflow.com/questions/3799803/is-it-possible-to-make-a-window-withouth-a-top-in-glut
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE);
// Create and set up a window
// create and set up a window
glutCreateWindow(GUI_NAME.c_str()); glutCreateWindow(GUI_NAME.c_str());
initGraphics(); initGraphics();
glutDisplayFunc(renderMain); glutDisplayFunc(renderMain);
glutMouseFunc(mouseButton); glutMouseFunc(mouseButton);
glutMotionFunc(mouseMotion); glutMotionFunc(mouseMotion);
glutIdleFunc(idleFunc); // Only required if glutMainLoop() called
// glutIdleFunc(idleFunction);
// Full screen would fix the problem of disabling `x` button // Full screen would fix the problem of disabling `x` button
// glutFullScreen(); // glutFullScreen();
// Key presses // Key presses
...@@ -414,12 +413,12 @@ namespace op ...@@ -414,12 +413,12 @@ namespace op
{ {
try try
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_3D_RENDERER
// Update sPoseModel // Update sPoseModel
sPoseModel = poseModel; sPoseModel = poseModel;
#else #else
UNUSED(poseModel); UNUSED(poseModel);
error("OpenPose must be compiled with `BUILD_MODULE_3D` in order to use this class.", error("OpenPose must be compiled with `WITH_3D_RENDERER` in order to use this class.",
__LINE__, __FUNCTION__, __FILE__); __LINE__, __FUNCTION__, __FILE__);
#endif #endif
} }
...@@ -433,7 +432,7 @@ namespace op ...@@ -433,7 +432,7 @@ namespace op
{ {
try try
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_3D_RENDERER
glutLeaveMainLoop(); glutLeaveMainLoop();
#endif #endif
} }
...@@ -445,7 +444,7 @@ namespace op ...@@ -445,7 +444,7 @@ namespace op
void WRender3D::initializationOnThread() void WRender3D::initializationOnThread()
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_3D_RENDERER
try try
{ {
// Init display // Init display
...@@ -462,9 +461,11 @@ namespace op ...@@ -462,9 +461,11 @@ namespace op
void WRender3D::workConsumer(const std::shared_ptr<std::vector<Datum3D>>& datumsPtr) void WRender3D::workConsumer(const std::shared_ptr<std::vector<Datum3D>>& datumsPtr)
{ {
#ifdef BUILD_MODULE_3D #ifdef WITH_3D_RENDERER
try try
{ {
// Debugging log
dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
// Profiling speed // Profiling speed
const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__); const auto profilerKey = Profiler::timerInit(__LINE__, __FUNCTION__, __FILE__);
// User's displaying/saving/other processing here // User's displaying/saving/other processing here
...@@ -504,9 +505,12 @@ namespace op ...@@ -504,9 +505,12 @@ namespace op
this->stop(); this->stop();
// OpenCL - Run main loop event // OpenCL - Run main loop event
// It is run outside loop, or it would get visually stuck if loop to slow // It is run outside loop, or it would get visually stuck if loop to slow
idleFunction();
glutMainLoopEvent(); glutMainLoopEvent();
// This alternative can only be called once, and it will block the thread until program exit // This alternative can only be called once, and it will block the thread until program exit
// glutMainLoop(); // glutMainLoop();
// Debugging log
dLog("", Priority::Low, __LINE__, __FUNCTION__, __FILE__);
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
......
...@@ -10,8 +10,11 @@ namespace op ...@@ -10,8 +10,11 @@ namespace op
try try
{ {
// Get files on directory with the desired extensions // Get files on directory with the desired extensions
const std::vector<std::string> extensions{"bmp", "dib", "pbm", "pgm", "ppm", "sr", "ras", // Completely supported by OpenCV const std::vector<std::string> extensions{
"jpg", "jpeg", "png"}; // Most of them supported by OpenCV // Completely supported by OpenCV
"bmp", "dib", "pbm", "pgm", "ppm", "sr", "ras",
// Most of them supported by OpenCV
"jpg", "jpeg", "png"};
const auto imagePaths = getFilesOnDirectory(imageDirectoryPath, extensions); const auto imagePaths = getFilesOnDirectory(imageDirectoryPath, extensions);
// Check #files > 0 // Check #files > 0
...@@ -45,7 +48,8 @@ namespace op ...@@ -45,7 +48,8 @@ namespace op
try try
{ {
auto frame = loadImage(mFilePaths.at(mFrameNameCounter++).c_str(), CV_LOAD_IMAGE_COLOR); auto frame = loadImage(mFilePaths.at(mFrameNameCounter++).c_str(), CV_LOAD_IMAGE_COLOR);
// Check frame integrity. This function also checks width/height changes. However, if it is performed after setWidth/setHeight this is performed over the new resolution (so they always match). // Check frame integrity. This function also checks width/height changes. However, if it is performed
// after setWidth/setHeight this is performed over the new resolution (so they always match).
checkFrameIntegrity(frame); checkFrameIntegrity(frame);
// Update size, since images might have different size between each one of them // Update size, since images might have different size between each one of them
mResolution = Point<int>{frame.cols, frame.rows}; mResolution = Point<int>{frame.cols, frame.rows};
......
...@@ -53,7 +53,8 @@ DEEP_NET := caffe ...@@ -53,7 +53,8 @@ DEEP_NET := caffe
CAFFE_DIR := 3rdparty/caffe/distribute CAFFE_DIR := 3rdparty/caffe/distribute
# OpenPose 3-D Reconstruction # OpenPose 3-D Reconstruction
# BUILD_MODULE_3D := 1 # WITH_3D_RENDERER := 1
# WITH_FLIR_CAMERA := 1
# Spinnaker directory # Spinnaker directory
SPINNAKER_DIR := /usr/include/spinnaker SPINNAKER_DIR := /usr/include/spinnaker
......
...@@ -59,7 +59,8 @@ DEEP_NET := caffe ...@@ -59,7 +59,8 @@ DEEP_NET := caffe
CAFFE_DIR := 3rdparty/caffe/distribute CAFFE_DIR := 3rdparty/caffe/distribute
# OpenPose 3-D Reconstruction # OpenPose 3-D Reconstruction
# BUILD_MODULE_3D := 1 # WITH_3D_RENDERER := 1
# WITH_FLIR_CAMERA := 1
# Spinnaker directory # Spinnaker directory
SPINNAKER_DIR := /usr/include/spinnaker SPINNAKER_DIR := /usr/include/spinnaker
......
...@@ -53,7 +53,8 @@ DEEP_NET := caffe ...@@ -53,7 +53,8 @@ DEEP_NET := caffe
CAFFE_DIR := 3rdparty/caffe/distribute CAFFE_DIR := 3rdparty/caffe/distribute
# OpenPose 3-D Reconstruction # OpenPose 3-D Reconstruction
# BUILD_MODULE_3D := 1 # WITH_3D_RENDERER := 1
# WITH_FLIR_CAMERA := 1
# Spinnaker directory # Spinnaker directory
SPINNAKER_DIR := /usr/include/spinnaker SPINNAKER_DIR := /usr/include/spinnaker
......
...@@ -59,7 +59,8 @@ DEEP_NET := caffe ...@@ -59,7 +59,8 @@ DEEP_NET := caffe
CAFFE_DIR := 3rdparty/caffe/distribute CAFFE_DIR := 3rdparty/caffe/distribute
# OpenPose 3-D Reconstruction # OpenPose 3-D Reconstruction
# BUILD_MODULE_3D := 1 # WITH_3D_RENDERER := 1
# WITH_FLIR_CAMERA := 1
# Spinnaker directory # Spinnaker directory
SPINNAKER_DIR := /usr/include/spinnaker SPINNAKER_DIR := /usr/include/spinnaker
......
...@@ -59,7 +59,8 @@ DEEP_NET := caffe ...@@ -59,7 +59,8 @@ DEEP_NET := caffe
CAFFE_DIR := 3rdparty/caffe/distribute CAFFE_DIR := 3rdparty/caffe/distribute
# OpenPose 3-D Reconstruction # OpenPose 3-D Reconstruction
# BUILD_MODULE_3D := 1 # WITH_3D_RENDERER := 1
# WITH_FLIR_CAMERA := 1
# Spinnaker directory # Spinnaker directory
SPINNAKER_DIR := /usr/include/spinnaker SPINNAKER_DIR := /usr/include/spinnaker
......
...@@ -71,17 +71,23 @@ else ...@@ -71,17 +71,23 @@ else
endif endif
# Spinnaker # 3-D
BUILD_MODULE_3D ?= 0 # 3-D renderer
ifneq ($(BUILD_MODULE_3D), 0) WITH_3D_RENDERER ?= 0
COMMON_FLAGS += -DBUILD_MODULE_3D ifneq ($(WITH_3D_RENDERER), 0)
# Spinnaker SDK COMMON_FLAGS += -DWITH_3D_RENDERER
LIBRARIES += Spinnaker
INCLUDE_DIRS += $(SPINNAKER_DIR)
# FreeGLUT # FreeGLUT
LIBRARIES += glut LIBRARIES += glut
# LIBRARIES += GLU GL glut # LIBRARIES += GLU GL glut
endif endif
# Spinnaker SDK
WITH_FLIR_CAMERA ?= 0
ifneq ($(WITH_FLIR_CAMERA), 0)
COMMON_FLAGS += -DWITH_FLIR_CAMERA
# Spinnaker SDK
LIBRARIES += Spinnaker
INCLUDE_DIRS += $(SPINNAKER_DIR)
endif
############################## ##############################
# Get all source files # Get all source files
......
...@@ -125,8 +125,8 @@ ...@@ -125,8 +125,8 @@
<ClInclude Include="..\..\include\openpose\core\wScaleAndSizeExtractor.hpp" /> <ClInclude Include="..\..\include\openpose\core\wScaleAndSizeExtractor.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\cameraParameters.hpp" /> <ClInclude Include="..\..\include\openpose\experimental\3d\cameraParameters.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\datum3D.hpp" /> <ClInclude Include="..\..\include\openpose\experimental\3d\datum3D.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\flirReader.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\headers.hpp" /> <ClInclude Include="..\..\include\openpose\experimental\3d\headers.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\pointGrey.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\reconstruction3D.hpp" /> <ClInclude Include="..\..\include\openpose\experimental\3d\reconstruction3D.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\3d\renderer.hpp" /> <ClInclude Include="..\..\include\openpose\experimental\3d\renderer.hpp" />
<ClInclude Include="..\..\include\openpose\experimental\headers.hpp" /> <ClInclude Include="..\..\include\openpose\experimental\headers.hpp" />
...@@ -284,7 +284,7 @@ ...@@ -284,7 +284,7 @@
<ClCompile Include="..\..\src\openpose\core\resizeAndMergeCaffe.cpp" /> <ClCompile Include="..\..\src\openpose\core\resizeAndMergeCaffe.cpp" />
<ClCompile Include="..\..\src\openpose\core\scaleAndSizeExtractor.cpp" /> <ClCompile Include="..\..\src\openpose\core\scaleAndSizeExtractor.cpp" />
<ClCompile Include="..\..\src\openpose\experimental\3d\cameraParameters.cpp" /> <ClCompile Include="..\..\src\openpose\experimental\3d\cameraParameters.cpp" />
<ClCompile Include="..\..\src\openpose\experimental\3d\pointGrey.cpp" /> <ClCompile Include="..\..\src\openpose\experimental\3d\flirReader.cpp" />
<ClCompile Include="..\..\src\openpose\experimental\3d\reconstruction3D.cpp" /> <ClCompile Include="..\..\src\openpose\experimental\3d\reconstruction3D.cpp" />
<ClCompile Include="..\..\src\openpose\experimental\3d\renderer.cpp" /> <ClCompile Include="..\..\src\openpose\experimental\3d\renderer.cpp" />
<ClCompile Include="..\..\src\openpose\experimental\tracking\defineTemplates.cpp" /> <ClCompile Include="..\..\src\openpose\experimental\tracking\defineTemplates.cpp" />
......
...@@ -560,10 +560,10 @@ ...@@ -560,10 +560,10 @@
<ClInclude Include="..\..\include\openpose\experimental\3d\datum3D.hpp"> <ClInclude Include="..\..\include\openpose\experimental\3d\datum3D.hpp">
<Filter>Header Files\experimental\3d</Filter> <Filter>Header Files\experimental\3d</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\openpose\experimental\3d\headers.hpp"> <ClInclude Include="..\..\include\openpose\experimental\3d\flirReader.hpp">
<Filter>Header Files\experimental\3d</Filter> <Filter>Header Files\experimental\3d</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\openpose\experimental\3d\pointGrey.hpp"> <ClInclude Include="..\..\include\openpose\experimental\3d\headers.hpp">
<Filter>Header Files\experimental\3d</Filter> <Filter>Header Files\experimental\3d</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\openpose\experimental\3d\reconstruction3D.hpp"> <ClInclude Include="..\..\include\openpose\experimental\3d\reconstruction3D.hpp">
...@@ -657,7 +657,7 @@ ...@@ -657,7 +657,7 @@
<ClCompile Include="..\..\src\openpose\experimental\3d\cameraParameters.cpp"> <ClCompile Include="..\..\src\openpose\experimental\3d\cameraParameters.cpp">
<Filter>Source Files\experimental\3d</Filter> <Filter>Source Files\experimental\3d</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\openpose\experimental\3d\pointGrey.cpp"> <ClCompile Include="..\..\src\openpose\experimental\3d\flirReader.cpp">
<Filter>Source Files\experimental\3d</Filter> <Filter>Source Files\experimental\3d</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\openpose\experimental\3d\reconstruction3D.cpp"> <ClCompile Include="..\..\src\openpose\experimental\3d\reconstruction3D.cpp">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册