Skip to content

Commit 11ae750

Browse files
author
Manuel Stoiber
committed
feat(SRT3D): initial commit
1 parent 407a84b commit 11ae750

48 files changed

Lines changed: 9712 additions & 2 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

SRT3D/CMakeLists.txt

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
# A Sparse Region-Based 3D Object Tracking Approach for the Real World
4+
# =============================================================================
5+
project(SRT3D)
6+
7+
8+
# Options
9+
# =============================================================================
10+
option(USE_AZURE_KINECT "Use azure kinect" ON)
11+
12+
13+
# Libraries
14+
# =============================================================================
15+
if (WIN32)
16+
set(GLEW_STATIC true)
17+
set(OpenCV_STATIC true)
18+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
19+
endif()
20+
21+
find_package(Eigen3 3.3.2 REQUIRED)
22+
find_package(OpenGL REQUIRED)
23+
find_package(GLEW REQUIRED)
24+
find_package(glfw3 3.1.2 REQUIRED)
25+
find_package(OpenCV 4.0.0 REQUIRED)
26+
if(USE_AZURE_KINECT)
27+
find_package(K4A 1.3.0 REQUIRED)
28+
endif()
29+
30+
find_package(OpenMP)
31+
if(OPENMP_FOUND)
32+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
33+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
34+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
35+
endif()
36+
37+
38+
# Compiler Settings
39+
# =============================================================================
40+
41+
# Default settings
42+
set(CMAKE_CXX_STANDARD 17)
43+
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
44+
include(CheckCXXCompilerFlag)
45+
check_cxx_compiler_flag(-march HAS_MARCH)
46+
check_cxx_compiler_flag(-mtune HAS_MTUNE)
47+
if(HAS_MARCH)
48+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
49+
endif()
50+
if(HAS_MTUNE)
51+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=native")
52+
endif()
53+
54+
# Debug settings
55+
check_cxx_compiler_flag(-ggdb HAS_GGDB)
56+
check_cxx_compiler_flag(-Z7 HAS_Z7)
57+
check_cxx_compiler_flag(-ftrapv HAS_FTRAPV)
58+
check_cxx_compiler_flag(-Od HAS_OD)
59+
if(HAS_GGDB)
60+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb")
61+
elseif(HAS_Z7)
62+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Z7")
63+
endif()
64+
if(HAS_FTRAPV)
65+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ftrapv")
66+
endif()
67+
if(HAS_OD)
68+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Od")
69+
endif()
70+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
71+
72+
# Release settings
73+
check_cxx_compiler_flag(-Ob3 HAS_OB3)
74+
check_cxx_compiler_flag(-O3 HAS_O3)
75+
check_cxx_compiler_flag(-Ob2 HAS_OB2)
76+
check_cxx_compiler_flag(-O2 HAS_O2)
77+
if (HAS_OB3)
78+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ob3")
79+
elseif (HAS_O3)
80+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
81+
elseif(HAS_OB2)
82+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ob2")
83+
elseif(HAS_O2)
84+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
85+
endif()
86+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG")
87+
88+
# OS settings
89+
if (WIN32)
90+
if(OPENMP_FOUND)
91+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -openmp:experimental")
92+
endif()
93+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -MT")
94+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -MTd")
95+
endif()
96+
97+
98+
# Directories
99+
# =============================================================================
100+
101+
# Include Directories
102+
include_directories("${CMAKE_SOURCE_DIR}/include")
103+
include_directories("${CMAKE_SOURCE_DIR}/third_party")
104+
105+
# Sub Directories
106+
add_subdirectory(src)
107+
add_subdirectory(examples)

SRT3D/dlr_srt3d_visualization.png

180 KB
Loading

SRT3D/examples/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
3+
add_executable(evaluate_rbot_dataset evaluate_rbot_dataset.cpp rbot_evaluator.cpp)
4+
target_link_libraries(evaluate_rbot_dataset PUBLIC srt3d)
5+
6+
add_executable(parameter_study_rbot_dataset parameter_study_rbot_dataset.cpp rbot_evaluator.cpp)
7+
target_link_libraries(parameter_study_rbot_dataset PUBLIC srt3d)
8+
9+
add_executable(evaluate_opt_dataset evaluate_opt_dataset.cpp opt_evaluator.cpp)
10+
target_link_libraries(evaluate_opt_dataset PUBLIC srt3d)
11+
12+
add_executable(parameter_study_opt_dataset parameter_study_opt_dataset.cpp opt_evaluator.cpp)
13+
target_link_libraries(parameter_study_opt_dataset PUBLIC srt3d)
14+
15+
add_executable(run_on_recorded_sequence run_on_recorded_sequence.cpp)
16+
target_link_libraries(run_on_recorded_sequence PUBLIC srt3d)
17+
18+
if(USE_AZURE_KINECT)
19+
add_executable(record_camera_sequence record_camera_sequence.cpp)
20+
target_link_libraries(record_camera_sequence PUBLIC srt3d)
21+
22+
add_executable(run_on_camera_sequence run_on_camera_sequence.cpp)
23+
target_link_libraries(run_on_camera_sequence PUBLIC srt3d)
24+
endif()
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// SPDX-License-Identifier: MIT
2+
// Copyright (c) 2021 Manuel Stoiber, German Aerospace Center (DLR)
3+
4+
#include "opt_evaluator.h"
5+
6+
int main() {
7+
// Directories
8+
std::string dataset_directory{"/your/path/to/the/opt/dataset/"};
9+
10+
// Dataset configuration
11+
std::vector<std::string> body_names{"soda", "chest", "ironman",
12+
"house", "bike", "jet"};
13+
std::vector<std::string> body_orientations{"b", "f", "l", "r"};
14+
std::vector<std::string> motion_patterns{
15+
"tr_1", "tr_2", "tr_3", "tr_4", "tr_5", "zo_1", "zo_2", "zo_3",
16+
"zo_4", "zo_5", "ir_1", "ir_2", "ir_3", "ir_4", "ir_5", "or_1",
17+
"or_2", "or_3", "or_4", "or_5", "fl", "ml", "fm"};
18+
19+
// Tracker configuration
20+
float tikhonov_parameter_rotation_soda = 500000.0f;
21+
float function_slope = 0.5f;
22+
float function_amplitude = 0.42f;
23+
std::vector<float> area_under_curve(6);
24+
25+
// Run experiments
26+
for (size_t i = 0; i < body_names.size(); ++i) {
27+
OPTEvaluator evaluator{"evaluator",
28+
dataset_directory,
29+
{body_names[i]},
30+
body_orientations,
31+
motion_patterns};
32+
evaluator.SetUp();
33+
evaluator.set_region_modality_setter([&](auto r) {
34+
if (body_names[i] == "soda")
35+
r->set_tikhonov_parameter_rotation(tikhonov_parameter_rotation_soda);
36+
r->set_function_slope(function_slope);
37+
r->set_function_amplitude(function_amplitude);
38+
});
39+
evaluator.Evaluate();
40+
area_under_curve[i] = evaluator.area_under_curve();
41+
}
42+
43+
// Print results
44+
std::cout << std::endl << std::string(80, '-') << std::endl;
45+
float mean_auc = 0.0f;
46+
for (size_t i = 0; i < body_names.size(); ++i) {
47+
mean_auc += area_under_curve[i];
48+
std::cout << body_names[i] << ": " << area_under_curve[i] << ", ";
49+
}
50+
std::cout << std::endl;
51+
std::cout << "all: " << mean_auc / body_names.size() << std::endl;
52+
std::cout << std::string(80, '-') << std::endl;
53+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-License-Identifier: MIT
2+
// Copyright (c) 2021 Manuel Stoiber, German Aerospace Center (DLR)
3+
4+
#include "rbot_evaluator.h"
5+
6+
int main() {
7+
// Directories
8+
std::string dataset_directory{"/your/path/to/the/rbot/dataset/"};
9+
std::string result_directory{"/your/path/to/store/results/"};
10+
11+
// Dataset configuration
12+
std::vector<std::string> body_names{
13+
"ape", "bakingsoda", "benchviseblue", "broccolisoup", "cam",
14+
"can", "cat", "clown", "cube", "driller",
15+
"duck", "eggbox", "glue", "iron", "koalacandy",
16+
"lamp", "phone", "squirrel"};
17+
std::vector<std::string> sequence_names{
18+
"a_regular", "b_dynamiclight", "c_noisy", "d_occlusion", "d_occlusion"};
19+
std::vector<bool> sequence_occlusions{false, false, false, false, true};
20+
21+
// Run experiments
22+
RBOTEvaluator evaluator{"evaluator", dataset_directory, body_names,
23+
sequence_names, sequence_occlusions};
24+
evaluator.set_visualize_all_results(false);
25+
evaluator.SaveResults(result_directory);
26+
evaluator.SetUp();
27+
evaluator.Evaluate();
28+
29+
// Print results
30+
std::cout << std::endl << std::string(80, '-') << std::endl;
31+
std::cout << "tracking success = " << evaluator.tracking_success()
32+
<< std::endl;
33+
std::cout << std::string(80, '-') << std::endl;
34+
}

0 commit comments

Comments
 (0)