diff --git a/.gitignore b/.gitignore
index c648b06ae4c0f67b1c45141a14fcf373553ea7f7..35ccdd41a638eba9674ab1921659232c8cc06a70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,6 +102,7 @@ distribute/
3rdparty/caffe/.github
3rdparty/eigen/
3rdparty/windows/caffe/
+3rdparty/windows/caffe_cpu/
3rdparty/windows/caffe_opencl/
3rdparty/windows/caffe3rdparty/
3rdparty/windows/opencv/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 90240168401900110fbf005fc49668ac7024ba11..9a3266be5f6c1f5964cba9ce9c0bc05e758a37f3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -301,7 +301,7 @@ if (UNIX AND NOT APPLE)
elseif (OpenCV_INCLUDE_DIRS AND OpenCV_LIBS_DIR)
file(GLOB_RECURSE OpenCV_LIBS "${OpenCV_LIBS_DIR}*.so")
set(OpenCV_FOUND 1)
- else ()
+ else (OpenCV_CONFIG_FILE)
find_package(OpenCV)
endif (OpenCV_CONFIG_FILE)
@@ -386,6 +386,8 @@ if (WIN32)
download_zip("caffe3rdparty_2018_02_13.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 6653E07E3D2D7226D64FAD2DF0B407FB)
if (${GPU_MODE} MATCHES "OPENCL")
download_zip("caffe_opencl_2018_02_13.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 3ac3e1acf5ee6a4e57920be73053067a)
+ elseif (${GPU_MODE} MATCHES "CPU_ONLY")
+ download_zip("caffe_cpu_2018_05_27.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 87E8401B6DFBAC5B8E909DD20E3B3390)
else (${GPU_MODE} MATCHES "OPENCL")
download_zip("caffe_2018_01_18.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 4b8e548cc7ea20abea472950dd5301bd)
endif (${GPU_MODE} MATCHES "OPENCL")
@@ -401,22 +403,30 @@ if (WIN32)
find_library(GLOG_LIBRARY_DEBUG glogd HINTS ${FIND_LIB_PREFIX}/caffe3rdparty/lib)
find_library(OpenCV_LIBS opencv_world310 HINTS ${FIND_LIB_PREFIX}/opencv/x64/vc14/lib)
- if (${GPU_MODE} MATCHES "OPENCL")
- SET(CAFFE_CL_CHECKED True CACHE BOOL "")
+ # If OpenPose builds it
+ if (BUILD_CAFFE)
+ unset(Caffe_INCLUDE_DIRS CACHE)
unset(Caffe_LIB CACHE)
unset(Caffe_Proto_LIB CACHE)
- set(CL "_CL")
+ endif (BUILD_CAFFE)
+ # OpenCL
+ if (${GPU_MODE} MATCHES "OPENCL")
+ set(VCXPROJ_FILE_GPU_MODE "_CL")
find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe_opencl/lib)
find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe_opencl/lib)
+ # CPU & CUDA
else (${GPU_MODE} MATCHES "OPENCL")
- if (CAFFE_CL_CHECKED)
- unset(Caffe_LIB CACHE)
- unset(Caffe_Proto_LIB CACHE)
- endif (CAFFE_CL_CHECKED)
- set(CAFFE_CL_CHECKED 0)
- set(CL "")
- find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe/lib)
- find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe/lib)
+ # CPU
+ if (${GPU_MODE} MATCHES "CPU_ONLY")
+ set(VCXPROJ_FILE_GPU_MODE "_CPU")
+ find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe_cpu/lib)
+ find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe_cpu/lib)
+ # CUDA
+ else (${GPU_MODE} MATCHES "CPU_ONLY")
+ set(VCXPROJ_FILE_GPU_MODE "")
+ find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe/lib)
+ find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe/lib)
+ endif (${GPU_MODE} MATCHES "CPU_ONLY")
endif (${GPU_MODE} MATCHES "OPENCL")
if (${GPU_MODE} MATCHES "OPENCL")
@@ -435,16 +445,19 @@ if (WIN32)
endif (WITH_FLIR_CAMERA)
set(Caffe_LIBS ${Caffe_LIB};${Caffe_Proto_LIB})
set(OpenCV_INCLUDE_DIRS "3rdparty/windows/opencv/include")
+ # OpenCL
if (${GPU_MODE} MATCHES "OPENCL")
- SET(CAFFE_CL_CHECKED2 True CACHE BOOL "")
unset(Caffe_INCLUDE_DIRS CACHE)
set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe_opencl/include;3rdparty/windows/caffe_opencl/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS")
+ # CUDA and CPU
else (${GPU_MODE} MATCHES "OPENCL")
- if (CAFFE_CL_CHECKED2)
- unset(Caffe_INCLUDE_DIRS CACHE)
- endif (CAFFE_CL_CHECKED2)
- set(CAFFE_CL_CHECKED2 0)
- set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe/include;3rdparty/windows/caffe/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS")
+ # CPU
+ if (${GPU_MODE} MATCHES "CPU_ONLY")
+ set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe_cpu/include;3rdparty/windows/caffe_cpu/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS")
+ # CUDA
+ else (${GPU_MODE} MATCHES "CPU_ONLY")
+ set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe/include;3rdparty/windows/caffe/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS")
+ endif (${GPU_MODE} MATCHES "CPU_ONLY")
endif (${GPU_MODE} MATCHES "OPENCL")
set(Boost_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include/boost-1_61")
set(WINDOWS_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include")
diff --git a/cmake/OpenPose_CPU.vcxproj.user b/cmake/OpenPose_CPU.vcxproj.user
new file mode 100644
index 0000000000000000000000000000000000000000..50d900ffff41ced6ed0c0757a77ff2a876e6c011
--- /dev/null
+++ b/cmake/OpenPose_CPU.vcxproj.user
@@ -0,0 +1,16 @@
+
+
+
+
+ PATH=%PATH%;3rdparty\windows\caffe_cpu\bin\;3rdparty\windows\opencv\x64\vc14\bin;3rdparty\windows\freeglut\bin\;3rdparty\windows\spinnaker\bin\
+ WindowsLocalDebugger
+ ..\..\..
+
+
+
+ PATH=%PATH%;3rdparty\windows\caffe_cpu\bin\;3rdparty\windows\opencv\x64\vc14\bin;3rdparty\windows\freeglut\bin\;3rdparty\windows\spinnaker\bin\
+ WindowsLocalDebugger
+ ..\..\..
+
+
+
\ No newline at end of file
diff --git a/examples/openpose/CMakeLists.txt b/examples/openpose/CMakeLists.txt
index 859d87e6aaa5635b4450ef238fa787f99e7c9d4e..7c35b8f192243d33a686b9da2d3042f40a02b2f5 100644
--- a/examples/openpose/CMakeLists.txt
+++ b/examples/openpose/CMakeLists.txt
@@ -17,7 +17,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES})
if (WIN32)
set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples")
- configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY)
# Properties->General->Output Directory
set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration))
diff --git a/examples/tests/CMakeLists.txt b/examples/tests/CMakeLists.txt
index a9327b028b5f19af8681f360f119340b1724891f..793ed26747ec507850af5de01c9111c834d96b02 100644
--- a/examples/tests/CMakeLists.txt
+++ b/examples/tests/CMakeLists.txt
@@ -18,7 +18,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES})
if (WIN32)
set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Tests")
- configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY)
# Properties->General->Output Directory
set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration))
diff --git a/examples/tutorial_add_module/CMakeLists.txt b/examples/tutorial_add_module/CMakeLists.txt
index 4cd9a62931bf89dd32086cbfe385651cf820f7a3..29bf32235d9c71a504028826c087659aa80ccdc0 100644
--- a/examples/tutorial_add_module/CMakeLists.txt
+++ b/examples/tutorial_add_module/CMakeLists.txt
@@ -19,7 +19,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES})
if (WIN32)
set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/AddModule")
- configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY)
# Properties->General->Output Directory
set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration))
diff --git a/examples/tutorial_pose/CMakeLists.txt b/examples/tutorial_pose/CMakeLists.txt
index 5770362540ccd9794ac0ff8b6ca704f29d96a907..1398ec3a09922c8f19bf74c1edb0eaddbfea48b0 100644
--- a/examples/tutorial_pose/CMakeLists.txt
+++ b/examples/tutorial_pose/CMakeLists.txt
@@ -18,7 +18,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES})
if (WIN32)
set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Pose")
- configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY)
# Properties->General->Output Directory
set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration))
diff --git a/examples/tutorial_thread/CMakeLists.txt b/examples/tutorial_thread/CMakeLists.txt
index 60f6dd20970e353a50ad3d1c4fdfeecb876d0b46..717fc663c4b7a62b0144e462db70cf19518a9a32 100644
--- a/examples/tutorial_thread/CMakeLists.txt
+++ b/examples/tutorial_thread/CMakeLists.txt
@@ -20,7 +20,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES})
if (WIN32)
set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Thread")
- configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY)
# Properties->General->Output Directory
set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration))
diff --git a/examples/tutorial_wrapper/CMakeLists.txt b/examples/tutorial_wrapper/CMakeLists.txt
index 74aadfeae0b27d9c1eb37901d10a570b8825f595..a2e093537fbf04621c385fd05b0492e32e55dd67 100644
--- a/examples/tutorial_wrapper/CMakeLists.txt
+++ b/examples/tutorial_wrapper/CMakeLists.txt
@@ -24,7 +24,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES})
if (WIN32)
set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Wrapper")
- configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user
+ configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY)
# Properties->General->Output Directory
set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration))
diff --git a/src/openpose/net/netCaffe.cpp b/src/openpose/net/netCaffe.cpp
index 7118866de97f56b37c643f65fabf68357a0644cc..b9ffa449ce88078b544f516b5ed26bf10c88b90f 100644
--- a/src/openpose/net/netCaffe.cpp
+++ b/src/openpose/net/netCaffe.cpp
@@ -149,10 +149,16 @@ namespace op
#ifdef USE_CUDA
caffe::Caffe::set_mode(caffe::Caffe::GPU);
caffe::Caffe::SetDevice(upImpl->mGpuId);
+ upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST});
#else
caffe::Caffe::set_mode(caffe::Caffe::CPU);
+ #ifdef _WIN32
+ upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST,
+ caffe::Caffe::GetCPUDevice()});
+ #else
+ upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST});
+ #endif
#endif
- upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST});
upImpl->upCaffeNet->CopyTrainedLayersFrom(upImpl->mCaffeTrainedModel);
#ifdef USE_CUDA
cudaCheck(__LINE__, __FUNCTION__, __FILE__);