diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log new file mode 100644 index 0000000..2991779 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log @@ -0,0 +1,32 @@ +core_num = 30 +chip_num = 1 +phase_num = 283 +pause_phase = 283 +phase_num4 = 168 +phase_loop = 1 +svn_ver = Lynabc_hw3_20240112_1.17.0_0004 +inputs = [(5,0), ] +outputs = [(5,282), ] +input_buf_addr = 0x9b6000000 +input_size = 1228800 +output_buf_addr = 0x9b5ffff80 +output_size = 4 +batch_size = 1 +base_addr = 0x9be000000 +datachain_addr = 0x900000000 +run_mode = 2 +lookup_mbatch = 64 +perf_en = 0 +wdat_en = 0 + +ddr_in_phase1 = -1 +ddr_in_addr1 = 0x8c0000000 +ddr_in_file1 = ../../../../../apu_x/lookup_ddr_addr.bin +ddr_in_len1 = 512 + +ddr_out_phase1 = 282 +ddr_out_addr1 = 0x9c0000000 +ddr_out_file1 = output_ddr.dat +ddr_out_len1 = 504000 + +built_time = "2025/01/13 15:48:59" diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log new file mode 100644 index 0000000..2991779 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log @@ -0,0 +1,32 @@ +core_num = 30 +chip_num = 1 +phase_num = 283 +pause_phase = 283 +phase_num4 = 168 +phase_loop = 1 +svn_ver = Lynabc_hw3_20240112_1.17.0_0004 +inputs = [(5,0), ] +outputs = [(5,282), ] +input_buf_addr = 0x9b6000000 +input_size = 1228800 +output_buf_addr = 0x9b5ffff80 +output_size = 4 +batch_size = 1 +base_addr = 0x9be000000 +datachain_addr = 0x900000000 +run_mode = 2 +lookup_mbatch = 64 +perf_en = 0 +wdat_en = 0 + +ddr_in_phase1 = -1 +ddr_in_addr1 = 0x8c0000000 +ddr_in_file1 = ../../../../../apu_x/lookup_ddr_addr.bin +ddr_in_len1 = 512 + +ddr_out_phase1 = 282 +ddr_out_addr1 = 0x9c0000000 +ddr_out_file1 = output_ddr.dat +ddr_out_len1 = 504000 + +built_time = "2025/01/13 15:48:59" diff --git a/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin new file mode 100644 index 0000000..6494e33 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log new file mode 100644 index 0000000..2991779 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log @@ -0,0 +1,32 @@ +core_num = 30 +chip_num = 1 +phase_num = 283 +pause_phase = 283 +phase_num4 = 168 +phase_loop = 1 +svn_ver = Lynabc_hw3_20240112_1.17.0_0004 +inputs = [(5,0), ] +outputs = [(5,282), ] +input_buf_addr = 0x9b6000000 +input_size = 1228800 +output_buf_addr = 0x9b5ffff80 +output_size = 4 +batch_size = 1 +base_addr = 0x9be000000 +datachain_addr = 0x900000000 +run_mode = 2 +lookup_mbatch = 64 +perf_en = 0 +wdat_en = 0 + +ddr_in_phase1 = -1 +ddr_in_addr1 = 0x8c0000000 +ddr_in_file1 = ../../../../../apu_x/lookup_ddr_addr.bin +ddr_in_len1 = 512 + +ddr_out_phase1 = 282 +ddr_out_addr1 = 0x9c0000000 +ddr_out_file1 = output_ddr.dat +ddr_out_len1 = 504000 + +built_time = "2025/01/13 15:48:59" diff --git a/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin new file mode 100644 index 0000000..6494e33 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/top_graph.json b/models/safe-v5-20241121/Net_0/top_graph.json new file mode 100644 index 0000000..38afa37 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/top_graph.json @@ -0,0 +1,51 @@ +{ + "main": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_concat_output": false + }, + "apu_0": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_abc": "true", + "version": "2024010009" + } +} \ No newline at end of file diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log new file mode 100644 index 0000000..2991779 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log @@ -0,0 +1,32 @@ +core_num = 30 +chip_num = 1 +phase_num = 283 +pause_phase = 283 +phase_num4 = 168 +phase_loop = 1 +svn_ver = Lynabc_hw3_20240112_1.17.0_0004 +inputs = [(5,0), ] +outputs = [(5,282), ] +input_buf_addr = 0x9b6000000 +input_size = 1228800 +output_buf_addr = 0x9b5ffff80 +output_size = 4 +batch_size = 1 +base_addr = 0x9be000000 +datachain_addr = 0x900000000 +run_mode = 2 +lookup_mbatch = 64 +perf_en = 0 +wdat_en = 0 + +ddr_in_phase1 = -1 +ddr_in_addr1 = 0x8c0000000 +ddr_in_file1 = ../../../../../apu_x/lookup_ddr_addr.bin +ddr_in_len1 = 512 + +ddr_out_phase1 = 282 +ddr_out_addr1 = 0x9c0000000 +ddr_out_file1 = output_ddr.dat +ddr_out_len1 = 504000 + +built_time = "2025/01/13 15:48:59" diff --git a/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin new file mode 100644 index 0000000..6494e33 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/top_graph.json b/models/safe-v5-20241121/Net_0/top_graph.json new file mode 100644 index 0000000..38afa37 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/top_graph.json @@ -0,0 +1,51 @@ +{ + "main": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_concat_output": false + }, + "apu_0": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_abc": "true", + "version": "2024010009" + } +} \ No newline at end of file diff --git a/models/safe-v5-20241121/net_params.json b/models/safe-v5-20241121/net_params.json new file mode 100644 index 0000000..cb8ff93 --- /dev/null +++ b/models/safe-v5-20241121/net_params.json @@ -0,0 +1,21 @@ +{ + "version": "2024010009", + "target": "apu", + "is_map": true, + "chip_num": 1, + "net_num": 1, + "parallel_mode": "DP", + "run_batch": 1, + "cpu_arch": "arm", + "cc": "aarch64-linux-gnu-g++", + "file_name": { + "cpu_lib": "deploy_lib.so", + "cpu_graph": "deploy_graph.json", + "cpu_params": "deploy_param.params", + "apu_lib": "apu_lib.bin", + "io_config": "top_graph.json" + }, + "net:": null, + "is_dynamic_shape": false, + "build_mode": "abc" +} \ No newline at end of file diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log new file mode 100644 index 0000000..2991779 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log @@ -0,0 +1,32 @@ +core_num = 30 +chip_num = 1 +phase_num = 283 +pause_phase = 283 +phase_num4 = 168 +phase_loop = 1 +svn_ver = Lynabc_hw3_20240112_1.17.0_0004 +inputs = [(5,0), ] +outputs = [(5,282), ] +input_buf_addr = 0x9b6000000 +input_size = 1228800 +output_buf_addr = 0x9b5ffff80 +output_size = 4 +batch_size = 1 +base_addr = 0x9be000000 +datachain_addr = 0x900000000 +run_mode = 2 +lookup_mbatch = 64 +perf_en = 0 +wdat_en = 0 + +ddr_in_phase1 = -1 +ddr_in_addr1 = 0x8c0000000 +ddr_in_file1 = ../../../../../apu_x/lookup_ddr_addr.bin +ddr_in_len1 = 512 + +ddr_out_phase1 = 282 +ddr_out_addr1 = 0x9c0000000 +ddr_out_file1 = output_ddr.dat +ddr_out_len1 = 504000 + +built_time = "2025/01/13 15:48:59" diff --git a/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin new file mode 100644 index 0000000..6494e33 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/top_graph.json b/models/safe-v5-20241121/Net_0/top_graph.json new file mode 100644 index 0000000..38afa37 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/top_graph.json @@ -0,0 +1,51 @@ +{ + "main": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_concat_output": false + }, + "apu_0": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_abc": "true", + "version": "2024010009" + } +} \ No newline at end of file diff --git a/models/safe-v5-20241121/net_params.json b/models/safe-v5-20241121/net_params.json new file mode 100644 index 0000000..cb8ff93 --- /dev/null +++ b/models/safe-v5-20241121/net_params.json @@ -0,0 +1,21 @@ +{ + "version": "2024010009", + "target": "apu", + "is_map": true, + "chip_num": 1, + "net_num": 1, + "parallel_mode": "DP", + "run_batch": 1, + "cpu_arch": "arm", + "cc": "aarch64-linux-gnu-g++", + "file_name": { + "cpu_lib": "deploy_lib.so", + "cpu_graph": "deploy_graph.json", + "cpu_params": "deploy_param.params", + "apu_lib": "apu_lib.bin", + "io_config": "top_graph.json" + }, + "net:": null, + "is_dynamic_shape": false, + "build_mode": "abc" +} \ No newline at end of file diff --git a/models/safe-v5-20241121/plugin.so b/models/safe-v5-20241121/plugin.so new file mode 100644 index 0000000..e066361 --- /dev/null +++ b/models/safe-v5-20241121/plugin.so Binary files differ diff --git a/app.py b/app.py index 3e6a29e..9bae452 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ sub_obj_instance.objects[i].alarm_threshold = obj.alarm_threshold sub_obj_instance.objects[i].model_code = obj.model_code if obj.range: + # 'x1 y1 x2 y2 x3 y3 x4 y4' range_values = [float(r) for r in obj.range] abs_range = [] for idx, value in enumerate(range_values): @@ -527,8 +528,8 @@ self.init_output_process() - self.frame_step = 3 - self.frame_idx = frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 + self.frame_step = 5 + self.frame_idx = self.frame_step - 1 # 为了处理第0帧,这里不从0开始计数,而是从step-1开始 def init_output_process(self): @@ -676,9 +677,7 @@ cb_data = self.__ipe_queue.take() eos = cb_data.frame.eos self.start_process_time = time.time() - ipe_out_data = self.ipe_process(cb_data) - - self.model_process(ipe_out_data, cb_data) + self.model_process(cb_data) # 这里的cb_data是从视频流解析出来的视频帧 if cancel_flag.value: return @@ -733,42 +732,43 @@ return f'{self.attr.device_id}_{self.attr.output_path}' - def model_process(self, ipe_out_data, cb_data): - # self.frame_idx = (frame_idx + 1) % self.frame_step - # if self.frame_idx == 0: - # # 正常处理 - # else: - # # 跳过处理,直接用上次的box渲染 + def model_process(self, cb_data): + self.frame_idx = (self.frame_idx + 1) % self.frame_step + if self.frame_idx == 0: + # print(f'{self.frame_idx} process') + # 正常处理 + ipe_out_data = self.ipe_process(cb_data) + for model_info in self.model_infos: + apu_output_data = self.apu_process(model_info, ipe_out_data) + self.plugin_process(model_info, apu_output_data, cb_data) - for model_info in self.model_infos: - apu_output_data = self.apu_process(model_info, ipe_out_data) - self.plugin_process(model_info, apu_output_data, cb_data) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].plugin_stream, + show_video_cb, + [cb_data, self.model_infos], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].plugin_stream, - show_video_cb, - [cb_data, self.model_infos], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + # self.merge_plugin_process(cb_data) + self.encode_process(cb_data) - # self.merge_plugin_process(cb_data) - self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - common.print_frame_rate(self.get_channel_info()) + ret = sdk.lyn_stream_add_async_callback( + self.model_infos[-1].apu_stream, + free_to_pool_callback, + [self.ipe_output_mem_pool, ipe_out_data], + ) + common.error_check(ret, "lyn_stream_add_async_callback") - ret = sdk.lyn_stream_add_async_callback( - self.model_infos[-1].apu_stream, - free_to_pool_callback, - [self.ipe_output_mem_pool, ipe_out_data], - ) - common.error_check(ret, "lyn_stream_add_async_callback") + else: + # print(f'{self.frame_idx} draw') + # 跳过ipe apu处理,直接用上次的box渲染 + for model_info in self.model_infos: + self.plugin_draw_process(model_info, cb_data) + self.encode_process(cb_data) + common.print_frame_rate(self.get_channel_info()) - # ret = sdk.lyn_stream_add_async_callback( - # self.model_infos[-1].plugin_stream, - # free_to_pool_callback, - # [cb_data.frame_pool, cb_data.frame.data], - # ) - # common.error_check(ret, "lyn_stream_add_async_callback") def apu_process(self, model_info, ipe_out_data): # 等待IPE处理完成 @@ -857,7 +857,7 @@ ) common.error_check(ret, "lyn_stream_add_async_callback") - def plugin_draw_process(self.model_info, cb_data): + def plugin_draw_process(self,model_info, cb_data): format = int(sdk.lyn_pixel_format_t.LYN_PIX_FMT_NV12) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] @@ -1091,7 +1091,7 @@ common.error_check(ret, "lyn_destroy_context") -def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: +def run_device(device_no:str, input_url: str, output_url:str, device_id: int, model_configs, alarm_interval, threads) -> None: attr = device_process_attr() attr.device_no = device_no attr.url = input_url diff --git a/mock/device_model.json b/mock/device_model.json index 87256a7..0af817b 100644 --- a/mock/device_model.json +++ b/mock/device_model.json @@ -1,100 +1,48 @@ [ { "device_id": 1, - "model_code": "001", + "model_code": "003", "model_name": "yolov5", - "model_path": "models/yolov5s", + "model_path": "models/safe-v5-20241121", "handle_task": "", "objects": [ { - "model_code": "001", - "object_code": 0, - "object_name": "person", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": [0.25,0.25, - 1.0,0.25, - 1.0,1.0, - 0.25,1.0] - }, - { - "model_code": "001", - "object_code": 1, - "object_name": "bicycle", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 41, - "object_name": "cup", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - }, - { - "model_code": "001", - "object_code": 62, - "object_name": "tv", - "conf_threshold": 0.5, - "alarm_threshold": 0, - "range": "" - } - ] - }, - { - "device_id": 1, - "model_code": "002", - "model_name": "yuntai", - "model_path": "models/yuntai", - "handle_task": "", - "objects": [ - { - "model_code": "002", + "model_code": "003", "object_code": 0, "object_name": "人", "conf_threshold": 0.5, - "alarm_threshold": 2, + "alarm_threshold": 0, "range": "" }, { - "model_code": "002", + "model_code": "003", "object_code": 1, - "object_name": "火", + "object_name": "头", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 2, - "object_name": "烟雾", - "conf_threshold": 0.5, - "alarm_threshold": 1, - "range": "" - }, - { - "model_code": "001", - "object_code": 3, "object_name": "安全帽", "conf_threshold": 0.5, - "alarm_threshold": 1, + "alarm_threshold": 0, "range": "" }, { - "model_code": "001", - "object_code": 4, - "object_name": "工装", + "model_code": "003", + "object_code": 3, + "object_name": "摔倒", "conf_threshold": 0.5, "alarm_threshold": 1, "range": "" }, { - "model_code": "001", + "model_code": "003", "object_code": 4, - "object_name": "吸烟", - "conf_threshold": 0.5, + "object_name": "烟头", + "conf_threshold": 0.3, "alarm_threshold": 1, "range": "" } diff --git a/models/safe-v5-20241121/Net_0/apu_0/APU.log b/models/safe-v5-20241121/Net_0/apu_0/APU.log new file mode 100644 index 0000000..f594cfd --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/APU.log @@ -0,0 +1,70 @@ +APU log : model-safe-v5-20241121/Net_0/apu_0/APU.log +APU cmd : /home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 +Git version : Lynabc_hw3_20240112_1.17.0_0004 +APU_LOG_LEVEL: 1 +inGraph : false + +Options: + input = model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin + shape = {1,640,640,3} + dtype = uint8 + input file = + output = ./ + isGen = true + isGolden = false + mode = 0 (name: 0) + type = op + nPresetCores = 0 + isProfiler = false + isRefSvg = 0 + isSliceInfo = false + isClearFilterOut= true + batch = 1 (forcebatch: false) + batchOutputArrange= false + forcecomposite = false + ctrlopMoreCmdSize= -1 + inputprocmode = -1 + serialize = true + isPrimLog = false + strategyMode = -1 + binLoadMode = 0 + broadEnable = true + optFlag = 0 (0x0) + strategyOptFlag= 0 (0x0) + bEnableGlbDDRSave= 0 + ddrMemMode = 0 + broadRxChannel = -1 + forceSyn = 0 + dataCheck = false + enableMoveToDDR= true + scaleMaxEn = 0 + rangeProtect = -1 + infProtect = -1 + sliceStrategy = -1 + maxRetryCount = -1 + paddingMode = 0 + +num of Op nodes: + total[460] const[140] if[0] else[0] endif[0] do[0] while[0] load[0] save[0] multiinput[0] accop[0] userop[0](armop[0]) + loadsize[0.00] loadsizeOnGlb[0.00] + savesize[0.00] savesizeOnGlb[0.00] + +[2025-01-13 15:48:58:914 /apu_share/auto_build/peixu.wang/APU_src/ABC_release/LynABC/temp/LynABC/src/map/map.cpp:112]lx_map is calling. lx_map compile option: + git tag : 0 + APU_LOG_LEVEL: 1 + isNewCmd : true + gen_golden : false + savePDF : false + release : false + logFile : "model-safe-v5-20241121/Net_0/apu_0/APU.log" + batch : 1 + isUseSliceLib: true + + +MC conv info: + nMCConv : 64 + nConvOpMerged: 56 (enable: true) + nFastConv : 1 (enable: true) +lx_map ret 0 - success +lynabc_v0 ret 0 - success +COMPILER: build result is PASS diff --git a/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt new file mode 100644 index 0000000..43e72a6 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/abc_cmd.txt @@ -0,0 +1 @@ +/home/ubuntu/anaconda3/envs/lynxi/lib/python3.6/site-packages/tvm/GenABC -i model-safe-v5-20241121/Net_0/apu_0/apu_lib.bin -s 1,640,640,3 -o ./ -v -1 -r false -g true -e false -x 0 -m 0 -d uint8 -b 1 -c 0 --optFlag 0 --inputprocmode -1 --ctrlopMoreCmdSize -1 --scaleMaxEn 0 diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin new file mode 100644 index 0000000..658f3ed --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_lib.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json new file mode 100644 index 0000000..204f99f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/apu.json @@ -0,0 +1,85 @@ +{ + "apu_x": { + "batch_size": 1, + "cmd_size": 512, + "ddr_config_size": 2608, + "image_size": 2484640, + "inputs": { + "datai0": { + "dtype": "uint8", + "load_data_mode": 0, + "lookup_addr_loop": 0, + "lookup_addr_name": "", + "lookup_addr_size": 0, + "lookup_base_addr": 0, + "name": "input", + "shape": "[1, 640, 640, 3]", + "shape_ex": [ + 1, + 640, + 640, + 3 + ], + "size": 1228800 + } + }, + "n_slice": 1, + "outputs": { + "datao0": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output0", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output0", + "shape": "[1, 3, 6400, 10]", + "shape_ex": [ + 1, + 3, + 6400, + 10 + ], + "size": 192000 + }, + "datao1": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output1", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output1", + "shape": "[1, 3, 1600, 10]", + "shape_ex": [ + 1, + 3, + 1600, + 10 + ], + "size": 48000 + }, + "datao2": { + "dtype": "float16", + "load_data_mode": 0, + "lookup_addr_loop": 32, + "lookup_addr_name": "lookup_output2", + "lookup_addr_size": 8, + "lookup_base_addr": 37580963840, + "name": "output2", + "shape": "[1, 3, 400, 10]", + "shape_ex": [ + 1, + 3, + 400, + 10 + ], + "size": 12000 + } + }, + "p2p_direct": "false", + "sub_image_size": "[2484640]", + "sub_image_size_ex": 2484640, + "total_calc": 20073932000.0 + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin new file mode 100644 index 0000000..0b79fca --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin new file mode 100644 index 0000000..59239c0 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/core.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin new file mode 100644 index 0000000..e0c5cf1 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/ddr_lut.bin diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin new file mode 100644 index 0000000..910ebd5 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lookup_ddr_addr.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl new file mode 100644 index 0000000..13775db --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/lyn__2025-01-13-15-48-59-982962.mdl Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin new file mode 100644 index 0000000..49689ea --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/pi_ddr_config.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json new file mode 100644 index 0000000..cdf449f --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/snn.json @@ -0,0 +1,17 @@ +{ + "Reset": { + "addrBase": 38281412608, + "membranceDat": "./ddr.dat", + "membranceSet": null, + "size": 0, + "snnLookUpAddr": 0 + }, + "description": "this is weight information and membrance information", + "unReset": { + "addrBase": 38386270208, + "size": 0, + "snnLookUpAddr": 0, + "wightDat": "./unReset.dat", + "wightSet": null + } +} diff --git a/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin new file mode 100644 index 0000000..72296bb --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/apu_x/super_cmd.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/case0/net0/chip0/tv_mem/data/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin new file mode 100644 index 0000000..656ae3b --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/dat.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat new file mode 100644 index 0000000..643eaa8 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/input.dat Binary files differ diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/data/100/output_ddr_2.dat diff --git a/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log new file mode 100644 index 0000000..2991779 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/fpga_config.log @@ -0,0 +1,32 @@ +core_num = 30 +chip_num = 1 +phase_num = 283 +pause_phase = 283 +phase_num4 = 168 +phase_loop = 1 +svn_ver = Lynabc_hw3_20240112_1.17.0_0004 +inputs = [(5,0), ] +outputs = [(5,282), ] +input_buf_addr = 0x9b6000000 +input_size = 1228800 +output_buf_addr = 0x9b5ffff80 +output_size = 4 +batch_size = 1 +base_addr = 0x9be000000 +datachain_addr = 0x900000000 +run_mode = 2 +lookup_mbatch = 64 +perf_en = 0 +wdat_en = 0 + +ddr_in_phase1 = -1 +ddr_in_addr1 = 0x8c0000000 +ddr_in_file1 = ../../../../../apu_x/lookup_ddr_addr.bin +ddr_in_len1 = 512 + +ddr_out_phase1 = 282 +ddr_out_addr1 = 0x9c0000000 +ddr_out_file1 = output_ddr.dat +ddr_out_len1 = 504000 + +built_time = "2025/01/13 15:48:59" diff --git a/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin new file mode 100644 index 0000000..6494e33 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/apu_0/prim_graph.bin Binary files differ diff --git a/models/safe-v5-20241121/Net_0/top_graph.json b/models/safe-v5-20241121/Net_0/top_graph.json new file mode 100644 index 0000000..38afa37 --- /dev/null +++ b/models/safe-v5-20241121/Net_0/top_graph.json @@ -0,0 +1,51 @@ +{ + "main": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_concat_output": false + }, + "apu_0": { + "inputs": { + "input": { + "shape": "(1, 640, 640, 3)", + "dtype": "uint8", + "batch": 1 + } + }, + "outputs": { + "apu_0:0": { + "shape": "(1, 3, 6400, 10)", + "dtype": "float16" + }, + "apu_0:1": { + "shape": "(1, 3, 1600, 10)", + "dtype": "float16" + }, + "apu_0:2": { + "shape": "(1, 3, 400, 10)", + "dtype": "float16" + } + }, + "is_abc": "true", + "version": "2024010009" + } +} \ No newline at end of file diff --git a/models/safe-v5-20241121/net_params.json b/models/safe-v5-20241121/net_params.json new file mode 100644 index 0000000..cb8ff93 --- /dev/null +++ b/models/safe-v5-20241121/net_params.json @@ -0,0 +1,21 @@ +{ + "version": "2024010009", + "target": "apu", + "is_map": true, + "chip_num": 1, + "net_num": 1, + "parallel_mode": "DP", + "run_batch": 1, + "cpu_arch": "arm", + "cc": "aarch64-linux-gnu-g++", + "file_name": { + "cpu_lib": "deploy_lib.so", + "cpu_graph": "deploy_graph.json", + "cpu_params": "deploy_param.params", + "apu_lib": "apu_lib.bin", + "io_config": "top_graph.json" + }, + "net:": null, + "is_dynamic_shape": false, + "build_mode": "abc" +} \ No newline at end of file diff --git a/models/safe-v5-20241121/plugin.so b/models/safe-v5-20241121/plugin.so new file mode 100644 index 0000000..e066361 --- /dev/null +++ b/models/safe-v5-20241121/plugin.so Binary files differ diff --git a/models/safe-v5-20241121/plugin.so.1 b/models/safe-v5-20241121/plugin.so.1 new file mode 100644 index 0000000..fa9aa0f --- /dev/null +++ b/models/safe-v5-20241121/plugin.so.1 Binary files differ