diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..c2098a2 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "linux-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "/usr/bin/gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "linux-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index ec90891..54dcb37 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,72 +1,129 @@ { - "files.associations": { - "iostream": "cpp", - "array": "cpp", - "atomic": "cpp", - "hash_map": "cpp", - "hash_set": "cpp", - "bit": "cpp", - "*.tcc": "cpp", - "cctype": "cpp", - "chrono": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "complex": "cpp", - "condition_variable": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "deque": "cpp", - "list": "cpp", - "map": "cpp", - "set": "cpp", - "unordered_map": "cpp", - "unordered_set": "cpp", - "vector": "cpp", - "exception": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "memory": "cpp", - "memory_resource": "cpp", - "numeric": "cpp", - "optional": "cpp", - "random": "cpp", - "ratio": "cpp", - "string": "cpp", - "string_view": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "iomanip": "cpp", - "iosfwd": "cpp", - "istream": "cpp", - "limits": "cpp", - "mutex": "cpp", - "new": "cpp", - "ostream": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "thread": "cpp", - "cinttypes": "cpp", - "typeinfo": "cpp", - "bitset": "cpp", - "regex": "cpp", - "shared_mutex": "cpp", - "variant": "cpp", - "future": "cpp", - "typeindex": "cpp", - "codecvt": "cpp", - "*.cpp1": "cpp" - } + "files.associations": { + "iostream": "cpp", + "array": "cpp", + "atomic": "cpp", + "hash_map": "cpp", + "hash_set": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "complex": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp", + "bitset": "cpp", + "regex": "cpp", + "shared_mutex": "cpp", + "variant": "cpp", + "future": "cpp", + "typeindex": "cpp", + "codecvt": "cpp", + "*.cpp1": "cpp" + }, + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false } \ No newline at end of file diff --git a/src/ai_platform/header.h b/src/ai_platform/header.h index 4e91b0f..6c17e3b 100644 --- a/src/ai_platform/header.h +++ b/src/ai_platform/header.h @@ -480,6 +480,15 @@ typedef struct algor_config_param_snapshot { #endif +//共性算法适配使用 +#ifndef __SY_DIRECTION__ +#define __SY_DIRECTION__ +typedef struct sy_direction { + sy_point p1; + sy_point p2; +} sy_direction; +#endif + #ifndef __UNIVERSAL_ADAPTATON__ #define __UNIVERSAL_ADAPTATON__ #define ROI_MAX_POINT 50 @@ -487,7 +496,7 @@ typedef struct algor_config_param_snapshot { typedef struct universal_algor_adapt_param { sy_point points[ROI_MAX_POINT]; int points_count; //多边形顶点数量(不超过ROI_MAX_POINT) - // sy_direction direction[MAX_DIRECTION_LINE]; + sy_direction direction[MAX_DIRECTION_LINE]; int line_count; //拌线数量(不超过MAX_DIRECTION_LINE) universal_algor_adapt_param() diff --git a/src/tsl_aiplatform_jni/AiEngineNativeInterface.cpp b/src/tsl_aiplatform_jni/AiEngineNativeInterface.cpp index 2bfe5ae..658a466 100644 --- a/src/tsl_aiplatform_jni/AiEngineNativeInterface.cpp +++ b/src/tsl_aiplatform_jni/AiEngineNativeInterface.cpp @@ -8,6 +8,9 @@ #include using namespace std; +#define SUCCESS 0 //成功 +#define FAILED -1 //失败 + /** * */ JavaVM *g_jvm = NULL; @@ -244,7 +247,7 @@ bool gb28181_request_stream_callback(const char *task_id){ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInterface_addTask(JNIEnv *env, jobject obj, jlong handle, jobject taskParam) { - int code = 0; + int code = SUCCESS; // getFieldID jclass cls_taskParam = env->GetObjectClass(taskParam); @@ -258,6 +261,8 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter jfieldID fid_taskParam_port = env->GetFieldID(cls_taskParam, "port", "I"); jfieldID fid_taskParam_protocal = env->GetFieldID(cls_taskParam, "protocal", "I"); + jfieldID fid_taskParam_iDino = env->GetFieldID(cls_taskParam, "iDino", "I"); + // getObjectField jstring str_taskParam_ipcUrl = (jstring)env->GetObjectField(taskParam, fid_taskParam_ipcUrl); const char *taskParam_ipcUrl = env->GetStringUTFChars(str_taskParam_ipcUrl, JNI_FALSE); @@ -265,17 +270,20 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter jstring str_taskParam_taskId = (jstring)env->GetObjectField(taskParam, fid_taskParam_taskId); const char *taskParam_taskId = env->GetStringUTFChars(str_taskParam_taskId, JNI_FALSE); jobject taskParam_algorConfigParams = env->GetObjectField(taskParam, fid_taskParam_algorConfigParams); - + jint taskParam_dec_type = env->GetIntField(taskParam, fid_taskParam_dec_type); jint taskParam_port = env->GetIntField(taskParam, fid_taskParam_port); jint taskParam_protocal = env->GetIntField(taskParam, fid_taskParam_protocal); + jint taskParam_iDino = env->GetIntField(taskParam, fid_taskParam_iDino); + jclass cls_syRectParam = env->FindClass("com/objecteye/pojo/common/SyRectParam"); jfieldID fid_syRectParam_left = env->GetFieldID(cls_syRectParam, "left", "I"); jfieldID fid_syRectParam_top = env->GetFieldID(cls_syRectParam, "top", "I"); jfieldID fid_syRectParam_width = env->GetFieldID(cls_syRectParam, "width", "I"); jfieldID fid_syRectParam_height = env->GetFieldID(cls_syRectParam, "height", "I"); + // java to C++ task_param mTaskParam; mTaskParam.ipc_url = taskParam_ipcUrl; @@ -291,9 +299,7 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter map psnapshot_little_AlgorConfigParamResSnapshotFolderMap; map snapshot_AlgorConfigParamResSnapshotFolderMap; map psnapshot_AlgorConfigParamResSnapshotFolderMap; - map snapshot_AlgorConfigParamResVideoFolderMap; - map psnapshot_AlgorConfigParamResVideoFolderMap; - + jclass cls_arraylist = env->FindClass("java/util/ArrayList"); // method in class ArrayList jmethodID mid_arraylist_get = env->GetMethodID(cls_arraylist, "get", "(I)Ljava/lang/Object;"); @@ -312,26 +318,24 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter jclass cls_AlgorConfigParam = env->GetObjectClass(algorConfigParam_algorInitParam); + /* assign public variables. */ - auto algor_basic_param = new algor_basic_config_param_t; { jfieldID fid_ssAlgorConfigParam_algorRect = env->GetFieldID(cls_AlgorConfigParam, "algor_valid_rect", "Lcom/objecteye/pojo/common/SyRectParam;"); jobject ssAlgorConfigParam_algorRect = env->GetObjectField(algorConfigParam_algorInitParam, fid_ssAlgorConfigParam_algorRect); - + jint ssAlgorConfigParam_algorRect_left = env->GetIntField(ssAlgorConfigParam_algorRect, fid_syRectParam_left); jint ssAlgorConfigParam_algorRect_top = env->GetIntField(ssAlgorConfigParam_algorRect, fid_syRectParam_top); jint ssAlgorConfigParam_algorRect_width = env->GetIntField(ssAlgorConfigParam_algorRect, fid_syRectParam_width); jint ssAlgorConfigParam_algorRect_height = env->GetIntField(ssAlgorConfigParam_algorRect, fid_syRectParam_height); - + jfieldID fid_ssAlgorConfigParam_snapshotLittleFolder = env->GetFieldID(cls_AlgorConfigParam, "result_folder_little", "Ljava/lang/String;"); jfieldID fid_ssAlgorConfigParam_snapshotFolder = env->GetFieldID(cls_AlgorConfigParam, "result_folder", "Ljava/lang/String;"); - jfieldID fid_ssAlgorConfigParam_videoFolder = - env->GetFieldID(cls_AlgorConfigParam, "video_folder", "Ljava/lang/String;"); //视频存储地址 - + snapshot_little_AlgorConfigParamResSnapshotFolderMap[i] = (jstring)env->GetObjectField(algorConfigParam_algorInitParam, fid_ssAlgorConfigParam_snapshotLittleFolder); psnapshot_little_AlgorConfigParamResSnapshotFolderMap[i] = @@ -340,13 +344,24 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter (jstring)env->GetObjectField(algorConfigParam_algorInitParam, fid_ssAlgorConfigParam_snapshotFolder); psnapshot_AlgorConfigParamResSnapshotFolderMap[i] = (char *)env->GetStringUTFChars(snapshot_AlgorConfigParamResSnapshotFolderMap[i], JNI_FALSE); - snapshot_AlgorConfigParamResVideoFolderMap[i] = - (jstring)env->GetObjectField(algorConfigParam_algorInitParam, fid_ssAlgorConfigParam_videoFolder); - psnapshot_AlgorConfigParamResVideoFolderMap[i] = - (char *)env->GetStringUTFChars(snapshot_AlgorConfigParamResVideoFolderMap[i], JNI_FALSE); - + + // 共性算法适配部分 + jfieldID fid_poly_points_count = env->GetFieldID(cls_AlgorConfigParam, "poly_points_count", "I"); + jint j_poly_points_count = env->GetIntField(algorConfigParam_algorInitParam, fid_poly_points_count); + + jfieldID fid_poly = env->GetFieldID(cls_AlgorConfigParam, "poly_points", "[I"); + jintArray j_poly_points = (jintArray)env->GetObjectField(algorConfigParam_algorInitParam, fid_poly); + jint *poly_points = (jint *)env->GetIntArrayElements(j_poly_points, 0); + + jfieldID fid_line_count = env->GetFieldID(cls_AlgorConfigParam, "line_count", "I"); + jint j_line_count = env->GetIntField(algorConfigParam_algorInitParam, fid_line_count); + + jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "lines", "[I"); + jintArray j_lines = (jintArray)env->GetObjectField(algorConfigParam_algorInitParam, fid); + jint *lines = (jint *)env->GetIntArrayElements(j_lines, 0); + auto algor_init_config_param = new algor_init_config_param_t; - + auto algor_basic_param = new algor_basic_config_param_t; algor_basic_param->algor_valid_rect.top_ = ssAlgorConfigParam_algorRect_top; algor_basic_param->algor_valid_rect.left_ = ssAlgorConfigParam_algorRect_left; @@ -355,7 +370,30 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter algor_basic_param->result_folder = psnapshot_AlgorConfigParamResSnapshotFolderMap[i]; algor_basic_param->result_folder_little = psnapshot_little_AlgorConfigParamResSnapshotFolderMap[i]; - algor_basic_param->video_folder = psnapshot_AlgorConfigParamResVideoFolderMap[i]; + + // 共性算法适配部分 + algor_basic_param->adapt_param = new universal_algor_adapt_param; + auto adapt_param = (universal_algor_adapt_param *)algor_basic_param->adapt_param; + for (size_t i = 0; i < (int)j_poly_points_count; i++) { + adapt_param->points[i].x_ = (int)poly_points[i * 2]; + adapt_param->points[i].y_ = (int)poly_points[i * 2 + 1]; + } + adapt_param->points_count = (int)j_poly_points_count; + + for (size_t i = 0; i < (int)j_line_count; i++) { + adapt_param->direction[i].p1.x_ = (int)lines[i * 4]; + adapt_param->direction[i].p1.y_ = (int)lines[i * 4 + 1]; + adapt_param->direction[i].p2.x_ = (int)lines[i * 4 + 2]; + adapt_param->direction[i].p2.y_ = (int)lines[i * 4 + 3]; + } + adapt_param->line_count = (int)j_line_count; + + printf("[%s:%d] points_count %d line_count %d\n", __FILE__, __LINE__, (int)j_poly_points_count, (int)j_line_count); + for (size_t i = 0; i < (int)j_poly_points_count; i++) + printf(" i %d point (%d %d)\n", i, adapt_param->points[i].x_, adapt_param->points[i].y_); + for (size_t i = 0; i < (int)j_line_count; i++) + printf(" i %d point (%d %d)\n", i, adapt_param->direction[i].p1.x_, adapt_param->direction[i].p1.y_, + adapt_param->direction[i].p2.x_, adapt_param->direction[i].p2.y_); algor_init_config_param->basic_param = algor_basic_param; mTaskParam.algor_config_params[i].algor_init_config_param = algor_init_config_param; @@ -364,9 +402,11 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter switch (static_cast(algorConfigParam_algorType)) { case algorithm_type_t::FACE_SNAPSHOT: - // printf("FACE_SNAPSHOT result_folder: %s result_folder_little: %s \n", algor_basic_param->result_folder, algor_basic_param->result_folder_little); case algorithm_type_t::HUMAN_SNAPSHOT: case algorithm_type_t::VEHICLE_SNAPSHOT: + // case algorithm_type_t::HUMAN_TIMING_SNAPSHOT: + // case algorithm_type_t::VEHICLE_TIMING_SNAPSHOT: + // case algorithm_type_t::NONMOTOR_VEHICLE_TIMING_SNAPSHOT: case algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT: { jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "threshold", "F"); jfieldID fid_snap_frame_interval = env->GetFieldID(cls_AlgorConfigParam, "snap_frame_interval", "I"); @@ -380,55 +420,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter algor_param->threshold = (float)j_threshold; algor_param->snap_frame_interval = (int)j_snap_frame_interval; } break; - - //农村违法分析 - case algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET: - case algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN: - case algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE: - case algorithm_type_t::NONMOTOR_VEHICLE_REFIT: - case algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS: - case algorithm_type_t::NONMOTOR_IN_VEHICLELANE: - case algorithm_type_t::NONMOTOR_CEOSSPARKLINE: - case algorithm_type_t::NONMOTOR_WRONGDIRECTION: - case algorithm_type_t::PERSON_IN_VEHICLELANE: - case algorithm_type_t::PERSON_CROSS: - case algorithm_type_t::PERSON_RUNNING_REDLIGHTS: - case algorithm_type_t::TRICYCLE_MANNED: - case algorithm_type_t::VEHICLE_WRONGDIRECTION: - case algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND: - case algorithm_type_t::VEHICLE_NOTGIVEWAY: - case algorithm_type_t::VEHICLE_NOTDECELERATION: - case algorithm_type_t::TRUCK_MANNED: { - jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "hs_threshold", "I"); - jint j_hs_threshold = env->GetIntField(algorConfigParam_algorInitParam, fid); - fid = env->GetFieldID(cls_AlgorConfigParam, "m_frame", "I"); - jint j_m_frame = env->GetIntField(algorConfigParam_algorInitParam, fid); - fid = env->GetFieldID(cls_AlgorConfigParam, "n_frame", "I"); - jint j_n_frame = env->GetIntField(algorConfigParam_algorInitParam, fid); - fid = env->GetFieldID(cls_AlgorConfigParam, "obj_min_width", "I"); - jint j_min_width = env->GetIntField(algorConfigParam_algorInitParam, fid); - fid = env->GetFieldID(cls_AlgorConfigParam, "obj_min_height", "I"); - jint j_min_height = env->GetIntField(algorConfigParam_algorInitParam, fid); - fid = env->GetFieldID(cls_AlgorConfigParam, "obj_confidence_threshold", "F"); - jfloat j_confidence_threshold = env->GetFloatField(algorConfigParam_algorInitParam, fid); - std::printf("%s:%d i is %d mn is [%d %d] threshold is %d\n", __FILE__, __LINE__, i, (int)j_m_frame, - (int)j_n_frame, (int)j_hs_threshold); - - typedef algor_config_param_manned_incident algor_config_param_type; - mTaskParam.algor_config_params[i].algor_init_config_param->algor_param = new algor_config_param_type; - auto algor_param = - (algor_config_param_type *)mTaskParam.algor_config_params[i].algor_init_config_param->algor_param; - - algor_param->m = (int)j_m_frame; - algor_param->n = (int)j_n_frame; - algor_param->hs_count_threshold = (int)j_hs_threshold; - - algor_param->obj_min_width = (int)j_min_width; - algor_param->obj_min_height = (int)j_min_height; - algor_param->obj_confidence_threshold = (float)j_confidence_threshold; - } break; - - + case algorithm_type_t::HUMAN_REGION_GATHER: + case algorithm_type_t::HUMAN_DENSITY: + case algorithm_type_t::VEHICLE_GATHER: case algorithm_type_t::HUMAN_GATHER: { jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "frame_stride", "I"); @@ -500,8 +494,8 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter algor_param->n = (int)j_n_frame; algor_param->threshold = (float)j_threshold; - std::printf("%s:%d i is %d mn is [%d %d] threshold is %f\n", __FILE__, __LINE__, i, algor_param->m, - algor_param->n, algor_param->threshold); + // std::printf("%s:%d i is %d mn is [%d %d] threshold is %f\n", __FILE__, __LINE__, i, algor_param->m, + // algor_param->n, algor_param->threshold); } break; case algorithm_type_t::PEDESTRIAN_FIGHT: { jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "threshold", "F"); @@ -639,8 +633,8 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter (algor_config_param_type *)mTaskParam.algor_config_params[i].algor_init_config_param->algor_param; algor_param->px1 = (int)j_px1; - algor_param->px2 = (int)j_px2; algor_param->py1 = (int)j_py1; + algor_param->px2 = (int)j_px2; algor_param->py2 = (int)j_py2; algor_param->conf_threshold = (float)j_confidence_threshold; algor_param->minmum_width = std::max(0, (int)j_min_width); @@ -649,6 +643,9 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter } break; case algorithm_type_t::PEDESTRIAN_TRESPASS: + case algorithm_type_t::HUMAN_LEAVE_REGION: + case algorithm_type_t::HUMAN_REGION_DISMISS: + case algorithm_type_t::HUMAN_REGION_FAST_MOVING: case algorithm_type_t::VEHICLE_TRESPASS: { jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "points_count", "I"); @@ -673,16 +670,6 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter jint *points = (jint *)env->GetIntArrayElements(j_points, 0); for (size_t i = 0; i < (int)j_points_count; i++) { - /* - jobject obj_pointConfigParam = env->CallObjectMethod(j_points, mid_arraylist_points_get, i); - jclass cls_pointConfigParam = env->GetObjectClass(obj_pointConfigParam); - printf("33333333333"); - jfieldID fid_pointConfigParam_x = env->GetFieldID(cls_pointConfigParam, "x", "I"); - jint point_x = env->GetIntField(obj_pointConfigParam, fid_pointConfigParam_x); - - jfieldID fid_pointConfigParam_y = env->GetFieldID(cls_pointConfigParam, "y", "I"); - jint point_y = env->GetIntField(obj_pointConfigParam, fid_pointConfigParam_y); - */ algor_param->points[i].x_ = (int)points[i * 2]; algor_param->points[i].y_ = (int)points[i * 2 + 1]; } @@ -699,6 +686,77 @@ JNIEXPORT jint JNICALL Java_com_objecteye_nativeinterface_TSLAiEngineNativeInter printf(" i %d point (%d %d)\n", i, algor_param->points[i].x_, algor_param->points[i].y_); } break; + case algorithm_type_t::HUMAN_LINGER: + case algorithm_type_t::VEHICLE_ILLEGAL_PARKING: + { + jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "duration", "I"); + jint j_duration = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "min_width", "I"); + jint j_min_width = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "min_height", "I"); + jint j_min_height = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "confidence_threshold", "F"); + jfloat j_confidence_threshold = env->GetFloatField(algorConfigParam_algorInitParam, fid); + + using algor_config_param_type = algor_config_param_behavior; + mTaskParam.algor_config_params[i].algor_init_config_param->algor_param = new algor_config_param_type; + auto algor_param = + (algor_config_param_type *)mTaskParam.algor_config_params[i].algor_init_config_param->algor_param; + + + algor_param->conf_threshold = (float)j_confidence_threshold; + algor_param->minmum_width = std::max(0, (int)j_min_width); + algor_param->minmum_height = std::max(0, (int)j_min_height); + algor_param->duration = std::max(0, (int)j_duration); + + } break; + + case algorithm_type_t::VEHICLE_ILLEGAL_CROSSING_LINE: + case algorithm_type_t::HUMAN_CROSSING_LINE: + case algorithm_type_t::HUMAN_CLIMB: { + + jfieldID fid = env->GetFieldID(cls_AlgorConfigParam, "px1", "I"); + jint j_px1 = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "py1", "I"); + jint j_py1 = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "px2", "I"); + jint j_px2 = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "py2", "I"); + jint j_py2 = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "min_width", "I"); + jint j_min_width = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "min_height", "I"); + jint j_min_height = env->GetIntField(algorConfigParam_algorInitParam, fid); + + fid = env->GetFieldID(cls_AlgorConfigParam, "confidence_threshold", "F"); + jfloat j_confidence_threshold = env->GetFloatField(algorConfigParam_algorInitParam, fid); + + std::printf( + "[%s:%d] point [(%d, %d), (%d, %d)] minimum wh [%d %d] minimum_threshold %.2f\n", + __FILE__, __LINE__, (int)j_px1, (int)j_py1, (int)j_px2, (int)j_py2, (int)j_min_width, (int)j_min_height, (float)j_confidence_threshold); + + using algor_config_param_type = algor_config_param_illegal_crossing_line; + mTaskParam.algor_config_params[i].algor_init_config_param->algor_param = new algor_config_param_type; + auto algor_param = + (algor_config_param_type *)mTaskParam.algor_config_params[i].algor_init_config_param->algor_param; + + algor_param->p1.x_ = (int)j_px1; + algor_param->p1.y_ = (int)j_py1; + algor_param->p2.x_ = (int)j_px2; + algor_param->p2.y_ = (int)j_py2; + algor_param->conf_threshold = (float)j_confidence_threshold; + algor_param->minmum_width = std::max(0, (int)j_min_width); + algor_param->minmum_height = std::max(0, (int)j_min_height); + } break; + default: { fprintf(stderr, "%s:%d Add Task Failed (Invalid algorithm type). \n", __FILE__, __LINE__); code = -1;