blob: da541a77cda00a003f4100c2f9e34be491cf87f2 [file] [log] [blame]
cmake_minimum_required(VERSION 3.10)
# set the project name
set (ProjectName TensorflowSegmentation)
set (Version 1.0.2)
project(${ProjectName} VERSION ${Version})
set (DAEMON ${PROJECT_SOURCE_DIR}/../../daemon)
set (PLUGIN_NAME TensorflowSegmentation)
set (JPL_FILE_NAME ${PLUGIN_NAME}.jpl)
set (DAEMON_SRC ${DAEMON}/src)
set (CONTRIB_PATH ${DAEMON}/contrib)
set (PLUGINS_LIB ${PROJECT_SOURCE_DIR}/../lib)
set (JPL_DIRECTORY ${PROJECT_BINARY_DIR}/jpl)
set (LIBS_DIR ${PROJECT_SOURCE_DIR}/../contrib/Libs)
if(WIN32)
message(OS:\ WINDOWS\ ${CMAKE_SYSTEM_PROCESSOR})
if (NOT ${CMAKE_CL_64})
message( FATAL_ERROR "\nUse CMake only for x64 Windows" )
endif()
set (CONTRIB_PLATFORM_CURT x64)
set (CONTRIB_PLATFORM ${CONTRIB_PLATFORM_CURT}-windows)
set (LIBRARY_FILE_NAME ${PLUGIN_NAME}.dll)
set (LIBS_BIN_DIR $ENV{PLUGIN_ENV})
set (FFMPEG ${CONTRIB_PATH}/build/ffmpeg/Build/win32/x64)
endif()
if(UNIX)
message( FATAL_ERROR "\nUse CMake only for Windows! For linux or Android (linux host), use our bash scripts.\nPlese refer to documentation for more infos." )
message(OS:\ LINUX\ ${CMAKE_SYSTEM_PROCESSOR})
set (CONTRIB_PLATFORM_CURT ${CMAKE_SYSTEM_PROCESSOR})
set (CONTRIB_PLATFORM ${CONTRIB_PLATFORM_CURT}-linux-gnu)
set (LIBRARY_FILE_NAME lib${PLUGIN_NAME}.so)
set (LIBS_BIN_DIR /home/${USER}/Libs)
endif()
message(Building:\ ${ProjectName}\ ${Version})
message(Build\ path:\ ${PROJECT_BINARY_DIR})
message(JPL\ assembling\ path:\ ${JPL_DIRECTORY})
message(JPL\ path:\ ${JPL_DIRECTORY}/../../../build/${ProjectName}/${JPL_FILE_NAME})
set(TENSORFLOW _tensorflow_cc)
set(model mModel-resnet50float.pb)
set(modelType .pb)
set(preferencesFile preferences-tfcc.json)
set(TFLIB libtensorflow_cc)
set(GPU -gpu61)
if (CPU)
set(GPU )
add_definitions(-DCPU)
message(CPU\ BUILDING!)
endif()
if (TFLITE)
add_definitions(-DTFLITE)
set(TENSORFLOW _tensorflowLite)
set(model mobilenet_v2_deeplab_v3_256_myquant.tflite)
set(modelType .tflite)
set(preferencesFile preferences-tflite.json)
set(TFLIB libtensorflowlite)
message(TFLITE\ BUILDING!)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
set(plugin_SRC main.cpp
pluginInference.cpp
pluginMediaHandler.cpp
pluginParameters.cpp
pluginProcessor.cpp
TFInference.cpp
videoSubscriber.cpp
./../lib/accel.cpp
./../lib/frameUtils.cpp
)
set(plugin_HDR pluginInference.h
pluginMediaHandler.h
pluginParameters.h
pluginProcessor.h
TFInference.h
TFModels.h
videoSubscriber.h
./../lib/accel.h
./../lib/frameScaler.h
./../lib/frameUtils.h
./../lib/pluglog.h
)
# add the library
add_library(${ProjectName} SHARED ${plugin_SRC}
${plugin_HDR}
)
if (WIN32)
target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
${PLUGINS_LIB}
${DAEMON_SRC}
${CONTRIB_PATH}
${FFMPEG}/include
${CONTRIB_PATH}/build/opencv/build/install/include
${LIBS_DIR}/${TENSORFLOW}/include
${LIBS_DIR}/${TENSORFLOW}/include/third_party/eigen3
${LIBS_DIR}/${TENSORFLOW}/include/flatbuffers
)
target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
${LIBS_BIN_DIR}/${TENSORFLOW}/lib/${CONTRIB_PLATFORM}
${CONTRIB_PATH}/build/opencv/build/lib/Release
${CONTRIB_PATH}/build/opencv/build/3rdparty/lib/Release
${FFMPEG}/bin
)
target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng opencv_imgcodecs411 opencv_imgproc411 opencv_core411 ${TFLIB} zlib)
endif()
if (UNIX)
target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
${PLUGINS_LIB}
${DAEMON_SRC}
${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include
${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4
${LIBS_DIR}/${TENSORFLOW}/include
${LIBS_DIR}/${TENSORFLOW}/include/third_party/eigen3
${LIBS_DIR}/${TENSORFLOW}/include/flatbuffers
)
link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
${LIBS_BIN_DIR}/${TENSORFLOW}/lib/${CONTRIB_PLATFORM}
${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib
${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/opencv4/3rdparty
)
target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng opencv_imgcodecs opencv_imgproc opencv_core ${TFLIB})
endif()
add_custom_command(
TARGET ${ProjectName}
PRE_BUILD
COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=TensorflowSegmentation
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBS_BIN_DIR}/${TENSORFLOW}/lib/ ${JPL_DIRECTORY}/lib
COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/data/models
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/modelsSRC/${model} ${JPL_DIRECTORY}/data/models
COMMAND ${CMAKE_COMMAND} -E rename ${JPL_DIRECTORY}/data/models/${model} ${JPL_DIRECTORY}/data/models/mModel${modelType}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/${preferencesFile} ${JPL_DIRECTORY}/data
COMMAND ${CMAKE_COMMAND} -E rename ${JPL_DIRECTORY}/data/${preferencesFile} ${JPL_DIRECTORY}/data/preferences.json
COMMENT "Assembling Plugin files"
)
if (WIN32)
add_custom_command(
TARGET ${ProjectName}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/../../../build/x64-windows/${TENSORFLOW}
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=TensorflowSegmentation --extraPath=${TENSORFLOW}
COMMENT "Generating JPL archive"
)
else()
add_custom_command(
TARGET ${ProjectName}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/../../../build/x86_64-linux-gnu/${TENSORFLOW}
COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=TensorflowSegmentation --extraPath=${TENSORFLOW}
COMMENT "Generating JPL archive"
)
endif()