Skip to content

Commit

Permalink
added Linux (GCC) build support; added Unity plugin; added RealSense …
Browse files Browse the repository at this point in the history
…SDK 2 Support (RS2Camera.cpp/.h);

changed demo and test projects to depend on stalic library, rather than
re-building each source; added parameter for enabling RGB stream in SR300Camera (for Windows
RSSDK), disabled by default due to performance impact. Also available in RS2Camera.
  • Loading branch information
sxyu committed Mar 11, 2018
1 parent e29a0a9 commit 1e0ec8a
Show file tree
Hide file tree
Showing 55 changed files with 36,673 additions and 32,907 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,11 @@ pmdaccess2.dll
OpenNI2.dll
#main.cpp

# CMake
CMakeFiles/
build/
include/Version.h

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
282 changes: 156 additions & 126 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,59 +1,77 @@
cmake_minimum_required(VERSION 2.8)
cmake_minimum_required( VERSION 2.8 )

project( OpenARK )
set( OpenARK_VERSION_MAJOR 0 )
set( OpenARK_VERSION_MINOR 9 )
set( OpenARK_VERSION_PATCH 3 )
set( SVM_PATHS "\"svm/\", \"../svm/\", \"\"" )
set( INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include" )

set(OpenARK_VERSION_MAJOR 0)
set(OpenARK_VERSION_MINOR 9)
set(OpenARK_VERSION_PATCH 3)
set( CMAKE_CXX_STACK_SIZE "10000000" )
set( CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules" )

set(SVM_PATHS "\"svm/\", \"../svm/\", \"\"")
set(INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include")

set(CMAKE_CXX_STACK_SIZE "10000000")
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules")

set(LIB_NAME "OpenARK")
set(DEMO_NAME "OpenARK_demo")
set(TEST_NAME "OpenARK_test")

option(BUILD_DEMO "BUILD_DEMO" ON)
option(BUILD_TESTS "BUILD_TESTS" OFF)
option(USE_PMD "USE_PMD" OFF)
if( NOT CMAKE_BUILD_TYPE )
set( CMAKE_BUILD_TYPE Release )
endif()

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
set( LIB_NAME "OpenARK" )
set( DEMO_NAME "OpenARK_demo" )
set( TEST_NAME "OpenARK_test" )
set( UNITY_PLUGIN_NAME "UnityPlugin" )

option( BUILD_DEMO "BUILD_DEMO" ON )
option( BUILD_TESTS "BUILD_TESTS" OFF )
option( BUILD_UNITY_PLUGIN "BUILD_UNITY_PLUGIN" ON )
option( USE_RSSDK2 "USE_RSSDK2" ON )
option( USE_RSSDK "USE_RSSDK" OFF )
option( USE_PMDSDK "USE_PMDSDK" OFF )

include( CheckCXXCompilerFlag )
CHECK_CXX_COMPILER_FLAG( "-std=c++11" COMPILER_SUPPORTS_CXX11 )
CHECK_CXX_COMPILER_FLAG( "-std=c++0x" COMPILER_SUPPORTS_CXX0X )

if( COMPILER_SUPPORTS_CXX11 )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
elseif( COMPILER_SUPPORTS_CXX0X )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" )
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
message( STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler." )
endif()

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC ON)
if ( CMAKE_COMPILER_IS_GNUCXX )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wno-deprecated-declarations -O3 -g" )
endif ( CMAKE_COMPILER_IS_GNUCXX )

set( Boost_USE_STATIC_LIBS ON )
set( Boost_USE_STATIC ON )

find_package( PCL REQUIRED )

find_package( OpenCV REQUIRED )
if(OpenCV_FOUND)
message(STATUS "Found OpenCV: ${OpenCV_INCLUDE_DIRS}")
endif(OpenCV_FOUND)

if(NOT USE_PMD)
find_package(RSSDK)
if(RSSDK_FOUND)
message(STATUS "Found RSSDK: ${RSSDK_INCLUDE_DIR}")
endif(RSSDK_FOUND)
endif(NOT USE_PMD)

if(USE_PMD OR NOT RSSDK_FOUND)
find_package( PMDSDK REQUIRED)
if(PMDSDK_FOUND)
message(STATUS "Found PMDSDK: ${PMDSDK_INCLUDE_DIR}")
endif(PMDSDK_FOUND)
endif(USE_PMD OR NOT RSSDK_FOUND)
if( OpenCV_FOUND )
message( STATUS "Found OpenCV: ${OpenCV_INCLUDE_DIRS}" )
endif( OpenCV_FOUND )

if( USE_RSSDK2 )
find_package( RSSDK2 )
if( RSSDK2_FOUND )
message( STATUS "Found RSSDK2: ${RSSDK2_INCLUDE_DIR}" )
endif( RSSDK2_FOUND )
endif( USE_RSSDK2 )

if( USE_RSSDK OR NOT RSSDK2_FOUND )
find_package( RSSDK )
if( RSSDK_FOUND )
message( STATUS "Found RSSDK: ${RSSDK_INCLUDE_DIR}" )
endif( RSSDK_FOUND )
endif( USE_RSSDK OR NOT RSSDK2_FOUND )

if( USE_PMDSDK OR ( NOT RSSDK_FOUND AND NOT RSSDK2_FOUND ) )
find_package( PMDSDK REQUIRED )
if( PMDSDK_FOUND )
message( STATUS "Found PMDSDK: ${PMDSDK_INCLUDE_DIR}" )
endif( PMDSDK_FOUND )
endif( USE_PMDSDK OR ( NOT RSSDK_FOUND AND NOT RSSDK2_FOUND ) )

include_directories(
${OpenCV_INCLUDE_DIRS}
Expand All @@ -69,8 +87,8 @@ set(
add_definitions(
${PCL_DEFINITIONS}
)
foreach(DEFINITION ${PCL_DEFINITIONS})
set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${DEFINITION}")
foreach( DEFINITION ${PCL_DEFINITIONS} )
set( TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${DEFINITION}" )
endforeach()

set(
Expand All @@ -84,7 +102,6 @@ set(
Calibration.cpp
Util.cpp
Visualizer.cpp
Converter.cpp
HandClassifier.cpp
Detector.cpp
HandDetector.cpp
Expand All @@ -104,99 +121,112 @@ set(
${INCLUDE_DIR}/Calibration.h
${INCLUDE_DIR}/Util.h
${INCLUDE_DIR}/Visualizer.h
${INCLUDE_DIR}/Converter.h
${INCLUDE_DIR}/HandClassifier.h
${INCLUDE_DIR}/Detector.h
${INCLUDE_DIR}/HandDetector.h
${INCLUDE_DIR}/PlaneDetector.h
stdafx.h
)

if(NOT RSSDK_FOUND)
SET(RSSDK "//")
if( NOT RSSDK2_FOUND )
set( RSSDK2 "//" )
else()
include_directories( ${RSSDK2_INCLUDE_DIR} )
set( SOURCES ${SOURCES} RS2Camera.cpp )
set( HEADERS ${HEADERS} ${INCLUDE_DIR}/RS2Camera.h )
set( DEPENDENCIES ${DEPENDENCIES} ${RSSDK2_LIBRARY} )
endif( NOT RSSDK2_FOUND )

if( NOT RSSDK_FOUND )
set( RSSDK "//" )
else()
set(SOURCES ${SOURCES} SR300Camera.cpp)
set(HEADERS ${HEADERS} ${INCLUDE_DIR}/SR300Camera.h)
endif(NOT RSSDK_FOUND)
include_directories( ${RSSDK_INCLUDE_DIR} )
set( SOURCES ${SOURCES} SR300Camera.cpp Converter.cpp )
set( HEADERS ${HEADERS} ${INCLUDE_DIR}/SR300Camera.h ${INCLUDE_DIR}/Converter.h )
endif( NOT RSSDK_FOUND )

if(NOT PMDSDK_FOUND)
SET(PMDSDK "//")
if( NOT PMDSDK_FOUND )
set( PMDSDK "//" )
else()
include_directories(${PMDSDK_INCLUDE_DIR})
set(SOURCES ${SOURCES} PMDCamera.cpp)
set(HEADERS ${HEADERS} ${INCLUDE_DIR}/PMDCamera.h)
set(DEPENDENCIES ${DEPENDENCIES} ${PMDSDK_LIBRARIES})
endif(NOT PMDSDK_FOUND)

configure_file(Version.h.in ${INCLUDE_DIR}/Version.h)
set(HEADERS ${HEADERS} ${INCLUDE_DIR}/Version.h)

# create source group
source_group("Header Files" REGULAR_EXPRESSION ".*\\.(h|hpp)")

macro(add_msvc_pch PrecompiledHeader PrecompiledSource SourcesVar)
if(MSVC)
get_filename_component(PrecompiledBasename ${PrecompiledHeader} NAME_WE)
set(PrecompiledBinary "$(IntDir)/${PrecompiledBasename}.pch")
set(Sources ${${SourcesVar}})

if(NOT ${PrecompiledSource} STREQUAL "")
set(Sources ${Sources} main.cpp)
set_source_files_properties(${PrecompiledSource}
PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
OBJECT_OUTPUTS "${PrecompiledBinary}")
endif(NOT ${PrecompiledSource} STREQUAL "")

set_source_files_properties(${Sources}
PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledHeader}\" /FI\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
OBJECT_DEPENDS "${PrecompiledBinary}")
list(APPEND ${SourcesVar} ${PrecompiledSource})
endif(MSVC)
endmacro(add_msvc_pch)

if (MSVC)
add_msvc_pch("stdafx.h" "stdafx.cpp" SOURCES)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /Ot")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMT")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
endif(MSVC)

add_library(${LIB_NAME} STATIC "${INCLUDE_DIR}/Core.h" ${SOURCES} ${HEADERS})
include_directories( ${PMDSDK_INCLUDE_DIR} )
set( SOURCES ${SOURCES} PMDCamera.cpp )
set( HEADERS ${HEADERS} ${INCLUDE_DIR}/PMDCamera.h )
set( DEPENDENCIES ${DEPENDENCIES} ${PMDSDK_LIBRARIES} )
endif( NOT PMDSDK_FOUND )

configure_file( Version.h.in ${INCLUDE_DIR}/Version.h )
set( HEADERS ${HEADERS} ${INCLUDE_DIR}/Version.h )

# MSVC special options
if ( MSVC )
# MSVC precompiled header
set( PRECOMPILED_BINARY "$(IntDir)/stdafx.pch" )
set( PRECOMPILED_HEADER "stdafx.h" )
set( PRECOMPILED_SOURCE "stdafx.cpp" )

set_source_files_properties( ${PRECOMPILED_SOURCE}
PROPERTIES COMPILE_FLAGS "/Yc\"${PRECOMPILED_HEADER}\" /Fp\"${PRECOMPILED_BINARY}\""
OBJECT_OUTPUTS "${PRECOMPILED_HEADER}" )
set_source_files_properties( ${SOURCES}
PROPERTIES COMPILE_FLAGS "/Yu\"${PRECOMPILED_HEADER}\" /FI\"${PRECOMPILED_HEADER}\" /Fp\"${PRECOMPILED_BINARY}\""
OBJECT_DEPENDS "${PRECOMPILED_HEADER}" )
set( SOURCES ${SOURCES} ${PRECOMPILED_SOURCE} )
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /Ot" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMT" )
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMT" )
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD" )
endif ( MSVC )

add_library( ${LIB_NAME} STATIC "${INCLUDE_DIR}/Core.h" ${SOURCES} ${HEADERS} )
set_target_properties( ${LIB_NAME} PROPERTIES OUTPUT_NAME
"openark_${OpenARK_VERSION_MAJOR}_${OpenARK_VERSION_MINOR}_${OpenARK_VERSION_PATCH}")
set_target_properties(${LIB_NAME} PROPERTIES COMPILE_FLAGS "/MD")
set_property(TARGET ${LIB_NAME} PROPERTY DBG_POSTFIX d)
"openark_${OpenARK_VERSION_MAJOR}_${OpenARK_VERSION_MINOR}_${OpenARK_VERSION_PATCH}" )

set_property( TARGET ${LIB_NAME} PROPERTY DBG_POSTFIX d )
target_link_libraries( ${LIB_NAME} ${DEPENDENCIES} )
target_include_directories(${LIB_NAME} PRIVATE ${INCLUDE_DIR})

if(${BUILD_DEMO})
add_executable( ${DEMO_NAME} main.cpp ${SOURCES} ${HEADERS})
target_include_directories(${DEMO_NAME} PRIVATE ${INCLUDE_DIR})
target_link_libraries( ${DEMO_NAME} ${DEPENDENCIES} )
set_target_properties( ${DEMO_NAME} PROPERTIES OUTPUT_NAME ${LIB_NAME})
set_target_properties( ${DEMO_NAME} PROPERTIES COMPILE_FLAGS ${TARGET_COMPILE_FLAGS})
endif(${BUILD_DEMO})

if(${BUILD_TESTS})
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/OpenARK_test)
execute_process(
COMMAND git clone https://github.com/augcog/OpenARK_test.git
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
endif(NOT EXISTS ${PROJECT_SOURCE_DIR}/OpenARK_test)
target_include_directories( ${LIB_NAME} PRIVATE ${INCLUDE_DIR} )

set(
TEST_SOURCES
OpenARK_test/test.cpp
OpenARK_test/TestCamera.cpp
)
if ( MSVC )
set_target_properties( ${LIB_NAME} PROPERTIES COMPILE_FLAGS "/MD" )
endif()

add_msvc_pch("../stdafx.h" "" TEST_SOURCES)
if( ${BUILD_DEMO} )
add_executable( ${DEMO_NAME} main.cpp )
target_include_directories( ${DEMO_NAME} PRIVATE ${INCLUDE_DIR} )
target_link_libraries( ${DEMO_NAME} ${DEPENDENCIES} ${LIB_NAME} )
set_target_properties( ${DEMO_NAME} PROPERTIES OUTPUT_NAME ${LIB_NAME} )
set_target_properties( ${DEMO_NAME} PROPERTIES COMPILE_FLAGS ${TARGET_COMPILE_FLAGS} )
endif( ${BUILD_DEMO} )

# Unity plugin currently only supports Windows
if( ${BUILD_UNITY_PLUGIN} AND MSVC )
add_library( ${UNITY_PLUGIN_NAME} SHARED "unity/native/UnityInterface.cpp" "unity/native/UnityInterface.h" "unity/README.md" )
set( HEADERS ${HEADERS} "unity/native/UnityInterface.h" )
target_link_libraries( ${UNITY_PLUGIN_NAME} ${DEPENDENCIES} ${LIB_NAME} )
if ( MSVC )
set_target_properties( ${UNITY_PLUGIN_NAME} PROPERTIES COMPILE_FLAGS "/MD" )
endif ( MSVC )
set_property( TARGET ${UNITY_PLUGIN_NAME} PROPERTY DBG_POSTFIX d )
target_include_directories( ${UNITY_PLUGIN_NAME} PRIVATE ${INCLUDE_DIR} "unity/native" )
set_target_properties( ${UNITY_PLUGIN_NAME} PROPERTIES OUTPUT_NAME "openark_unity_${OpenARK_VERSION_MAJOR}_${OpenARK_VERSION_MINOR}_${OpenARK_VERSION_PATCH}_native" )
endif( ${BUILD_UNITY_PLUGIN} AND MSVC )

if( ${BUILD_TESTS} )
if( NOT EXISTS ${PROJECT_SOURCE_DIR}/OpenARK_test )
execute_process(
COMMAND git clone https://github.com/augcog/OpenARK_test.git
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} )
endif( NOT EXISTS ${PROJECT_SOURCE_DIR}/OpenARK_test )

add_executable( ${TEST_NAME} ${TEST_SOURCES} ${SOURCES} OpenARK_test/TestCamera.h ${HEADERS})
target_link_libraries( ${TEST_NAME} ${DEPENDENCIES} )
add_executable( ${TEST_NAME} "OpenARK_test/test.cpp" "OpenARK_test/TestCamera.cpp" "OpenARK_test/TestCamera.h" )
set( HEADERS ${HEADERS} "OpenARK_test/TestCamera.h" )

target_link_libraries( ${TEST_NAME} ${DEPENDENCIES} ${LIB_NAME} )
set_target_properties( ${TEST_NAME} PROPERTIES
COMPILE_FLAGS ${TARGET_COMPILE_FLAGS})
COMPILE_FLAGS ${TARGET_COMPILE_FLAGS} )

target_include_directories(${TEST_NAME} PRIVATE ${INCLUDE_DIR})
endif(${BUILD_TESTS})
target_include_directories( ${TEST_NAME} PRIVATE ${INCLUDE_DIR} )
endif( ${BUILD_TESTS} )

# Create source group for headers
source_group( "Header Files" FILES ${HEADERS} )
8 changes: 4 additions & 4 deletions Calibration.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "stdafx.h"
#include "version.h"
#include "Version.h"
#include "Calibration.h"
#include "Util.h"

Expand Down Expand Up @@ -65,12 +65,12 @@ namespace ark {
cornersXYZ.push_back(pt);
}

auto c = cv::waitKey(1);
int c = cv::waitKey(1);
if (c == ' ')
{
success++;
XYZ_points.push_back(cornersXYZ);
printf("%I64u points recorded!\n", cornersXYZ.size());
printf("%u points recorded!\n", (unsigned) cornersXYZ.size());
}
}

Expand Down Expand Up @@ -215,4 +215,4 @@ namespace ark {
}
output_file.close();
}
}
}
2 changes: 1 addition & 1 deletion Converter.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "stdafx.h"
#include "version.h"
#include "Version.h"
#include "Converter.h"

namespace ark {
Expand Down
2 changes: 1 addition & 1 deletion DepthCamera.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "stdafx.h"
#include "version.h"
#include "Version.h"
#include "DepthCamera.h"
#include "Hand.h"
#include "FrameObject.h"
Expand Down
Loading

0 comments on commit 1e0ec8a

Please sign in to comment.