diff --git a/CMakeLists.txt b/CMakeLists.txt index a561af7..f23b8f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,8 +15,54 @@ option(HAS_RKNN "Build with RKNN NPU support" ON) if(HAS_RKNN) add_definitions(-DHAS_RKNN) include_directories(/usr/local/include/rknn) + set(HAS_RKNN_VAL 1) +else() + set(HAS_RKNN_VAL 0) endif() +execute_process( + COMMAND git rev-parse --short=8 HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET +) +if(NOT GIT_COMMIT) + set(GIT_COMMIT "unknown") +endif() + +execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET +) +if(NOT GIT_BRANCH) + set(GIT_BRANCH "unknown") +endif() + +execute_process( + COMMAND git describe --tags --exact-match 2>/dev/null || echo "" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET +) +if(NOT GIT_TAG) + set(GIT_TAG "") +endif() + +string(TIMESTAMP BUILD_DATE "%Y-%m-%d") +string(TIMESTAMP BUILD_TIME "%H:%M:%S") +string(TIMESTAMP BUILD_YEAR "%Y") + +configure_file( + ${CMAKE_SOURCE_DIR}/src/version.hpp.in + ${CMAKE_BINARY_DIR}/version.hpp + @ONLY +) + set(SOURCES src/main.cpp src/kalman_filter.cpp @@ -35,6 +81,7 @@ target_include_directories(bytetrack-counter PRIVATE ${EIGEN3_INCLUDE_DIR} ${SQLite3_INCLUDE_DIRS} src + ${CMAKE_BINARY_DIR} ) target_link_libraries(bytetrack-counter diff --git a/build/CMakeFiles/Makefile.cmake b/build/CMakeFiles/Makefile.cmake index 9f96cc8..075263e 100644 --- a/build/CMakeFiles/Makefile.cmake +++ b/build/CMakeFiles/Makefile.cmake @@ -10,6 +10,7 @@ set(CMAKE_MAKEFILE_DEPENDS "/opt/bytetrack-counter-cpp/CMakeLists.txt" "CMakeFiles/3.28.3/CMakeCXXCompiler.cmake" "CMakeFiles/3.28.3/CMakeSystem.cmake" + "/opt/bytetrack-counter-cpp/src/version.hpp.in" "/usr/lib/aarch64-linux-gnu/cmake/opencv4/OpenCVConfig-version.cmake" "/usr/lib/aarch64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake" "/usr/lib/aarch64-linux-gnu/cmake/opencv4/OpenCVModules-release.cmake" @@ -45,6 +46,7 @@ set(CMAKE_MAKEFILE_OUTPUTS # Byproducts of CMake generate step: set(CMAKE_MAKEFILE_PRODUCTS + "version.hpp" "CMakeFiles/CMakeDirectoryInformation.cmake" ) diff --git a/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.internal b/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.internal index a29c118..f3ed96c 100644 --- a/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.internal +++ b/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.internal @@ -2148,6 +2148,7 @@ CMakeFiles/bytetrack-counter.dir/src/kalman_filter.cpp.o CMakeFiles/bytetrack-counter.dir/src/main.cpp.o /opt/bytetrack-counter-cpp/src/main.cpp + /opt/bytetrack-counter-cpp/build/version.hpp /opt/bytetrack-counter-cpp/src/batch_store.hpp /opt/bytetrack-counter-cpp/src/bytetrack.hpp /opt/bytetrack-counter-cpp/src/config.hpp diff --git a/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.make b/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.make index 14f78d9..79f4300 100644 --- a/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.make +++ b/build/CMakeFiles/bytetrack-counter.dir/compiler_depend.make @@ -2141,6 +2141,7 @@ CMakeFiles/bytetrack-counter.dir/src/kalman_filter.cpp.o: /opt/bytetrack-counter /usr/lib/gcc/aarch64-linux-gnu/13/include/syslimits.h CMakeFiles/bytetrack-counter.dir/src/main.cpp.o: /opt/bytetrack-counter-cpp/src/main.cpp \ + version.hpp \ /opt/bytetrack-counter-cpp/src/batch_store.hpp \ /opt/bytetrack-counter-cpp/src/bytetrack.hpp \ /opt/bytetrack-counter-cpp/src/config.hpp \ @@ -4819,6 +4820,8 @@ CMakeFiles/bytetrack-counter.dir/src/rknn_yolo.cpp.o: /opt/bytetrack-counter-cpp /usr/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h: +version.hpp: + /usr/include/eigen3/Eigen/src/Core/CommaInitializer.h: /usr/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h: diff --git a/build/CMakeFiles/bytetrack-counter.dir/flags.make b/build/CMakeFiles/bytetrack-counter.dir/flags.make index 384a5ec..a25ee91 100644 --- a/build/CMakeFiles/bytetrack-counter.dir/flags.make +++ b/build/CMakeFiles/bytetrack-counter.dir/flags.make @@ -4,7 +4,7 @@ # compile CXX with /usr/bin/c++ CXX_DEFINES = -DHAS_RKNN -CXX_INCLUDES = -I/usr/local/include/rknn -I/usr/include/eigen3 -I/opt/bytetrack-counter-cpp/src -isystem /usr/include/opencv4 +CXX_INCLUDES = -I/usr/local/include/rknn -I/usr/include/eigen3 -I/opt/bytetrack-counter-cpp/src -I/opt/bytetrack-counter-cpp/build -isystem /usr/include/opencv4 CXX_FLAGS = -std=c++17 diff --git a/build/bytetrack-counter b/build/bytetrack-counter index d2b9c54..0e98bb6 100755 Binary files a/build/bytetrack-counter and b/build/bytetrack-counter differ diff --git a/build/version.hpp b/build/version.hpp new file mode 100644 index 0000000..576cf18 --- /dev/null +++ b/build/version.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace version { + +const std::string GIT_COMMIT = "d66af69c"; +const std::string GIT_BRANCH = "main"; +const std::string GIT_TAG = ""; +const std::string BUILD_DATE = "2026-07-06"; +const std::string BUILD_TIME = "10:23:30"; +const int BUILD_YEAR = 2026; +const bool BUILD_RKNN = 1; + +} diff --git a/src/batch_store.cpp b/src/batch_store.cpp index 491224a..e7ff508 100644 --- a/src/batch_store.cpp +++ b/src/batch_store.cpp @@ -406,6 +406,14 @@ void BatchStore::start_cutoff_watcher() { t.detach(); } +void BatchStore::ping_activity() { + std::lock_guard lock(state_mutex_); + if (!current_state_.is_null()) { + current_state_["last_detection_time"] = now_iso(); + reset_batch_timer(); + } +} + void BatchStore::shutdown() { shutdown_flag_ = true; batch_timer_running_ = false; diff --git a/src/batch_store.hpp b/src/batch_store.hpp index 8a58988..16d56b5 100644 --- a/src/batch_store.hpp +++ b/src/batch_store.hpp @@ -34,6 +34,7 @@ public: std::pair record_ayam_crossing(int track_id); bool record_talenan_crossing(int track_id); void end_batch(const std::string& closed_by = "manual"); + void ping_activity(); void shutdown(); private: diff --git a/src/main.cpp b/src/main.cpp index f410774..559254a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ #include "rknn_yolo.hpp" #include "drawing.hpp" #include "nms.hpp" +#include "version.hpp" #include #include @@ -98,10 +99,30 @@ int main(int argc, char* argv[]) { signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); - const char* env_path = argc > 1 ? argv[1] : nullptr; - g_config.load_from_env(env_path); + if (argc < 2) { + std::cout << "ByteTrack Counter (C++)" << std::endl; + std::cout << "Version: " << version::GIT_COMMIT + << " | branch: " << version::GIT_BRANCH + << " | built: " << version::BUILD_DATE << " " << version::BUILD_TIME + << " | rknn: " << (version::BUILD_RKNN ? "ON" : "OFF"); + if (!version::GIT_TAG.empty()) + std::cout << " | tag: " << version::GIT_TAG; + std::cout << std::endl; + std::cout << "Usage: bytetrack-counter " << std::endl; + std::cout << " config.env path to environment configuration file (required)" << std::endl; + return 1; + } + + g_config.load_from_env(argv[1]); std::cout << "Starting ByteTrack Counter (C++)" << std::endl; + std::cout << "Version: " << version::GIT_COMMIT + << " | branch: " << version::GIT_BRANCH + << " | built: " << version::BUILD_DATE << " " << version::BUILD_TIME + << " | rknn: " << (version::BUILD_RKNN ? "ON" : "OFF"); + if (!version::GIT_TAG.empty()) + std::cout << " | tag: " << version::GIT_TAG; + std::cout << std::endl; std::cout << "Camera: " << g_config.camera_name << std::endl; std::cout << "Source: " << g_config.source << std::endl; std::cout << "Model: " << g_config.model_path << " | imgsz=" << g_config.imgsz @@ -244,6 +265,8 @@ int main(int argc, char* argv[]) { int na = static_cast(ayam_boxes.size()); int nt = static_cast(talenan_boxes.size()); + if (na > 0) store.ping_activity(); + Eigen::MatrixXf ayam_mat(na, 4), talenan_mat(nt, 4); Eigen::VectorXf ayam_scores_vec(na), talenan_scores_vec(nt); diff --git a/src/version.hpp.in b/src/version.hpp.in new file mode 100644 index 0000000..39179ce --- /dev/null +++ b/src/version.hpp.in @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace version { + +const std::string GIT_COMMIT = "@GIT_COMMIT@"; +const std::string GIT_BRANCH = "@GIT_BRANCH@"; +const std::string GIT_TAG = "@GIT_TAG@"; +const std::string BUILD_DATE = "@BUILD_DATE@"; +const std::string BUILD_TIME = "@BUILD_TIME@"; +const int BUILD_YEAR = @BUILD_YEAR@; +const bool BUILD_RKNN = @HAS_RKNN_VAL@; + +}