Use yuv and fix FR to use batch 4
This commit is contained in:
@@ -50,7 +50,42 @@
|
|||||||
"Bash(awk '{print \"OCR_Leak: \"$1}')",
|
"Bash(awk '{print \"OCR_Leak: \"$1}')",
|
||||||
"Bash(awk 'NR==1 || NR%20==0 || NR==157 { *)",
|
"Bash(awk 'NR==1 || NR%20==0 || NR==157 { *)",
|
||||||
"Bash(xargs file *)",
|
"Bash(xargs file *)",
|
||||||
"Bash(xargs grep *)"
|
"Bash(xargs grep *)",
|
||||||
|
"Bash(awk '{print \"BYTETracker heartbeat: \"$1}')",
|
||||||
|
"Bash(awk 'NR==1 || NR%30==0 || NR==352 { *)",
|
||||||
|
"Bash(awk '{for\\(i=1;i<=NF;i++\\){if\\($i~/total=/\\)print substr\\($i, index\\($i,\"=\"\\)+1\\)}}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"YOLO_Timing total ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk '{for\\(i=1;i<=NF;i++\\){if\\($i~/preproc=/\\)print substr\\($i, index\\($i,\"=\"\\)+1\\)}}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"YOLO_Timing preproc ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk '{for\\(i=1;i<=NF;i++\\){if\\($i~/inf=/\\)print substr\\($i, index\\($i,\"=\"\\)+1\\)}}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"YOLO_Timing inference ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"MEDIA_Timing getImage total ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk '{for\\(i=1;i<=NF;i++\\){if\\($i~/pull=/\\)print substr\\($i, index\\($i,\"=\"\\)+1\\)}}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"MEDIA_Timing pull ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk '{for\\(i=1;i<=NF;i++\\){if\\($i~/convert=/\\)print substr\\($i, index\\($i,\"=\"\\)+1\\)}}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"MEDIA_Timing convert ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk '{print $2}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"TRT_Slow timestamps \\(sec\\): n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk -F'total=' '{print $2}')",
|
||||||
|
"Bash(awk '{print $1}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"TRT_Slow total ms: n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{p50=int\\(c*0.50\\); p95=int\\(c*0.95\\); p99=int\\(c*0.99\\); print \"SLOW memcpy timestamps \\(sec\\): n=\"c, \"p50=\"a[p50], \"p95=\"a[p95], \"p99=\"a[p99], \"max=\"a[c-1]}')",
|
||||||
|
"Bash(awk -F. '{print int\\($1/100\\)}')",
|
||||||
|
"Bash(awk -F' ' '{print $3}')",
|
||||||
|
"Bash(awk '$1 > 200')",
|
||||||
|
"Bash(awk -F'net=' '{print $2}')",
|
||||||
|
"Bash(awk -F'bytesMB=' '{print $2}')",
|
||||||
|
"Bash(awk -F'bytesMB=' '{gsub\\(/[^0-9.]/,\"\",$2\\); print $2}')",
|
||||||
|
"Bash(awk -F'ids_tot=' '{print $2}')",
|
||||||
|
"Bash(dumpbin /symbols \"C:/Projects/CLionProjects/ANSCORE/cmake-build-release/bin/ANSCV.dll\")",
|
||||||
|
"Bash(mkdir -p \"C:/ProgramData/ANSCENTER\")",
|
||||||
|
"Bash(touch \"C:/ProgramData/ANSCENTER/ansvisdebugview.txt\")",
|
||||||
|
"Read(//c/ProgramData/ANSCENTER/**)",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{printf \"YOLO_total: n=%d p50=%.1f p95=%.1f p99=%.1f max=%.1f\\\\n\", c, a[int\\(c*0.5\\)], a[int\\(c*0.95\\)], a[int\\(c*0.99\\)], a[c-1]}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{printf \"YOLO_preproc: n=%d p50=%.1f p95=%.1f p99=%.1f max=%.1f\\\\n\", c, a[int\\(c*0.5\\)], a[int\\(c*0.95\\)], a[int\\(c*0.99\\)], a[c-1]}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{printf \"YOLO_inf: n=%d p50=%.1f p95=%.1f p99=%.1f max=%.1f\\\\n\", c, a[int\\(c*0.5\\)], a[int\\(c*0.95\\)], a[int\\(c*0.99\\)], a[c-1]}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{printf \"MEDIA_total: n=%d p50=%.2f p95=%.2f p99=%.2f max=%.2f\\\\n\", c, a[int\\(c*0.5\\)], a[int\\(c*0.95\\)], a[int\\(c*0.99\\)], a[c-1]}')",
|
||||||
|
"Bash(awk 'BEGIN{c=0}{a[c++]=$1}END{printf \"MEDIA_convert: n=%d p50=%.2f p95=%.2f p99=%.2f max=%.2f\\\\n\", c, a[int\\(c*0.5\\)], a[int\\(c*0.95\\)], a[int\\(c*0.99\\)], a[c-1]}')"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,19 +107,27 @@ endif()
|
|||||||
# Default: OFF. Enable with `-DANSCORE_USE_LIBYUV=ON` only after switching
|
# Default: OFF. Enable with `-DANSCORE_USE_LIBYUV=ON` only after switching
|
||||||
# the project's compiler to clang-cl / clang / gcc.
|
# the project's compiler to clang-cl / clang / gcc.
|
||||||
option(ANSCORE_USE_LIBYUV "Use libyuv for YUV→BGR conversion (only effective on Clang/GCC, NOT MSVC)" OFF)
|
option(ANSCORE_USE_LIBYUV "Use libyuv for YUV→BGR conversion (only effective on Clang/GCC, NOT MSVC)" OFF)
|
||||||
if(ANSCORE_USE_LIBYUV AND EXISTS "${CMAKE_SOURCE_DIR}/3rdparty/libyuv/CMakeLists.txt")
|
# Prebuilt libyuv path — built separately with clang-cl so its SIMD rows compile,
|
||||||
if(MSVC AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
# then linked into the MSVC main build (clang-cl output is MSVC-ABI-compatible).
|
||||||
message(WARNING "ANSCORE_USE_LIBYUV=ON but compiler is MSVC cl.exe — "
|
# Override with -DANSCORE_LIBYUV_LIB=<path> if the .lib lives elsewhere.
|
||||||
"libyuv's SIMD paths (row_gcc.cc) won't compile. "
|
set(ANSCORE_LIBYUV_LIB "${CMAKE_SOURCE_DIR}/3rdparty/libyuv/build-clangcl/Release/yuv.lib"
|
||||||
"Expect ~10× slowdown vs cv::cvtColor. "
|
CACHE FILEPATH "Path to the prebuilt libyuv static library (built with clang-cl)")
|
||||||
"Use clang-cl (LLVM) instead, or keep ANSCORE_USE_LIBYUV=OFF.")
|
|
||||||
endif()
|
if(ANSCORE_USE_LIBYUV AND EXISTS "${ANSCORE_LIBYUV_LIB}")
|
||||||
# Prevent libyuv from finding a system libjpeg and enabling HAVE_JPEG
|
add_library(yuv STATIC IMPORTED GLOBAL)
|
||||||
# (we don't use libyuv's MJPEG codepaths; avoids an unnecessary runtime dep).
|
set_target_properties(yuv PROPERTIES
|
||||||
set(CMAKE_DISABLE_FIND_PACKAGE_JPEG TRUE)
|
IMPORTED_LOCATION "${ANSCORE_LIBYUV_LIB}"
|
||||||
add_subdirectory(3rdparty/libyuv EXCLUDE_FROM_ALL)
|
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/3rdparty/libyuv/include")
|
||||||
set(ANSCORE_HAS_LIBYUV ON)
|
set(ANSCORE_HAS_LIBYUV ON)
|
||||||
message(STATUS "libyuv: ENABLED (vendored from 3rdparty/libyuv, static target 'yuv')")
|
message(STATUS "libyuv: ENABLED (prebuilt static lib at ${ANSCORE_LIBYUV_LIB})")
|
||||||
|
elseif(ANSCORE_USE_LIBYUV)
|
||||||
|
set(ANSCORE_HAS_LIBYUV OFF)
|
||||||
|
message(WARNING "ANSCORE_USE_LIBYUV=ON but prebuilt libyuv not found at "
|
||||||
|
"${ANSCORE_LIBYUV_LIB}. Build it first with clang-cl:\n"
|
||||||
|
" cmake -S 3rdparty/libyuv -B 3rdparty/libyuv/build-clangcl "
|
||||||
|
"-G \"Visual Studio 17 2022\" -T ClangCL -A x64\n"
|
||||||
|
" cmake --build 3rdparty/libyuv/build-clangcl --config Release\n"
|
||||||
|
"Falling back to cv::cvtColor path.")
|
||||||
else()
|
else()
|
||||||
set(ANSCORE_HAS_LIBYUV OFF)
|
set(ANSCORE_HAS_LIBYUV OFF)
|
||||||
message(STATUS "libyuv: DISABLED — using cv::cvtColor+IPP path (fast on MSVC)")
|
message(STATUS "libyuv: DISABLED — using cv::cvtColor+IPP path (fast on MSVC)")
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ protected:
|
|||||||
static const int SETTLE_FRAME_COUNT = 5; // Number of clean frames before delivering new frames
|
static const int SETTLE_FRAME_COUNT = 5; // Number of clean frames before delivering new frames
|
||||||
|
|
||||||
// Frame rate limiting — skip post-decode processing for frames beyond target interval
|
// Frame rate limiting — skip post-decode processing for frames beyond target interval
|
||||||
double m_targetIntervalMs = 100.0; // default 100ms (~10 FPS), 0 = no limit (process all frames)
|
double m_targetIntervalMs = 0.0; // 0 = no limit (process all frames), e.g. 100 = ~10 FPS
|
||||||
std::chrono::steady_clock::time_point m_lastProcessedTime; // timestamp of last processed frame
|
std::chrono::steady_clock::time_point m_lastProcessedTime; // timestamp of last processed frame
|
||||||
bool m_targetFPSInitialized = false; // first-frame flag
|
bool m_targetFPSInitialized = false; // first-frame flag
|
||||||
|
|
||||||
|
|||||||
@@ -255,8 +255,8 @@ namespace ANSCENTER {
|
|||||||
if (engineType == EngineType::NVIDIA_GPU) {
|
if (engineType == EngineType::NVIDIA_GPU) {
|
||||||
optimizedModelFolder = GetParentFolder(_modelFilePath);
|
optimizedModelFolder = GetParentFolder(_modelFilePath);
|
||||||
|
|
||||||
m_options.optBatchSize = 8;
|
m_options.optBatchSize = 2;
|
||||||
m_options.maxBatchSize = 32;
|
m_options.maxBatchSize = 4;
|
||||||
m_options.engineFileDir = optimizedModelFolder;
|
m_options.engineFileDir = optimizedModelFolder;
|
||||||
m_options.precision = fp16 ? Precision::FP16 : Precision::FP32;
|
m_options.precision = fp16 ? Precision::FP16 : Precision::FP32;
|
||||||
|
|
||||||
|
|||||||
@@ -124,13 +124,13 @@ float ByteTrackNCNN::Rect<T>::calcIoU(const Rect<T>& other) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ByteTrackNCNN::Rect<T> generate_rect_by_tlbr(const ByteTrackNCNN::Tlbr<T>& tlbr)
|
ByteTrackNCNN::Rect<T> ByteTrackNCNN::generate_rect_by_tlbr(const ByteTrackNCNN::Tlbr<T>& tlbr)
|
||||||
{
|
{
|
||||||
return ByteTrackNCNN::Rect<T>(tlbr[0], tlbr[1], tlbr[2] - tlbr[0], tlbr[3] - tlbr[1]);
|
return ByteTrackNCNN::Rect<T>(tlbr[0], tlbr[1], tlbr[2] - tlbr[0], tlbr[3] - tlbr[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ByteTrackNCNN::Rect<T> generate_rect_by_xyah(const ByteTrackNCNN::Xyah<T>& xyah)
|
ByteTrackNCNN::Rect<T> ByteTrackNCNN::generate_rect_by_xyah(const ByteTrackNCNN::Xyah<T>& xyah)
|
||||||
{
|
{
|
||||||
const auto width = xyah[2] * xyah[3];
|
const auto width = xyah[2] * xyah[3];
|
||||||
return ByteTrackNCNN::Rect<T>(xyah[0] - width / 2, xyah[1] - xyah[3] / 2, width, xyah[3]);
|
return ByteTrackNCNN::Rect<T>(xyah[0] - width / 2, xyah[1] - xyah[3] / 2, width, xyah[3]);
|
||||||
|
|||||||
@@ -848,12 +848,12 @@ int RSTPTestCVClient() {
|
|||||||
int index = 0;
|
int index = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
index++;
|
index++;
|
||||||
std::cout << "Index=" << index << std::endl;
|
//std::cout << "Index=" << index << std::endl;
|
||||||
if ((index == 200) || (index == 800) || (index == 1200)) { StopRTSP(&rtspClient); }
|
//if ((index == 200) || (index == 800) || (index == 1200)) { StopRTSP(&rtspClient); }
|
||||||
if ((index == 400) || (index == 1000) || (index == 1500)) { StartRTSP(&rtspClient); }
|
//if ((index == 400) || (index == 1000) || (index == 1500)) { StartRTSP(&rtspClient); }
|
||||||
//if ((index == 1800) || (index == 2200) || (index == 2500)) { StartRTSP(&rtspClient); }
|
//if ((index == 1800) || (index == 2200) || (index == 2500)) { StartRTSP(&rtspClient); }
|
||||||
//if ((index == 2000) || (index == 2300) || (index == 2700)) { StartRTSP(&rtspClient); }
|
//if ((index == 2000) || (index == 2300) || (index == 2700)) { StartRTSP(&rtspClient); }
|
||||||
if (index > 20000) break;
|
//if (index > 20000) break;
|
||||||
auto start = std::chrono::system_clock::now();
|
auto start = std::chrono::system_clock::now();
|
||||||
cv::Mat* image = nullptr; // ✅ Use a pointer to hold the allocated image
|
cv::Mat* image = nullptr; // ✅ Use a pointer to hold the allocated image
|
||||||
GetRTSPCVImage(&rtspClient, width, height, pts,&image);
|
GetRTSPCVImage(&rtspClient, width, height, pts,&image);
|
||||||
|
|||||||
Reference in New Issue
Block a user