Navigation Menu

Skip to content

Commit

Permalink
Updating Windows builds to use OpenCV 3.1 instead of 2.4.11. All plat…
Browse files Browse the repository at this point in the history
…forms now work with the same OpenCV version (3.1.0)

- Updated MSVC build script to clone the 3.1.0 branch. Also updated the cmake commandline (3.1.0 needs opencv_ml to be built as well)
- Updated MSVC readme to use 3.1.0
- Updated osx build script to also clone 3.1.0 branch instead of whatever is currently at master
- Due to a bug in OpenCV 3.1.0 it is not possible to call cvGetSize from C source files under MSVC (it will crash due to incorrect code generation). As a workaround for this (until the bug in OpenCV is fixed), the psmove_tracker.c file (which is the only code calling cvGetSize) is now force-compiled as C++. See opencv/opencv#6221 for more info.
- In order to be able to build psmove_tracker.c as C++, some code needed to be updated (extern "C" added where relevant, tracker_default_settings can no longer be initialized using C-style designated initializer)
  • Loading branch information
rovarma committed Mar 9, 2016
1 parent 8beb248 commit ec44888
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 46 deletions.
6 changes: 3 additions & 3 deletions contrib/build_scripts/msvc/build_msvc_common.bat
Expand Up @@ -112,7 +112,7 @@ IF %ERRORLEVEL% NEQ 0 (
REM Clone OpenCV
IF NOT EXIST %OPENCV_DIR% (
cd %PSMOVE_API_EXTERNAL_DIR%
git clone --depth 1 --branch 2.4.11 git://github.com/Itseez/opencv.git
git clone --depth 1 --branch 3.1.0 git://github.com/Itseez/opencv.git
) ELSE (
echo.
echo OpenCV dir already exists; assuming it has been cloned already
Expand All @@ -128,14 +128,14 @@ IF NOT EXIST build mkdir build
cd build

IF "%MSVC_VERSION%"=="2015" (
cmake .. -G "Visual Studio 14 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF
cmake .. -G "Visual Studio 14 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=ON -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF
IF !ERRORLEVEL! NEQ 0 (
echo Failed to generate OpenCV solution
goto Error
)
) ELSE (
IF "%MSVC_VERSION%" == "2013" (
cmake .. -G "Visual Studio 12 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF
cmake .. -G "Visual Studio 12 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=ON -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF
IF !ERRORLEVEL! NEQ 0 (
echo Failed to generate OpenCV solution
goto Error
Expand Down
2 changes: 1 addition & 1 deletion contrib/build_scripts/osx/build-osx-snapshot
Expand Up @@ -56,7 +56,7 @@ cd $PSMOVEAPI_CHECKOUT
if [ ! -d $OPENCV_INSTALL_DIR ]; then
cd external
if [ ! -d opencv ]; then
git clone git://github.com/Itseez/opencv.git
git clone --depth 1 --branch 3.1.0 git://github.com/Itseez/opencv.git
fi
cd opencv
rm -rf build
Expand Down
6 changes: 3 additions & 3 deletions docs/README.win64_msvc
Expand Up @@ -53,12 +53,12 @@ Manual build
2. OpenCV (Optional -- only needed to build the positional tracker)

In `psmoveapi/external`
git clone --depth 1 --branch 2.4.11 git://github.com/Itseez/opencv.git
git clone --depth 1 --branch 3.1.0 git://github.com/Itseez/opencv.git
`cd opencv`
`mkdir build`
`cd build`
VS2013: `cmake .. -G "Visual Studio 12 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF`
VS2015: `cmake .. -G "Visual Studio 14 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF`
VS2013: `cmake .. -G "Visual Studio 12 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=ON -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF`
VS2015: `cmake .. -G "Visual Studio 14 Win64" -DBUILD_SHARED_LIBS=0 -DBUILD_WITH_STATIC_CRT=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_DOCS=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_flann=ON -DBUILD_opencv_features2d=ON -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_ml=ON -DBUILD_opencv_video=OFF -DBUILD_opencv_java=OFF -DWITH_OPENEXR=OFF -DWITH_FFMPEG=OFF -DWITH_JASPER=OFF -DWITH_TIFF=OFF`

Open the solution in psmoveapi\external\opencv\build\OpenCV.sln
Change the target to Release or Debug (as desired) at the top of the Visual Studio window
Expand Down
9 changes: 9 additions & 0 deletions external/msvc-support/unistd.h
Expand Up @@ -54,6 +54,15 @@ typedef unsigned __int64 uint64_t;
#define snprintf _snprintf // Not exactly the same, but close enough.
#endif

#ifdef __cplusplus
extern "C"
{
#endif

int usleep(__int64 useconds);

#ifdef __cplusplus
}
#endif

#endif /* unistd.h */
9 changes: 9 additions & 0 deletions src/tracker/CMakeLists.txt
Expand Up @@ -176,6 +176,15 @@ source_group("Source Files\\iniparser" FILES ${INIPARSER_SRC})


if(PSMOVE_BUILD_TRACKER)
IF(MSVC)
# Due to a bug in OpenCV 3.0+, C source files that call cvGetSize will crash when built by MSVC.
# psmove_tracker.c is such a file, so we need to force the C++ compiler to be used for it, even though it's a C file.
# Once the OpenCV bug is fixed, this can/should be removed.
#
# See https://github.com/Itseez/opencv/issues/6221 for more info.
set_source_files_properties( ${CMAKE_CURRENT_LIST_DIR}/psmove_tracker.c PROPERTIES LANGUAGE CXX )
ENDIF(MSVC)

include_directories(${ROOT_DIR}/external/glm)
add_library(psmoveapi_tracker SHARED
${PSMOVEAPI_TRACKER_SRC}
Expand Down
88 changes: 49 additions & 39 deletions src/tracker/psmove_tracker.c
Expand Up @@ -62,45 +62,55 @@
#define PSEYE_BACKUP_FILE "PSEye_backup.ini"
#define COLOR_MAPPING_DAT "colormapping.dat"

static const PSMoveTrackerSettings tracker_default_settings = {
.camera_frame_width = 0,
.camera_frame_height = 0,
.camera_frame_rate = 0,
.camera_auto_gain = PSMove_False,
.camera_gain = 0,
.camera_auto_white_balance = PSMove_False,
.camera_exposure = (255 * 15) / 0xFFFF,
.camera_brightness = 0,
.camera_mirror = PSMove_False,
.exposure_mode = Exposure_LOW,
.calibration_blink_delay = 200,
.calibration_diff_t = 20,
.calibration_min_size = 50,
.calibration_max_distance = 30,
.calibration_size_std = 10,
.color_mapping_max_age = 2 * 60 * 60,
.dimming_factor = 1.f,
.color_hue_filter_range = 20,
.color_saturation_filter_range = 85,
.color_value_filter_range = 85,
.tracker_adaptive_xy = 1,
.tracker_adaptive_z = 1,
.color_adaption_quality_t = 35.f,
.color_update_rate = 1.f,
.search_tile_width = 0,
.search_tile_height = 0,
.search_tiles_horizontal = 0,
.search_tiles_count = 0,
.roi_adjust_fps_t = 160,
.tracker_quality_t1 = 0.3f,
.tracker_quality_t2 = 0.7f,
.tracker_quality_t3 = 4.7f,
.color_update_quality_t1 = 0.8f,
.color_update_quality_t2 = 0.2f,
.color_update_quality_t3 = 6.f,
.intrinsics_xml = "intrinsics.xml",
.distortion_xml = "distortion.xml"
};
/**
* Helper function to create the default tracker settings. Needed so this file can be compiled as both C and C++ (C++ does not support designated initializers)
**/
static const PSMoveTrackerSettings create_tracker_default_settings()
{
PSMoveTrackerSettings defaults;

defaults.camera_frame_width = 0;
defaults.camera_frame_height = 0;
defaults.camera_frame_rate = 0;
defaults.camera_auto_gain = PSMove_False;
defaults.camera_gain = 0;
defaults.camera_auto_white_balance = PSMove_False;
defaults.camera_exposure = (255 * 15) / 0xFFFF;
defaults.camera_brightness = 0;
defaults.camera_mirror = PSMove_False;
defaults.exposure_mode = Exposure_LOW;
defaults.calibration_blink_delay = 200;
defaults.calibration_diff_t = 20;
defaults.calibration_min_size = 50;
defaults.calibration_max_distance = 30;
defaults.calibration_size_std = 10;
defaults.color_mapping_max_age = 2 * 60 * 60;
defaults.dimming_factor = 1.f;
defaults.color_hue_filter_range = 20;
defaults.color_saturation_filter_range = 85;
defaults.color_value_filter_range = 85;
defaults.tracker_adaptive_xy = 1;
defaults.tracker_adaptive_z = 1;
defaults.color_adaption_quality_t = 35.f;
defaults.color_update_rate = 1.f;
defaults.search_tile_width = 0;
defaults.search_tile_height = 0;
defaults.search_tiles_horizontal = 0;
defaults.search_tiles_count = 0;
defaults.roi_adjust_fps_t = 160;
defaults.tracker_quality_t1 = 0.3f;
defaults.tracker_quality_t2 = 0.7f;
defaults.tracker_quality_t3 = 4.7f;
defaults.color_update_quality_t1 = 0.8f;
defaults.color_update_quality_t2 = 0.2f;
defaults.color_update_quality_t3 = 6.f;
defaults.intrinsics_xml = "intrinsics.xml";
defaults.distortion_xml = "distortion.xml";

return defaults;
}

static const PSMoveTrackerSettings tracker_default_settings = create_tracker_default_settings();

/**
* Syntactic sugar - iterate over all valid controllers of a tracker
Expand Down
8 changes: 8 additions & 0 deletions src/tracker/tracker_helpers.h
Expand Up @@ -46,6 +46,10 @@
((a).y - (b).y) * \
((a).y - (b).y))

#ifdef __cplusplus
extern "C" {
#endif

/**
* Variance and average of an array of doubles
*
Expand Down Expand Up @@ -88,4 +92,8 @@ th_scalar_mul(CvScalar a, double b);
CvScalar
th_brg2hsv(CvScalar bgr);

#ifdef __cplusplus
}
#endif

#endif // TRACKER_HELPERS_H

0 comments on commit ec44888

Please sign in to comment.