-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
472 lines (360 loc) · 17.3 KB
/
Copy pathCMakeLists.txt
File metadata and controls
472 lines (360 loc) · 17.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
cmake_minimum_required(VERSION 3.30)
project(improc VERSION 1.0.3)
if(APPLE)
string(REPLACE "--as-needed" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
string(REPLACE "--no-undefined" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
string(REPLACE "--as-needed" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
string(REPLACE "--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
endif()
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Dependencies
find_package(OpenCV REQUIRED)
find_package(nlohmann_json REQUIRED)
# Compatibility shim: system OpenCV uses OpenCV_LIBS, Conan uses opencv::opencv
if(NOT TARGET opencv::opencv)
add_library(opencv::opencv INTERFACE IMPORTED GLOBAL)
target_link_libraries(opencv::opencv INTERFACE ${OpenCV_LIBS})
target_include_directories(opencv::opencv INTERFACE ${OpenCV_INCLUDE_DIRS})
endif()
# === ONNX Runtime inference support (optional) ===
option(IMPROC_WITH_ONNX "Build with ONNX Runtime support (improc::onnx namespace)" ON)
if(IMPROC_WITH_ONNX)
find_package(onnxruntime REQUIRED)
endif()
# === OAK-D depth camera support (optional) ===
option(IMPROC_WITH_DEPTHAI "Build with OAK-D support via depthai-core v2" OFF)
# === Test and example build control ===
option(IMPROC_BUILD_TESTS "Build improc unit tests" ON)
option(IMPROC_BUILD_EXAMPLES "Build improc demo executables" OFF)
# === improc LIBRARY ===
file(GLOB_RECURSE IMPROC_HEADERS CONFIGURE_DEPENDS include/improc/*.hpp)
file(GLOB_RECURSE IMPROC_SOURCES CONFIGURE_DEPENDS src/*.cpp)
if(NOT IMPROC_WITH_ONNX)
file(GLOB_RECURSE _ONNX_SOURCES CONFIGURE_DEPENDS src/onnx/*.cpp)
list(REMOVE_ITEM IMPROC_SOURCES ${_ONNX_SOURCES})
endif()
add_library(improc ${IMPROC_HEADERS} ${IMPROC_SOURCES})
target_include_directories(improc PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(improc PUBLIC
opencv::opencv
$<BUILD_INTERFACE:nlohmann_json::nlohmann_json>
)
if(IMPROC_WITH_ONNX)
target_link_libraries(improc PUBLIC onnxruntime::onnxruntime)
target_compile_definitions(improc PUBLIC IMPROC_WITH_ONNX)
message(STATUS "onnxruntime: improc::onnx enabled")
endif()
# === depthai-core (optional) ===
if(IMPROC_WITH_DEPTHAI)
set(DEPTHAI_VERSION "2.32.0")
include(FetchContent)
FetchContent_Declare(
depthai
GIT_REPOSITORY https://github.com/luxonis/depthai-core.git
GIT_TAG v${DEPTHAI_VERSION}
GIT_SUBMODULES_RECURSE TRUE
)
FetchContent_MakeAvailable(depthai)
target_link_libraries(improc PUBLIC depthai::core)
target_compile_definitions(improc PUBLIC IMPROC_WITH_DEPTHAI)
message(STATUS "depthai-core ${DEPTHAI_VERSION}: depthai::core enabled")
endif()
# === Installation + cmake package config =====================================
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
install(TARGETS improc
EXPORT improcTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(DIRECTORY include/improc
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(EXPORT improcTargets
FILE improcTargets.cmake
NAMESPACE improc::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/improc
)
configure_package_config_file(
cmake/improcConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/improcConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/improc
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/improcConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/improcConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/improcConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/improc
)
if(IMPROC_BUILD_TESTS)
find_package(GTest REQUIRED)
enable_testing()
file(GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS tests/*.cpp)
if(NOT IMPROC_WITH_ONNX)
file(GLOB_RECURSE _ONNX_TESTS CONFIGURE_DEPENDS tests/onnx/*.cpp)
list(REMOVE_ITEM TEST_SOURCES ${_ONNX_TESTS})
endif()
add_executable(improc_tests ${TEST_SOURCES})
target_link_libraries(improc_tests PRIVATE improc GTest::gtest GTest::gtest_main)
include(GoogleTest)
gtest_discover_tests(improc_tests)
endif()
if(IMPROC_BUILD_EXAMPLES)
# === DEMO ===
# Webcam Capture
add_executable(demo_webcam_capture examples/io/demo_webcam_capture.cpp)
target_link_libraries(demo_webcam_capture PRIVATE improc)
# Unified Camera (AnyCameraSource — runtime selection between webcam and IP camera)
add_executable(demo_unified_camera examples/io/demo_unified_camera.cpp)
target_link_libraries(demo_unified_camera PRIVATE improc)
# Image Loader
add_executable(demo_image_loader examples/ml/demo_image_loader.cpp)
target_link_libraries(demo_image_loader PRIVATE improc)
# Dataset loader
add_executable(demo_dataset examples/ml/demo_dataset.cpp)
target_link_libraries(demo_dataset PRIVATE improc)
# OpenCV Haarcascade Loader
add_executable(demo_haar_loader examples/ml/demo_haar_cascade_loader.cpp)
target_link_libraries(demo_haar_loader PRIVATE improc)
# Image Wrapper
add_executable(demo_image_wrapper examples/core/demo_image_wrapper.cpp)
target_link_libraries(demo_image_wrapper PRIVATE improc)
# Pipeline
add_executable(demo_pipeline examples/core/demo_pipeline.cpp)
target_link_libraries(demo_pipeline PRIVATE improc)
# Image Ops
add_executable(demo_image_ops examples/core/demo_image_ops.cpp)
target_link_libraries(demo_image_ops PRIVATE improc)
# Filters, morphology, threshold, padding
add_executable(demo_filters examples/core/demo_filters.cpp)
target_link_libraries(demo_filters PRIVATE improc)
# CLAHE, GammaCorrection, BilateralFilter
add_executable(demo_enhance examples/core/demo_enhance.cpp)
target_link_libraries(demo_enhance PRIVATE improc)
# SobelEdge, CannyEdge
add_executable(demo_edge examples/core/demo_edge.cpp)
target_link_libraries(demo_edge PRIVATE improc)
# FindHomography + WarpPerspective demo
add_executable(demo_homography examples/core/demo_homography.cpp)
target_link_libraries(demo_homography PRIVATE improc)
# M1 ops demos
add_executable(demo_warp_affine examples/core/demo_warp_affine.cpp)
target_link_libraries(demo_warp_affine PRIVATE improc)
add_executable(demo_apply_mask examples/core/demo_apply_mask.cpp)
target_link_libraries(demo_apply_mask PRIVATE improc)
add_executable(demo_unsharp_mask examples/core/demo_unsharp_mask.cpp)
target_link_libraries(demo_unsharp_mask PRIVATE improc)
# CenterCrop + LetterBox demo
add_executable(demo_geometric_preprocessing examples/core/demo_geometric_preprocessing.cpp)
target_link_libraries(demo_geometric_preprocessing PRIVATE improc)
# AdaptiveThreshold demo
add_executable(demo_adaptive_threshold examples/core/demo_adaptive_threshold.cpp)
target_link_libraries(demo_adaptive_threshold PRIVATE improc)
# Invert + InRange demo
add_executable(demo_invert_in_range examples/core/demo_invert_in_range.cpp)
target_link_libraries(demo_invert_in_range PRIVATE improc)
# MorphOpen + MorphClose demo
add_executable(demo_morph_open_close examples/core/demo_morph_open_close.cpp)
target_link_libraries(demo_morph_open_close PRIVATE improc)
# HistogramEqualization + NLMeansDenoising demo
add_executable(demo_hist_eq_nlmeans examples/core/demo_hist_eq_nlmeans.cpp)
target_link_libraries(demo_hist_eq_nlmeans PRIVATE improc)
# MorphGradient + TopHat + BlackHat demo
add_executable(demo_morph_extras examples/core/demo_morph_extras.cpp)
target_link_libraries(demo_morph_extras PRIVATE improc)
# LaplacianEdge + HarrisCorner demo
add_executable(demo_harris_laplacian examples/core/demo_harris_laplacian.cpp)
target_link_libraries(demo_harris_laplacian PRIVATE improc)
# Optical flow demo (SparseLKFlow, DenseFarnebackFlow, DenseDISFlow)
add_executable(demo_optical_flow examples/core/demo_optical_flow.cpp)
target_link_libraries(demo_optical_flow PRIVATE improc)
# CamShift / MeanShift / PhaseCorrelate demo
add_executable(demo_camshift examples/core/demo_camshift.cpp)
target_link_libraries(demo_camshift PRIVATE improc)
# Threading demos
add_executable(demo_thread_pool examples/threading/demo_thread_pool.cpp)
target_link_libraries(demo_thread_pool PRIVATE improc)
add_executable(demo_frame_pipeline examples/threading/demo_frame_pipeline.cpp)
target_link_libraries(demo_frame_pipeline PRIVATE improc)
# Visualization demo
add_executable(demo_visualization examples/visualization/demo_visualization.cpp)
target_link_libraries(demo_visualization PRIVATE improc)
# DrawBoundingBoxes demo
add_executable(demo_draw examples/visualization/demo_draw.cpp)
target_link_libraries(demo_draw PRIVATE improc)
# DNN Inference demo
add_executable(demo_dnn_inference examples/ml/demo_dnn_inference.cpp)
target_link_libraries(demo_dnn_inference PRIVATE improc)
# Augmentation demo
add_executable(demo_augmentation examples/ml/demo_augmentation.cpp)
target_link_libraries(demo_augmentation PRIVATE improc)
# Geometric extras augmentation demo (M1)
add_executable(demo_augment_geometric examples/ml/demo_augment_geometric.cpp)
target_link_libraries(demo_augment_geometric PRIVATE improc)
# Colour extras augmentation demo (M2)
add_executable(demo_augment_color examples/ml/demo_augment_color.cpp)
target_link_libraries(demo_augment_color PRIVATE improc)
# Erase augmentation demo (M3)
add_executable(demo_augment_erase examples/ml/demo_augment_erase.cpp)
target_link_libraries(demo_augment_erase PRIVATE improc)
# Blur extras augmentation demo (M4)
add_executable(demo_augment_blur examples/ml/demo_augment_blur.cpp)
target_link_libraries(demo_augment_blur PRIVATE improc)
add_executable(demo_augment_bbox examples/ml/demo_augment_bbox.cpp)
target_link_libraries(demo_augment_bbox PRIVATE improc)
add_executable(demo_augment_mixup examples/ml/demo_augment_mixup.cpp)
target_link_libraries(demo_augment_mixup PRIVATE improc)
# VOC dataset loader demo
add_executable(demo_voc_dataset examples/ml/demo_voc_dataset.cpp)
target_link_libraries(demo_voc_dataset PRIVATE improc)
# COCO dataset loader demo
add_executable(demo_coco_dataset examples/ml/demo_coco_dataset.cpp)
target_link_libraries(demo_coco_dataset PRIVATE improc)
# VOC Segmentation dataset loader demo
add_executable(demo_voc_seg_dataset examples/ml/demo_voc_seg_dataset.cpp)
target_link_libraries(demo_voc_seg_dataset PRIVATE improc)
# Detection eval demo
add_executable(demo_detection_eval examples/ml/demo_detection_eval.cpp)
target_link_libraries(demo_detection_eval PRIVATE improc)
# Segmentation eval demo
add_executable(demo_seg_eval examples/ml/demo_seg_eval.cpp)
target_link_libraries(demo_seg_eval PRIVATE improc)
# Classification eval demo
add_executable(demo_class_eval examples/ml/demo_class_eval.cpp)
target_link_libraries(demo_class_eval PRIVATE improc)
# Tracking demo
add_executable(demo_tracking examples/ml/demo_tracking.cpp)
target_link_libraries(demo_tracking PRIVATE improc)
# Video Writer demo
add_executable(demo_video_writer examples/io/demo_video_writer.cpp)
target_link_libraries(demo_video_writer PRIVATE improc)
# Color adjust demo (Brightness, Contrast, WeightedBlend, AlphaBlend, HSV)
add_executable(demo_color_adjust examples/core/demo_color_adjust.cpp)
target_link_libraries(demo_color_adjust PRIVATE improc)
# Color space demo — ToLAB, ToYCrCb
add_executable(demo_color_lab_ycrcb examples/core/demo_color_lab_ycrcb.cpp)
target_link_libraries(demo_color_lab_ycrcb PRIVATE improc)
# Pixel ops demo — Add, Subtract, Multiply, AbsDiff, SplitChannels, MergeChannels
add_executable(demo_pixel_ops examples/core/demo_pixel_ops.cpp)
target_link_libraries(demo_pixel_ops PRIVATE improc)
# Filter ops demo — BilateralFilter, CenterCrop, Remap
add_executable(demo_filter_ops examples/core/demo_filter_ops.cpp)
target_link_libraries(demo_filter_ops PRIVATE improc)
# Morphological ops demo — FloodFill, GrabCut, Watershed, DistanceTransform, Inpaint
add_executable(demo_morphological_ops examples/core/demo_morphological_ops.cpp)
target_link_libraries(demo_morphological_ops PRIVATE improc)
# Analysis ops demo — IntegralImage, MinMaxLoc, MeanStdDev, Moments
add_executable(demo_analysis_ops examples/core/demo_analysis_ops.cpp)
target_link_libraries(demo_analysis_ops PRIVATE improc)
# Feature ops demo — HoughLinesP, HoughCircles, MatchTemplate
add_executable(demo_feature_ops examples/core/demo_feature_ops.cpp)
target_link_libraries(demo_feature_ops PRIVATE improc)
# Detector types demo — MSERResult, LineSet, QRResult, BarcodeResult, FaceDetection
add_executable(demo_detector_types_usage examples/core/demo_detector_types.cpp)
target_link_libraries(demo_detector_types_usage PRIVATE improc)
# Image I/O demo (imread / imwrite)
add_executable(demo_image_io examples/io/demo_image_io.cpp)
target_link_libraries(demo_image_io PRIVATE improc)
# Video Reader demo
add_executable(demo_video_reader examples/io/demo_video_reader.cpp)
target_link_libraries(demo_video_reader PRIVATE improc)
# Video File Capture demo
add_executable(demo_video_file_capture examples/io/demo_video_file_capture.cpp)
target_link_libraries(demo_video_file_capture PRIVATE improc)
# Montage demo
add_executable(demo_montage examples/visualization/demo_montage.cpp)
target_link_libraries(demo_montage PRIVATE improc)
# Pyramid + Drawing demo
add_executable(demo_pyramid_drawing examples/core/demo_pyramid_drawing.cpp)
target_link_libraries(demo_pyramid_drawing PRIVATE improc)
# Contours demo
add_executable(demo_contours examples/core/demo_contours.cpp)
target_link_libraries(demo_contours PRIVATE improc)
# Background subtraction demo
add_executable(demo_background_subtract examples/core/demo_background_subtract.cpp)
target_link_libraries(demo_background_subtract PRIVATE improc)
# Connected Components + Distance Transform demo
add_executable(demo_connected_components examples/core/demo_connected_components.cpp)
target_link_libraries(demo_connected_components PRIVATE improc)
# Feature Detection demo
add_executable(demo_feature_detection examples/core/demo_feature_detection.cpp)
target_link_libraries(demo_feature_detection PRIVATE improc)
# Descriptor Computation demo
add_executable(demo_describe examples/core/demo_describe.cpp)
target_link_libraries(demo_describe PRIVATE improc)
# Matching demo
add_executable(demo_matching examples/core/demo_matching.cpp)
target_link_libraries(demo_matching PRIVATE improc)
# DrawKeypoints / DrawMatches demo
add_executable(demo_draw_matches examples/core/demo_draw_matches.cpp)
target_link_libraries(demo_draw_matches PRIVATE improc)
# Structure / region detectors demo (FAST, Blob, MSER, Lines)
add_executable(demo_detectors examples/core/demo_detectors.cpp)
target_link_libraries(demo_detectors PRIVATE improc)
# QR code + barcode detection demo
add_executable(demo_qr_barcode examples/core/demo_qr_barcode.cpp)
target_link_libraries(demo_qr_barcode PRIVATE improc)
# Views demos (M1: single-image lazy pipeline, M2: collection pipeline, M3: external sources, M4: batch/enumerate/zip)
add_executable(demo_views_m1 examples/views/demo_views_m1.cpp)
target_link_libraries(demo_views_m1 PRIVATE improc)
add_executable(demo_views_m2 examples/views/demo_views_m2.cpp)
target_link_libraries(demo_views_m2 PRIVATE improc)
add_executable(demo_views_m3 examples/views/demo_views_m3.cpp)
target_link_libraries(demo_views_m3 PRIVATE improc)
add_executable(demo_views_m4 examples/views/demo_views_m4.cpp)
target_link_libraries(demo_views_m4 PRIVATE improc)
# Photo / creative effects demo
add_executable(demo_photo examples/core/demo_photo.cpp)
target_link_libraries(demo_photo PRIVATE improc)
# HDR + stitching demo
add_executable(demo_hdr examples/core/demo_hdr.cpp)
target_link_libraries(demo_hdr PRIVATE improc)
# Quality metrics demo
add_executable(demo_quality examples/core/demo_quality.cpp)
target_link_libraries(demo_quality PRIVATE improc)
# Perceptual hashing demo
add_executable(demo_hashing examples/core/demo_hashing.cpp)
target_link_libraries(demo_hashing PRIVATE improc)
# Calibration demos
add_executable(demo_calibrate examples/calib/demo_calibrate.cpp)
target_link_libraries(demo_calibrate PRIVATE improc)
add_executable(demo_pose examples/calib/demo_pose.cpp)
target_link_libraries(demo_pose PRIVATE improc)
add_executable(demo_stereo examples/calib/demo_stereo.cpp)
target_link_libraries(demo_stereo PRIVATE improc)
add_executable(demo_aruco examples/calib/demo_aruco.cpp)
target_link_libraries(demo_aruco PRIVATE improc)
# Epipolar geometry demo — FindFundamentalMat, FindEssentialMat, RecoverPose, TriangulatePoints
add_executable(demo_epipolar examples/calib/demo_epipolar.cpp)
target_link_libraries(demo_epipolar PRIVATE improc)
# ONNX inference demo
if(IMPROC_WITH_ONNX)
add_executable(demo_onnx_inference examples/ml/demo_onnx_inference.cpp)
target_link_libraries(demo_onnx_inference PRIVATE improc)
endif()
endif() # IMPROC_BUILD_EXAMPLES
# Benchmarks (opt-in: cmake -DIMPROC_BENCHMARKS=ON ...)
if(IMPROC_BENCHMARKS)
include(FetchContent)
FetchContent_Declare(
benchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG v1.9.1
GIT_SHALLOW TRUE
)
set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE)
set(BENCHMARK_DOWNLOAD_DEPENDENCIES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(benchmark)
file(GLOB_RECURSE BENCH_SOURCES CONFIGURE_DEPENDS benchmarks/*.cpp)
add_executable(improc_benchmarks ${BENCH_SOURCES})
target_link_libraries(improc_benchmarks PRIVATE improc benchmark::benchmark_main)
endif()