Init: Update Intrusion-detection source code
This commit is contained in:
parent
407904cd65
commit
0d7bba41a1
|
|
@ -1,24 +1,40 @@
|
||||||
# Build artifacts
|
# Prerequisites
|
||||||
build/
|
*.d
|
||||||
|
|
||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
*.o
|
*.o
|
||||||
*.a
|
*.obj
|
||||||
*.so
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.dylib
|
||||||
*.dll
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
*.smod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
*.exe
|
*.exe
|
||||||
*.out
|
*.out
|
||||||
|
*.app
|
||||||
|
|
||||||
# IDE and editor files
|
*.mp4
|
||||||
.vscode/
|
/build
|
||||||
.idea/
|
/install
|
||||||
*.suo
|
/.vscode
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.swp
|
|
||||||
|
|
||||||
# Log files
|
*.png
|
||||||
*.log
|
*.jpg
|
||||||
|
*.mp4
|
||||||
# Dependency directories
|
|
||||||
vendor/
|
|
||||||
node_modules/
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
# 定义整个大项目的名称
|
||||||
|
project(EdgeProxyPlatform)
|
||||||
|
|
||||||
|
# 打印一条消息,方便调试,确认是顶层CMake在运行
|
||||||
|
message(STATUS "Running Top-Level CMake for ${PROJECT_NAME}")
|
||||||
|
|
||||||
|
# 使用 add_subdirectory() 命令将 services 目录下的项目包含进来
|
||||||
|
# CMake 会自动寻找 services/intrusion-detection/CMakeLists.txt 并执行它
|
||||||
|
add_subdirectory(services/intrusion-detection)
|
||||||
|
|
||||||
|
# 当你未来添加了车辆识别项目后,只需在这里加一行即可
|
||||||
|
# add_subdirectory(services/vehicle-recognition)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
librknnrt.so
|
||||||
Binary file not shown.
|
|
@ -1,61 +1,61 @@
|
||||||
|
# CMake 最低版本要求
|
||||||
cmake_minimum_required(VERSION 3.4.1)
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
|
|
||||||
project(rknn_yolov5_demo)
|
# 项目名称
|
||||||
|
project(IntrusionDetectionService CXX)
|
||||||
|
|
||||||
|
# 设置 C++ 标准和编译选项
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_FLAGS "-pthread")
|
set(CMAKE_CXX_FLAGS "-pthread")
|
||||||
|
|
||||||
# skip 3rd-party lib dependencies
|
# --- 1. 定义并查找公共库 (RKNN) ---
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined")
|
# 使用相对路径找到顶层目录下的 libs 文件夹
|
||||||
|
set(COMMON_LIB_DIR ${CMAKE_SOURCE_DIR}/libs)
|
||||||
|
find_library(RKNNRT_LIBRARY rknnrt HINTS ${COMMON_LIB_DIR})
|
||||||
|
find_library(RKNNAPI_LIBRARY rknn_api HINTS ${COMMON_LIB_DIR})
|
||||||
|
|
||||||
# install target and libraries
|
if(NOT RKNNRT_LIBRARY OR NOT RKNNAPI_LIBRARY)
|
||||||
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})
|
message(FATAL_ERROR "Could not find RKNN libraries in ${COMMON_LIB_DIR}")
|
||||||
|
else()
|
||||||
|
message(STATUS "Found rknnrt: ${RKNNRT_LIBRARY}")
|
||||||
|
message(STATUS "Found rknn_api: ${RKNNAPI_LIBRARY}")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
|
# --- 2. 定义并查找其他依赖 (OpenCV, RGA) ---
|
||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
||||||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
|
||||||
|
|
||||||
# rknn api
|
|
||||||
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK3588/${CMAKE_SYSTEM_NAME}/librknn_api)
|
|
||||||
set(LIB_ARCH aarch64)
|
|
||||||
set(RKNN_RT_LIB ${CMAKE_SOURCE_DIR}/include/librknnrt.so)
|
|
||||||
|
|
||||||
#rga
|
|
||||||
set(RGA_PATH ${CMAKE_SOURCE_DIR}/include/3rdparty/rga/RK3588)
|
|
||||||
set(RGA_LIB ${RGA_PATH}/lib/Linux//${LIB_ARCH}/librga.so)
|
|
||||||
|
|
||||||
|
|
||||||
include_directories(${RKNN_API_PATH}/include)
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/include/3rdparty)
|
|
||||||
include_directories(${RGA_PATH}/include)
|
|
||||||
|
|
||||||
# opencv
|
|
||||||
find_package(OpenCV REQUIRED)
|
find_package(OpenCV REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_INSTALL_RPATH "lib")
|
# rga 库的路径,根据您的截图,它位于 include/3rdparty
|
||||||
|
set(RGA_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include/3rdparty/rga/RK3588)
|
||||||
|
set(RGA_LIB ${RGA_PATH}/lib/Linux/aarch64/librga.so)
|
||||||
|
if(NOT EXISTS ${RGA_LIB})
|
||||||
|
message(FATAL_ERROR "RGA library not found at ${RGA_LIB}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# --- 3. 生成可执行文件 ---
|
||||||
# rknn_yolov5_demo
|
# (修改点) 根据截图,所有源文件都在 src 目录下,为其添加 "src/" 前缀
|
||||||
include_directories( ${CMAKE_SOURCE_DIR}/include)
|
add_executable(intrusion_detection_service
|
||||||
|
|
||||||
add_executable(rknn_yolov5_demo
|
|
||||||
src/main.cc
|
src/main.cc
|
||||||
src/postprocess.cc
|
src/postprocess.cc
|
||||||
src/preprocess.cc
|
src/preprocess.cc
|
||||||
src/rkYolov5s.cc
|
src/rkYolov5s.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(rknn_yolov5_demo
|
# --- 4. 为目标指定头文件搜索路径 ---
|
||||||
${RKNN_RT_LIB}
|
# (修改点) 根据截图,所有头文件都在 include 目录下
|
||||||
${OpenCV_LIBS}
|
target_include_directories(intrusion_detection_service PUBLIC
|
||||||
${RGA_LIB}
|
${CMAKE_CURRENT_SOURCE_DIR}/include # <-- 关键修改
|
||||||
|
${OpenCV_INCLUDE_DIRS}
|
||||||
|
${RGA_PATH}/include
|
||||||
|
# 如果有公共头文件,也需要添加路径,例如: ${CMAKE_SOURCE_DIR}/include
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# --- 5. 链接所有库到可执行文件 ---
|
||||||
|
target_link_libraries(intrusion_detection_service
|
||||||
|
${RKNNRT_LIBRARY}
|
||||||
|
${RKNNAPI_LIBRARY}
|
||||||
|
${RGA_LIB}
|
||||||
|
${OpenCV_LIBS}
|
||||||
|
)
|
||||||
|
|
||||||
# install target and libraries
|
message(STATUS "Configuration for IntrusionDetectionService is complete.")
|
||||||
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})
|
|
||||||
install(TARGETS rknn_yolov5_demo DESTINATION ./)
|
|
||||||
install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib)
|
|
||||||
install(PROGRAMS ${RGA_LIB} DESTINATION lib)
|
|
||||||
install(DIRECTORY model DESTINATION ./)
|
|
||||||
BIN
services/intrusion-detection/include/3rdparty/rga/RK3588/lib/Linux/aarch64/librga.so
vendored
Normal file
BIN
services/intrusion-detection/include/3rdparty/rga/RK3588/lib/Linux/aarch64/librga.so
vendored
Normal file
Binary file not shown.
|
|
@ -11,16 +11,9 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *model_name = NULL;
|
char *model_name = NULL;
|
||||||
const char* model_path = "/home/forlinx/rknn-cpp-Multithreading-main/model/RK3588/yolov5s-640-640.rknn";
|
const char* model_path = "/home/forlinx/rknn-cpp-Multithreading-main/model/RK3588/yolov5s-640-640.rknn";
|
||||||
|
|
||||||
// if (argc != 3)
|
|
||||||
// {
|
|
||||||
// printf("Usage: %s <rknn model> <jpg> \n", argv[0]);
|
|
||||||
// return -1;
|
|
||||||
// }
|
|
||||||
// 参数二,模型所在路径/The path where the model is located
|
// 参数二,模型所在路径/The path where the model is located
|
||||||
// model_name = (char *)argv[1];
|
|
||||||
// 参数三, 视频/摄像头
|
|
||||||
// char *video_name = argv[2];
|
|
||||||
|
|
||||||
// 初始化rknn线程池/Initialize the rknn thread pool
|
// 初始化rknn线程池/Initialize the rknn thread pool
|
||||||
int threadNum = 3;
|
int threadNum = 3;
|
||||||
|
|
@ -31,9 +24,14 @@ int main(int argc, char **argv)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* WINDOW_NAME = "RTSP Fullscreen Display";
|
// const char *video_name = "/home/forlinx/Videos/test_video.mp4";
|
||||||
cv::namedWindow(WINDOW_NAME, cv::WINDOW_NORMAL);
|
// cv::VideoCapture capture;
|
||||||
cv::setWindowProperty(WINDOW_NAME, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
|
// if (strlen(video_name) == 1)
|
||||||
|
// capture.open((int)(video_name[0] - '0'));
|
||||||
|
// else
|
||||||
|
// capture.open(video_name);
|
||||||
|
setenv("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport;tcp", 1);
|
||||||
|
printf("Set RTSP transport protocol to TCP\n");
|
||||||
std::string rtsp_url = "rtsp://admin:hzx12345@192.168.1.10:554/Streaming/Channels/1301";
|
std::string rtsp_url = "rtsp://admin:hzx12345@192.168.1.10:554/Streaming/Channels/1301";
|
||||||
cv::VideoCapture capture(rtsp_url, cv::CAP_FFMPEG);
|
cv::VideoCapture capture(rtsp_url, cv::CAP_FFMPEG);
|
||||||
|
|
||||||
|
|
@ -43,11 +41,14 @@ int main(int argc, char **argv)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
printf("RTSP stream opened successfully!\n");
|
printf("RTSP stream opened successfully!\n");
|
||||||
// cv::VideoCapture capture;
|
|
||||||
// if (strlen(video_name) == 1)
|
|
||||||
// capture.open((int)(video_name[0] - '0'));
|
const char* WINDOW_NAME = "RTSP Fullscreen Display";
|
||||||
// else
|
cv::namedWindow(WINDOW_NAME, cv::WINDOW_NORMAL);
|
||||||
// capture.open(video_name);
|
cv::setWindowProperty(WINDOW_NAME, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct timeval time;
|
struct timeval time;
|
||||||
gettimeofday(&time, nullptr);
|
gettimeofday(&time, nullptr);
|
||||||
|
|
|
||||||
|
|
@ -343,8 +343,6 @@ int post_process(int8_t *input0, int8_t *input1, int8_t *input2, int model_in_h,
|
||||||
int id = classId[n];
|
int id = classId[n];
|
||||||
float obj_conf = objProbs[i];
|
float obj_conf = objProbs[i];
|
||||||
|
|
||||||
if (id == 0)
|
|
||||||
{
|
|
||||||
group->results[last_count].box.left = (int)(clamp(x1, 0, model_in_w) / scale_w);
|
group->results[last_count].box.left = (int)(clamp(x1, 0, model_in_w) / scale_w);
|
||||||
group->results[last_count].box.top = (int)(clamp(y1, 0, model_in_h) / scale_h);
|
group->results[last_count].box.top = (int)(clamp(y1, 0, model_in_h) / scale_h);
|
||||||
group->results[last_count].box.right = (int)(clamp(x2, 0, model_in_w) / scale_w);
|
group->results[last_count].box.right = (int)(clamp(x2, 0, model_in_w) / scale_w);
|
||||||
|
|
@ -358,15 +356,6 @@ int post_process(int8_t *input0, int8_t *input1, int8_t *input2, int model_in_h,
|
||||||
// group->results[last_count].box.right, group->results[last_count].box.bottom, label);
|
// group->results[last_count].box.right, group->results[last_count].box.bottom, label);
|
||||||
last_count++;
|
last_count++;
|
||||||
}
|
}
|
||||||
// group->results[last_count].box.left = (int)(clamp(x1, 0, model_in_w) / scale_w);
|
|
||||||
// group->results[last_count].box.top = (int)(clamp(y1, 0, model_in_h) / scale_h);
|
|
||||||
// group->results[last_count].box.right = (int)(clamp(x2, 0, model_in_w) / scale_w);
|
|
||||||
// group->results[last_count].box.bottom = (int)(clamp(y2, 0, model_in_h) / scale_h);
|
|
||||||
// group->results[last_count].prop = obj_conf;
|
|
||||||
// char *label = labels[id];
|
|
||||||
// strncpy(group->results[last_count].name, label, OBJ_NAME_MAX_SIZE);
|
|
||||||
// last_count++;
|
|
||||||
}
|
|
||||||
group->count = last_count;
|
group->count = last_count;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -281,6 +281,11 @@ cv::Mat rkYolov5s::infer(cv::Mat &orig_img)
|
||||||
for (int i = 0; i < detect_result_group.count; i++)
|
for (int i = 0; i < detect_result_group.count; i++)
|
||||||
{
|
{
|
||||||
detect_result_t *det_result = &(detect_result_group.results[i]);
|
detect_result_t *det_result = &(detect_result_group.results[i]);
|
||||||
|
|
||||||
|
// ========================== 修改开始 ==========================
|
||||||
|
// 增加一个判断,只处理标签名称为 "person" 的结果
|
||||||
|
if (strcmp(det_result->name, "person") == 0)
|
||||||
|
{
|
||||||
sprintf(text, "%s %.1f%%", det_result->name, det_result->prop * 100);
|
sprintf(text, "%s %.1f%%", det_result->name, det_result->prop * 100);
|
||||||
// 打印预测物体的信息/Prints information about the predicted object
|
// 打印预测物体的信息/Prints information about the predicted object
|
||||||
// printf("%s @ (%d %d %d %d) %f\n", det_result->name, det_result->box.left, det_result->box.top,
|
// printf("%s @ (%d %d %d %d) %f\n", det_result->name, det_result->box.left, det_result->box.top,
|
||||||
|
|
@ -292,6 +297,8 @@ cv::Mat rkYolov5s::infer(cv::Mat &orig_img)
|
||||||
rectangle(orig_img, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(256, 0, 0, 256), 3);
|
rectangle(orig_img, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(256, 0, 0, 256), 3);
|
||||||
putText(orig_img, text, cv::Point(x1, y1 + 12), cv::FONT_HERSHEY_SIMPLEX, 0.4, cv::Scalar(255, 255, 255));
|
putText(orig_img, text, cv::Point(x1, y1 + 12), cv::FONT_HERSHEY_SIMPLEX, 0.4, cv::Scalar(255, 255, 255));
|
||||||
}
|
}
|
||||||
|
// ========================== 修改结束 ==========================
|
||||||
|
}
|
||||||
|
|
||||||
ret = rknn_outputs_release(ctx, io_num.n_output, outputs);
|
ret = rknn_outputs_release(ctx, io_num.n_output, outputs);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue