Commit 34bd34cc by Yuhaibo

1

parent 08cb52c5
channel1:
annotation_count: 2
annotation_count: 1
areas:
area_1:
height: 20mm
name: 通道1_区域1
area_2:
height: 20mm
name: 通道1_区域2
boxes:
- - 520
- 576
- 288
- - 1289
- 645
- 352
- - 881
- 799
- 192
fixed_bottoms:
- 691
- 785
- 875
fixed_tops:
- 460
- 504
last_updated: '2025-11-29 14:57:04'
- 722
last_updated: '2025-11-29 16:02:16'
channel2:
annotation_count: 1
areas:
......
......@@ -17,23 +17,23 @@ channels:
name: '4'
channel2:
general:
task_id: '1'
task_name: '1'
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\1_1
task_id: '21'
task_name: '321'
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\21_321
channel3:
general:
task_id: '1'
task_name: '1'
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\1_1
task_id: '21'
task_name: '321'
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\21_321
channel4:
general:
task_id: '1'
task_name: '1'
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\1_1
task_id: '21'
task_name: '321'
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\21_321
channel1:
general:
task_id: '1'
task_name: '1'
task_id: '21'
task_name: '321'
area_count: 0
safe_low: 2.0mm
safe_high: 10.0mm
......@@ -41,7 +41,7 @@ channel1:
video_format: AVI
push_address: ''
video_path: ''
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\1_1
save_liquid_data_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\21_321
areas:
area_1: 通道1_区域1
area_heights:
......
task_id: '1'
task_name: '1'
status: 未启动
selected_channels:
- 通道1
- 通道2
- 通道3
- 通道4
created_time: '2025-11-26 19:53:35'
mission_result_folder_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\1_1
task_id: '1'
task_name: test
status: 未启动
selected_channels:
- 通道1
- 通道2
- 通道3
- 通道4
created_time: '2025-11-26 19:46:34'
mission_result_folder_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\1_test
task_id: 2 去
++ /dev/null
task_id: 2 去
task_name:
status: 未启动
selected_channels:
- 通道1
created_time: '2025-11-29 13:30:07'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\2
去_去
task_id: '2'
task_name: test
status: 未启动
selected_channels:
- 通道1
- 通道2
- 通道3
- 通道4
created_time: '2025-11-26 20:01:16'
mission_result_folder_path: d:\restructure\liquid_level_line_detection_system\database\mission_result\2_test
task_id: test
task_name: test
status: 未启动
selected_channels:
- 通道1
created_time: '2025-11-29 15:52:05'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\test_test
task_id: 而且
++ /dev/null
task_id: 而且
task_name:
status: 未启动
selected_channels:
- 通道1
- 通道2
created_time: '2025-11-29 13:08:14'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\而且_啊
task_id: 让穷人
++ /dev/null
task_id: 让穷人
task_name: 阿萨
status: 未启动
selected_channels:
- 通道3
created_time: '2025-11-29 13:07:27'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\让穷人_阿萨
task_id: 阿达
++ /dev/null
task_id: 阿达
task_name: 的撒
status: 未启动
selected_channels:
- 通道2
created_time: '2025-11-29 13:24:17'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\阿达_的撒
This source diff could not be displayed because it is too large. You can view the blob instead.
2025-11-29-12:30:36.054 0.0
++ /dev/null
2025-11-29-12:30:36.054 0.0
2025-11-29-12:30:37.027 0.0
2025-11-29-12:30:37.731 0.0
2025-11-29-12:30:38.163 0.0
2025-11-29-12:30:38.592 0.0
2025-11-29-12:30:38.901 0.0
2025-11-29-12:30:39.458 0.0
2025-11-29-12:30:39.946 0.0
2025-11-29-12:30:40.427 0.0
2025-11-29-12:30:41.023 0.0
2025-11-29-12:30:41.548 0.0
2025-11-29-12:30:42.192 0.0
2025-11-29-12:30:42.995 0.0
2025-11-29-12:30:43.586 0.0
2025-11-29-12:30:44.261 0.0
2025-11-29-12:30:44.954 0.0
2025-11-29-12:30:45.496 0.0
2025-11-29-12:30:46.037 0.0
2025-11-29-12:30:46.650 0.0
2025-11-29-12:30:47.114 0.0
2025-11-29-12:30:47.649 0.0
2025-11-29-12:30:48.126 0.0
2025-11-29-12:30:48.767 0.0
2025-11-29-12:30:49.510 0.0
2025-11-29-12:30:50.161 0.0
2025-11-29-12:30:50.686 0.0
2025-11-29-12:30:51.185 0.0
2025-11-29-12:30:51.663 0.0
2025-11-29-12:30:52.236 0.0
2025-11-29-12:30:52.961 0.0
2025-11-29-12:30:53.554 0.0
2025-11-29-12:30:54.106 0.0
2025-11-29-12:30:54.833 0.0
2025-11-29-12:30:55.311 0.0
2025-11-29-12:30:55.732 0.0
2025-11-29-12:30:56.227 0.0
2025-11-29-12:30:56.693 0.0
2025-11-29-12:30:57.229 0.0
2025-11-29-12:30:57.734 0.0
2025-11-29-12:30:58.235 0.0
2025-11-29-12:30:58.655 0.0
2025-11-29-12:30:59.059 0.0
2025-11-29-12:30:59.613 0.0
2025-11-29-12:31:00.097 0.0
2025-11-29-12:31:00.694 0.0
2025-11-29-12:31:01.348 0.0
2025-11-29-12:31:01.856 0.0
2025-11-29-12:31:02.313 0.0
2025-11-29-12:31:02.773 0.0
2025-11-29-12:31:03.342 0.0
2025-11-29-12:31:03.916 0.0
2025-11-29-12:31:04.475 0.0
2025-11-29-12:31:05.153 0.0
2025-11-29-12:31:05.782 0.0
2025-11-29-12:31:06.328 0.0
2025-11-29-12:31:06.878 0.0
2025-11-29-12:31:07.429 0.0
2025-11-29-12:31:07.972 0.0
2025-11-29-12:31:08.757 0.0
2025-11-29-12:31:09.437 0.0
2025-11-29-12:31:10.243 0.0
2025-11-29-12:31:10.925 0.0
2025-11-29-12:31:11.426 0.0
2025-11-29-12:31:12.020 0.0
2025-11-29-12:31:12.547 0.0
2025-11-29-12:31:13.109 0.0
2025-11-29-12:31:13.584 0.0
2025-11-29-12:31:14.047 0.0
2025-11-29-12:31:14.568 0.0
2025-11-29-12:31:14.967 0.0
2025-11-29-12:31:15.458 0.0
2025-11-29-12:31:15.966 0.0
2025-11-29-12:31:16.571 0.0
2025-11-29-12:31:17.175 0.0
2025-11-29-12:31:17.713 0.0
2025-11-29-12:31:18.221 0.0
2025-11-29-12:31:18.747 0.0
2025-11-29-12:31:19.176 0.0
2025-11-29-12:31:19.733 0.0
2025-11-29-12:31:20.330 0.0
2025-11-29-12:31:20.966 0.0
2025-11-29-12:31:21.478 0.0
2025-11-29-12:31:21.932 0.0
2025-11-29-12:31:22.396 0.0
2025-11-29-12:31:22.882 0.0
2025-11-29-12:31:23.344 20.0
2025-11-29-12:31:23.980 0.0
2025-11-29-12:31:24.526 0.0
2025-11-29-12:31:25.034 0.0
2025-11-29-12:31:25.577 0.0
2025-11-29-12:31:26.278 0.0
2025-11-29-12:31:27.181 0.0
2025-11-29-12:31:27.913 20.0
2025-11-29-12:31:28.636 0.0
2025-11-29-12:31:29.283 0.0
2025-11-29-12:31:30.089 0.0
2025-11-29-12:31:30.856 0.0
2025-11-29-12:31:31.381 0.0
2025-11-29-12:31:31.927 0.0
2025-11-29-12:31:32.939 0.0
2025-11-29-12:31:34.619 0.0
2025-11-29-12:31:35.636 0.0
2025-11-29-12:31:36.760 0.0
2025-11-29-12:31:37.689 0.0
2025-11-29-12:31:38.370 0.0
2025-11-29-12:31:39.363 0.0
2025-11-29-12:31:40.051 0.0
2025-11-29-12:31:40.683 0.0
2025-11-29-12:31:41.491 0.0
2025-11-29-12:31:42.171 0.0
2025-11-29-12:31:42.888 0.0
2025-11-29-12:31:43.487 0.0
2025-11-29-12:31:44.027 0.0
2025-11-29-12:31:44.786 0.0
2025-11-29-12:31:45.581 0.0
2025-11-29-12:31:46.252 0.0
2025-11-29-12:31:46.856 0.0
2025-11-29-12:31:47.453 0.0
2025-11-29-12:31:48.316 0.0
2025-11-29-12:31:49.272 0.0
2025-11-29-12:31:50.206 0.0
2025-11-29-12:31:50.930 0.0
2025-11-29-12:31:51.607 0.0
2025-11-29-12:31:52.379 0.0
2025-11-29-12:31:53.766 0.0
2025-11-29-12:31:54.821 0.0
2025-11-29-12:31:55.809 0.0
2025-11-29-12:31:56.405 0.0
2025-11-29-12:31:57.184 0.0
2025-11-29-12:31:58.666 0.0
2025-11-29-12:31:59.676 0.0
2025-11-29-12:32:00.435 0.0
2025-11-29-12:32:01.259 0.0
2025-11-29-12:32:02.048 0.0
2025-11-29-12:32:02.836 0.0
2025-11-29-12:32:03.524 0.0
2025-11-29-12:32:04.198 0.0
2025-11-29-12:32:05.073 0.0
2025-11-29-12:32:05.978 0.0
2025-11-29-12:32:06.677 0.0
2025-11-29-12:32:07.444 0.0
2025-11-29-12:32:08.373 0.0
2025-11-29-12:32:09.145 0.0
2025-11-29-12:32:09.956 0.0
2025-11-29-12:32:10.987 0.0
2025-11-29-12:32:11.955 0.0
2025-11-29-12:32:12.836 0.0
2025-11-29-12:32:13.769 0.0
2025-11-29-12:32:14.681 0.0
2025-11-29-12:32:16.103 0.0
2025-11-29-12:32:17.086 0.0
2025-11-29-12:32:18.033 0.0
2025-11-29-12:32:18.823 0.0
2025-11-29-12:32:19.492 0.0
2025-11-29-12:32:20.225 0.0
2025-11-29-12:32:20.961 0.0
2025-11-29-12:32:21.693 0.0
2025-11-29-12:32:22.917 0.0
2025-11-29-12:32:23.734 0.0
2025-11-29-12:32:24.475 0.0
2025-11-29-12:32:25.421 0.0
2025-11-29-12:32:26.852 0.0
2025-11-29-12:32:27.658 0.0
2025-11-29-12:32:28.388 0.0
2025-11-29-12:32:29.580 0.0
2025-11-29-12:32:30.341 0.0
2025-11-29-12:32:31.183 0.0
2025-11-29-12:32:32.305 0.0
2025-11-29-12:32:33.205 0.0
2025-11-29-12:32:33.998 0.0
2025-11-29-12:32:34.563 0.0
2025-11-29-12:32:35.397 0.0
2025-11-29-12:32:36.329 0.0
2025-11-29-12:32:37.105 0.0
2025-11-29-12:32:37.796 0.0
2025-11-29-12:30:22.255 0.0
++ /dev/null
2025-11-29-12:30:22.255 0.0
2025-11-29-12:30:23.046 0.0
2025-11-29-12:30:23.746 0.0
2025-11-29-12:30:24.235 0.0
2025-11-29-12:30:24.721 0.0
2025-11-29-12:30:25.011 0.0
2025-11-29-12:30:25.415 0.0
2025-11-29-12:30:25.765 0.0
2025-11-29-12:30:26.151 0.0
2025-11-29-12:30:26.604 0.0
2025-11-29-12:30:26.959 0.0
2025-11-29-12:30:27.304 0.0
2025-11-29-12:30:27.600 0.0
2025-11-29-12:30:28.024 0.0
2025-11-29-12:30:28.485 0.0
2025-11-29-12:30:29.003 0.0
2025-11-29-12:30:29.473 0.0
2025-11-29-12:30:30.008 0.0
2025-11-29-12:30:30.452 0.0
2025-11-29-12:30:31.055 0.0
2025-11-29-12:30:31.599 0.0
2025-11-29-12:30:32.138 0.0
2025-11-29-12:30:32.697 0.0
2025-11-29-12:30:33.350 0.0
2025-11-29-12:30:33.887 0.0
2025-11-29-12:30:34.404 0.0
2025-11-29-12:30:34.969 0.0
2025-11-29-12:30:36.054 0.0
2025-11-29-12:30:37.027 0.0
2025-11-29-12:30:37.729 0.0
2025-11-29-12:30:38.163 0.0
2025-11-29-12:30:38.592 0.0
2025-11-29-12:30:38.901 0.0
2025-11-29-12:30:39.458 0.0
2025-11-29-12:30:39.945 0.0
2025-11-29-12:30:40.427 0.0
2025-11-29-12:30:41.023 0.0
2025-11-29-12:30:41.548 19.1
2025-11-29-12:30:42.192 0.0
2025-11-29-12:30:42.994 0.0
2025-11-29-12:30:43.586 0.0
2025-11-29-12:30:44.261 0.0
2025-11-29-12:30:44.962 0.0
2025-11-29-12:30:45.496 0.0
2025-11-29-12:30:46.035 20.0
2025-11-29-12:30:46.658 20.0
2025-11-29-12:30:47.114 20.0
2025-11-29-12:30:47.649 0.0
2025-11-29-12:30:48.126 0.0
2025-11-29-12:30:48.767 0.0
2025-11-29-12:30:49.510 0.0
2025-11-29-12:30:50.161 0.0
2025-11-29-12:30:50.686 0.0
2025-11-29-12:30:51.185 0.0
2025-11-29-12:30:51.663 0.0
2025-11-29-12:30:52.236 0.0
2025-11-29-12:30:52.961 0.0
2025-11-29-12:30:53.554 0.0
2025-11-29-12:30:54.106 0.0
2025-11-29-12:30:54.833 0.0
2025-11-29-12:30:55.311 0.0
2025-11-29-12:30:55.732 0.0
2025-11-29-12:30:56.227 0.0
2025-11-29-12:30:56.693 0.0
2025-11-29-12:30:57.229 0.0
2025-11-29-12:30:57.734 0.0
2025-11-29-12:30:58.235 0.0
2025-11-29-12:30:58.655 0.0
2025-11-29-12:30:59.059 0.0
2025-11-29-12:30:59.613 0.0
2025-11-29-12:31:00.097 0.0
2025-11-29-12:31:00.694 0.0
2025-11-29-12:31:01.348 0.0
2025-11-29-12:31:01.856 0.0
2025-11-29-12:31:02.313 0.0
2025-11-29-12:31:02.773 0.0
2025-11-29-12:31:03.342 0.0
2025-11-29-12:31:03.916 0.0
2025-11-29-12:31:04.475 0.0
2025-11-29-12:31:05.153 0.0
2025-11-29-12:31:05.783 0.0
2025-11-29-12:31:06.328 0.0
2025-11-29-12:31:06.878 0.0
2025-11-29-12:31:07.429 0.0
2025-11-29-12:31:07.972 0.0
2025-11-29-12:31:08.757 0.0
2025-11-29-12:31:09.424 0.0
2025-11-29-12:31:10.243 0.0
2025-11-29-12:31:10.925 0.0
2025-11-29-12:31:11.426 0.0
2025-11-29-12:31:12.020 0.0
2025-11-29-12:31:12.547 0.0
2025-11-29-12:31:13.109 0.0
2025-11-29-12:31:13.584 0.0
2025-11-29-12:31:14.047 0.0
2025-11-29-12:31:14.568 0.0
2025-11-29-12:31:14.967 0.0
2025-11-29-12:31:15.458 0.0
2025-11-29-12:31:15.966 0.0
2025-11-29-12:31:16.571 0.0
2025-11-29-12:31:17.175 0.0
2025-11-29-12:31:17.713 0.0
2025-11-29-12:31:18.221 0.0
2025-11-29-12:31:18.747 20.0
2025-11-29-12:31:19.176 0.0
2025-11-29-12:31:19.733 0.0
2025-11-29-12:31:20.330 0.0
2025-11-29-12:31:20.966 0.0
2025-11-29-12:31:21.485 0.0
2025-11-29-12:31:21.932 0.0
2025-11-29-12:31:22.403 0.0
2025-11-29-12:31:22.876 0.0
2025-11-29-12:31:23.344 0.0
2025-11-29-12:31:23.980 0.0
2025-11-29-12:31:24.521 0.0
2025-11-29-12:31:25.034 0.0
2025-11-29-12:31:25.577 20.0
2025-11-29-12:31:26.278 20.0
2025-11-29-12:31:27.181 0.0
2025-11-29-12:31:27.913 0.0
2025-11-29-12:31:28.636 0.0
2025-11-29-12:31:29.283 0.0
2025-11-29-12:31:30.089 0.0
2025-11-29-12:31:30.856 0.0
2025-11-29-12:31:31.381 0.0
2025-11-29-12:31:31.927 0.0
2025-11-29-12:31:32.939 0.0
2025-11-29-12:31:34.619 0.0
2025-11-29-12:31:35.636 0.0
2025-11-29-12:31:36.762 0.0
2025-11-29-12:31:37.690 0.0
2025-11-29-12:31:38.370 0.0
2025-11-29-12:31:39.363 0.0
2025-11-29-12:31:40.051 0.0
2025-11-29-12:31:40.684 0.0
2025-11-29-12:31:41.491 0.0
2025-11-29-12:31:42.171 0.0
2025-11-29-12:31:42.888 0.0
2025-11-29-12:31:43.485 0.0
2025-11-29-12:31:44.034 0.0
2025-11-29-12:31:44.786 0.0
2025-11-29-12:31:45.581 0.0
2025-11-29-12:31:46.247 0.0
2025-11-29-12:31:46.856 0.0
2025-11-29-12:31:47.453 0.0
2025-11-29-12:31:48.316 0.0
2025-11-29-12:31:49.272 0.0
2025-11-29-12:31:50.206 0.0
2025-11-29-12:31:50.930 0.0
2025-11-29-12:31:51.607 0.0
2025-11-29-12:31:52.379 0.0
2025-11-29-12:31:53.766 0.0
2025-11-29-12:31:54.821 0.0
2025-11-29-12:31:55.809 0.0
2025-11-29-12:31:56.405 0.0
2025-11-29-12:31:57.184 0.0
2025-11-29-12:31:58.666 0.0
2025-11-29-12:31:59.676 0.0
2025-11-29-12:32:00.435 0.0
2025-11-29-12:32:01.259 20.0
2025-11-29-12:32:02.048 0.0
2025-11-29-12:32:02.836 0.0
2025-11-29-12:32:03.524 0.0
2025-11-29-12:32:04.202 0.0
2025-11-29-12:32:05.073 0.0
2025-11-29-12:32:05.978 0.0
2025-11-29-12:32:06.677 0.0
2025-11-29-12:32:07.444 0.0
2025-11-29-12:32:08.373 0.0
2025-11-29-12:32:09.145 0.0
2025-11-29-12:32:09.956 0.0
2025-11-29-12:32:10.986 0.0
2025-11-29-12:32:11.955 0.0
2025-11-29-12:32:12.842 0.0
2025-11-29-12:32:13.768 0.0
2025-11-29-12:32:14.692 0.0
2025-11-29-12:32:16.103 0.0
2025-11-29-12:32:17.086 0.0
2025-11-29-12:32:18.032 0.0
2025-11-29-12:32:18.823 0.0
2025-11-29-12:32:19.492 0.0
2025-11-29-12:32:20.225 0.0
2025-11-29-12:32:20.961 0.0
2025-11-29-12:32:21.693 0.0
2025-11-29-12:32:22.917 0.0
2025-11-29-12:32:23.734 0.0
2025-11-29-12:32:24.475 0.0
2025-11-29-12:32:25.421 0.0
2025-11-29-12:32:26.852 0.0
2025-11-29-12:32:27.658 0.0
2025-11-29-12:32:28.388 0.0
2025-11-29-12:32:29.579 0.0
2025-11-29-12:32:30.341 0.0
2025-11-29-12:32:31.183 20.0
2025-11-29-12:32:32.305 0.0
2025-11-29-12:32:33.205 0.0
2025-11-29-12:32:33.998 0.0
2025-11-29-12:32:34.561 0.0
2025-11-29-12:32:35.397 0.0
2025-11-29-12:32:36.329 0.0
2025-11-29-12:32:37.105 0.0
2025-11-29-12:32:37.796 0.0
2025-11-29-16:00:04.407 15.4
2025-11-29-16:00:04.407 15.4
2025-11-29-16:00:04.445 16.0
2025-11-29-16:00:04.640 16.2
2025-11-29-16:00:04.837 16.0
2025-11-29-16:00:05.049 16.8
2025-11-29-16:00:05.251 16.5
2025-11-29-16:00:05.449 15.1
2025-11-29-16:00:05.644 15.1
2025-11-29-16:00:05.846 15.2
2025-11-29-16:00:06.054 15.4
2025-11-29-16:00:06.257 15.7
2025-11-29-16:00:06.449 15.9
2025-11-29-16:00:06.658 15.7
2025-11-29-16:00:06.860 16.0
2025-11-29-16:00:07.054 15.5
2025-11-29-16:00:07.266 17.0
2025-11-29-16:00:07.463 17.1
2025-11-29-16:00:07.660 16.8
2025-11-29-16:00:07.870 17.0
2025-11-29-16:00:08.073 16.5
2025-11-29-16:00:08.270 16.6
2025-11-29-13:09:43.026 0.0
2025-11-29-13:09:43.026 0.0
......@@ -9,3 +9,251 @@
2025-11-29-13:09:44.468 15.7
2025-11-29-13:09:44.675 0.0
2025-11-29-13:09:44.876 15.7
2025-11-29-15:48:08.468 0.0
2025-11-29-15:48:08.885 0.0
2025-11-29-15:48:09.053 0.0
2025-11-29-15:48:09.321 0.0
2025-11-29-15:48:09.465 0.0
2025-11-29-15:48:09.653 0.0
2025-11-29-15:48:09.876 0.0
2025-11-29-15:48:10.058 0.0
2025-11-29-15:48:10.326 0.0
2025-11-29-15:48:10.472 0.0
2025-11-29-15:48:10.653 0.0
2025-11-29-15:48:10.905 0.0
2025-11-29-15:48:11.121 0.0
2025-11-29-15:48:11.351 0.0
2025-11-29-15:48:11.495 0.0
2025-11-29-15:48:11.671 0.0
2025-11-29-15:48:11.854 0.0
2025-11-29-15:48:12.104 0.0
2025-11-29-15:48:12.308 0.0
2025-11-29-15:48:12.474 0.0
2025-11-29-15:48:12.872 0.0
2025-11-29-15:48:13.043 0.0
2025-11-29-15:48:13.221 0.0
2025-11-29-15:48:13.428 0.0
2025-11-29-15:48:13.618 0.0
2025-11-29-15:48:13.867 0.0
2025-11-29-15:48:14.050 0.0
2025-11-29-15:48:14.279 0.0
2025-11-29-15:48:14.626 0.0
2025-11-29-15:48:14.787 0.0
2025-11-29-15:48:15.016 0.0
2025-11-29-15:48:15.210 0.0
2025-11-29-15:48:15.335 0.0
2025-11-29-15:48:15.539 0.0
2025-11-29-15:48:15.715 0.0
2025-11-29-15:48:15.982 0.0
2025-11-29-15:48:16.192 0.0
2025-11-29-15:48:16.368 0.0
2025-11-29-15:48:16.575 0.0
2025-11-29-15:48:16.766 0.0
2025-11-29-15:48:16.957 0.0
2025-11-29-15:48:17.176 0.0
2025-11-29-15:48:17.370 0.0
2025-11-29-15:48:17.585 0.0
2025-11-29-15:48:17.764 0.0
2025-11-29-15:48:17.976 0.0
2025-11-29-15:48:18.209 0.0
2025-11-29-15:48:18.383 0.0
2025-11-29-15:48:18.648 0.0
2025-11-29-15:48:18.782 0.0
2025-11-29-15:48:18.974 0.0
2025-11-29-15:48:19.224 0.0
2025-11-29-15:48:19.379 0.0
2025-11-29-15:48:19.610 0.0
2025-11-29-15:48:19.788 0.0
2025-11-29-15:48:20.004 0.0
2025-11-29-15:48:20.211 0.0
2025-11-29-15:48:20.404 0.0
2025-11-29-15:48:20.597 0.0
2025-11-29-15:48:20.877 0.0
2025-11-29-15:48:21.010 0.0
2025-11-29-15:48:21.222 0.0
2025-11-29-15:48:21.422 0.0
2025-11-29-15:48:21.622 0.0
2025-11-29-15:48:21.846 0.0
2025-11-29-15:48:22.040 0.0
2025-11-29-15:48:22.261 0.0
2025-11-29-15:48:22.439 0.0
2025-11-29-15:48:22.682 0.0
2025-11-29-15:48:22.986 0.0
2025-11-29-15:48:23.180 0.0
2025-11-29-15:48:23.330 0.0
2025-11-29-15:48:23.484 0.0
2025-11-29-15:48:23.687 0.0
2025-11-29-15:48:23.907 0.0
2025-11-29-15:48:24.080 0.0
2025-11-29-15:48:24.308 0.0
2025-11-29-15:48:24.511 0.0
2025-11-29-15:48:24.700 0.0
2025-11-29-15:48:24.959 0.0
2025-11-29-15:48:25.151 0.0
2025-11-29-15:48:25.317 0.0
2025-11-29-15:48:25.532 0.0
2025-11-29-15:48:25.710 0.0
2025-11-29-15:48:25.930 0.0
2025-11-29-15:48:26.139 0.0
2025-11-29-15:48:26.449 0.0
2025-11-29-15:48:26.639 0.0
2025-11-29-15:48:26.848 0.0
2025-11-29-15:48:27.027 0.0
2025-11-29-15:48:27.263 0.0
2025-11-29-15:48:27.450 0.0
2025-11-29-15:48:27.637 0.0
2025-11-29-15:48:27.834 0.0
2025-11-29-15:48:28.034 0.0
2025-11-29-15:48:28.248 0.0
2025-11-29-15:48:28.436 0.0
2025-11-29-15:48:28.660 0.0
2025-11-29-15:48:28.909 0.0
2025-11-29-15:48:29.223 0.0
2025-11-29-15:48:29.411 0.0
2025-11-29-15:48:29.610 0.0
2025-11-29-15:48:29.849 0.0
2025-11-29-15:48:30.017 0.0
2025-11-29-15:48:30.215 0.0
2025-11-29-15:48:30.447 0.0
2025-11-29-15:48:30.648 0.0
2025-11-29-15:48:30.865 0.0
2025-11-29-15:48:31.054 0.0
2025-11-29-15:48:31.386 0.0
2025-11-29-15:48:31.569 0.0
2025-11-29-15:48:31.788 0.0
2025-11-29-15:48:31.993 0.0
2025-11-29-15:48:32.170 0.0
2025-11-29-15:48:32.395 0.0
2025-11-29-15:48:32.594 0.0
2025-11-29-15:48:32.775 0.0
2025-11-29-15:48:32.992 0.0
2025-11-29-15:48:33.233 0.0
2025-11-29-15:48:33.409 0.0
2025-11-29-15:48:33.621 0.0
2025-11-29-15:48:33.842 0.0
2025-11-29-15:48:34.046 0.0
2025-11-29-15:48:34.215 0.0
2025-11-29-15:48:34.423 0.0
2025-11-29-15:48:34.671 0.0
2025-11-29-15:48:34.857 0.0
2025-11-29-15:48:35.066 0.0
2025-11-29-15:48:35.325 0.0
2025-11-29-15:48:35.526 0.0
2025-11-29-15:48:35.724 0.0
2025-11-29-15:48:35.925 0.0
2025-11-29-15:48:36.124 0.0
2025-11-29-15:48:36.345 0.0
2025-11-29-15:48:36.538 0.0
2025-11-29-15:48:36.755 0.0
2025-11-29-15:48:36.959 0.0
2025-11-29-15:48:37.190 0.0
2025-11-29-15:48:37.408 0.0
2025-11-29-15:48:37.631 0.0
2025-11-29-15:48:37.855 0.0
2025-11-29-15:48:38.048 0.0
2025-11-29-15:48:38.261 0.0
2025-11-29-15:48:38.451 0.0
2025-11-29-15:48:38.886 0.0
2025-11-29-15:48:39.098 0.0
2025-11-29-15:48:39.332 0.0
2025-11-29-15:48:39.543 0.0
2025-11-29-15:48:39.741 0.0
2025-11-29-15:48:39.963 0.0
2025-11-29-15:48:40.146 0.0
2025-11-29-15:48:40.379 0.0
2025-11-29-15:48:40.600 0.0
2025-11-29-15:48:40.845 0.0
2025-11-29-15:48:41.032 0.0
2025-11-29-15:48:41.264 0.0
2025-11-29-15:48:41.639 0.0
2025-11-29-15:48:41.855 0.0
2025-11-29-15:48:42.048 0.0
2025-11-29-15:48:42.253 0.0
2025-11-29-15:48:42.448 0.0
2025-11-29-15:48:42.644 0.0
2025-11-29-15:48:42.849 0.0
2025-11-29-15:48:43.044 0.0
2025-11-29-15:48:43.286 0.0
2025-11-29-15:48:43.491 0.0
2025-11-29-15:48:43.688 0.0
2025-11-29-15:48:43.894 0.0
2025-11-29-15:48:44.110 0.0
2025-11-29-15:48:44.338 0.0
2025-11-29-15:48:44.549 0.0
2025-11-29-15:48:44.754 0.0
2025-11-29-15:48:44.986 0.0
2025-11-29-15:48:45.190 0.0
2025-11-29-15:48:45.385 0.0
2025-11-29-15:48:45.623 0.0
2025-11-29-15:48:45.861 0.0
2025-11-29-15:48:46.063 0.0
2025-11-29-15:48:46.279 0.0
2025-11-29-15:48:46.506 0.0
2025-11-29-15:48:46.894 0.0
2025-11-29-15:48:47.125 0.0
2025-11-29-15:48:47.323 0.0
2025-11-29-15:48:47.519 0.0
2025-11-29-15:48:47.720 0.0
2025-11-29-15:48:47.919 0.0
2025-11-29-15:48:48.121 0.0
2025-11-29-15:48:48.333 0.0
2025-11-29-15:48:48.534 0.0
2025-11-29-15:48:48.823 0.0
2025-11-29-15:48:49.073 0.0
2025-11-29-15:48:49.313 0.0
2025-11-29-15:48:49.482 0.0
2025-11-29-15:48:49.769 0.0
2025-11-29-15:48:49.971 0.0
2025-11-29-15:48:50.189 0.0
2025-11-29-15:48:50.432 0.0
2025-11-29-15:48:50.658 0.0
2025-11-29-15:48:50.896 0.0
2025-11-29-15:48:51.198 0.0
2025-11-29-15:48:51.550 0.0
2025-11-29-15:48:51.779 0.0
2025-11-29-15:48:52.003 0.0
2025-11-29-15:48:52.186 0.0
2025-11-29-15:48:52.414 0.0
2025-11-29-15:48:52.701 0.0
2025-11-29-15:48:52.918 0.0
2025-11-29-15:48:53.125 0.0
2025-11-29-15:48:53.335 0.0
2025-11-29-15:48:53.543 0.0
2025-11-29-15:48:53.770 0.0
2025-11-29-15:48:53.981 0.0
2025-11-29-15:48:54.182 0.0
2025-11-29-15:48:54.395 0.0
2025-11-29-15:48:54.620 0.0
2025-11-29-15:48:54.816 0.0
2025-11-29-15:48:55.079 0.0
2025-11-29-15:48:55.301 0.0
2025-11-29-15:48:55.635 0.0
2025-11-29-15:48:56.009 0.0
2025-11-29-15:48:56.241 0.0
2025-11-29-15:48:56.448 0.0
2025-11-29-15:48:56.663 0.0
2025-11-29-15:48:56.904 0.0
2025-11-29-15:48:57.136 0.0
2025-11-29-15:48:57.357 0.0
2025-11-29-15:48:57.611 0.0
2025-11-29-15:48:57.879 0.0
2025-11-29-15:48:58.124 0.0
2025-11-29-15:48:58.365 0.0
2025-11-29-15:48:58.643 0.0
2025-11-29-15:48:59.010 0.0
2025-11-29-15:48:59.397 0.0
2025-11-29-15:48:59.915 0.0
2025-11-29-15:49:00.425 0.0
2025-11-29-15:49:00.891 0.0
2025-11-29-15:49:01.444 0.0
2025-11-29-15:49:02.002 0.0
2025-11-29-15:49:02.568 0.0
2025-11-29-15:49:03.130 0.0
2025-11-29-15:49:03.615 0.0
2025-11-29-15:49:04.168 0.0
2025-11-29-15:49:04.880 0.0
2025-11-29-15:49:05.693 0.0
2025-11-29-15:49:06.530 0.0
2025-11-29-15:49:07.323 0.0
2025-11-29-15:49:07.844 0.0
2025-11-29-15:49:08.416 0.0
2025-11-29-15:48:08.468 0.0
2025-11-29-15:48:08.468 0.0
2025-11-29-15:48:08.885 17.1
2025-11-29-15:48:09.053 15.5
2025-11-29-15:48:09.321 15.4
2025-11-29-15:48:09.465 0.0
2025-11-29-15:48:09.653 0.0
2025-11-29-15:48:09.876 0.0
2025-11-29-15:48:10.058 0.0
2025-11-29-15:48:10.326 0.0
2025-11-29-15:48:10.472 0.0
2025-11-29-15:48:10.653 0.0
2025-11-29-15:48:10.905 0.0
2025-11-29-15:48:11.121 0.0
2025-11-29-15:48:11.351 0.0
2025-11-29-15:48:11.495 0.0
2025-11-29-15:48:11.671 0.0
2025-11-29-15:48:11.854 0.0
2025-11-29-15:48:12.104 0.0
2025-11-29-15:48:12.308 0.0
2025-11-29-15:48:12.474 0.0
2025-11-29-15:48:12.872 0.0
2025-11-29-15:48:13.043 0.0
2025-11-29-15:48:13.221 0.0
2025-11-29-15:48:13.428 0.0
2025-11-29-15:48:13.618 0.0
2025-11-29-15:48:13.867 0.0
2025-11-29-15:48:14.050 0.0
2025-11-29-15:48:14.279 0.0
2025-11-29-15:48:14.626 0.0
2025-11-29-15:48:14.787 0.0
2025-11-29-15:48:15.016 0.0
2025-11-29-15:48:15.210 0.0
2025-11-29-15:48:15.335 0.0
2025-11-29-15:48:15.539 0.0
2025-11-29-15:48:15.715 0.0
2025-11-29-15:48:15.982 0.0
2025-11-29-15:48:16.192 0.0
2025-11-29-15:48:16.368 0.0
2025-11-29-15:48:16.575 0.0
2025-11-29-15:48:16.766 0.0
2025-11-29-15:48:16.957 0.0
2025-11-29-15:48:17.176 0.0
2025-11-29-15:48:17.370 15.9
2025-11-29-15:48:17.585 0.0
2025-11-29-15:48:17.764 15.5
2025-11-29-15:48:17.976 15.4
2025-11-29-15:48:18.209 0.0
2025-11-29-15:48:18.383 0.0
2025-11-29-15:48:18.648 0.0
2025-11-29-15:48:18.782 0.0
2025-11-29-15:48:18.974 0.0
2025-11-29-15:48:19.224 17.7
2025-11-29-15:48:19.379 0.0
2025-11-29-15:48:19.610 0.0
2025-11-29-15:48:19.788 0.0
2025-11-29-15:48:20.004 0.0
2025-11-29-15:48:20.211 0.0
2025-11-29-15:48:20.404 0.0
2025-11-29-15:48:20.597 0.0
2025-11-29-15:48:20.877 0.0
2025-11-29-15:48:21.010 0.0
2025-11-29-15:48:21.222 0.0
2025-11-29-15:48:21.422 15.5
2025-11-29-15:48:21.622 0.0
2025-11-29-15:48:21.846 0.0
2025-11-29-15:48:22.040 0.0
2025-11-29-15:48:22.261 0.0
2025-11-29-15:48:22.439 0.0
2025-11-29-15:48:22.682 0.0
2025-11-29-15:48:22.986 0.0
2025-11-29-15:48:23.180 0.0
2025-11-29-15:48:23.330 0.0
2025-11-29-15:48:23.484 0.0
2025-11-29-15:48:23.687 0.0
2025-11-29-15:48:23.907 0.0
2025-11-29-15:48:24.080 0.0
2025-11-29-15:48:24.308 0.0
2025-11-29-15:48:24.511 0.0
2025-11-29-15:48:24.700 0.0
2025-11-29-15:48:24.959 0.0
2025-11-29-15:48:25.151 0.0
2025-11-29-15:48:25.317 0.0
2025-11-29-15:48:25.532 0.0
2025-11-29-15:48:25.710 0.0
2025-11-29-15:48:25.930 17.7
2025-11-29-15:48:26.139 18.0
2025-11-29-15:48:26.449 16.7
2025-11-29-15:48:26.639 0.0
2025-11-29-15:48:26.848 0.0
2025-11-29-15:48:27.027 0.0
2025-11-29-15:48:27.263 0.0
2025-11-29-15:48:27.450 0.0
2025-11-29-15:48:27.637 0.0
2025-11-29-15:48:27.834 0.0
2025-11-29-15:48:28.034 0.0
2025-11-29-15:48:28.248 0.0
2025-11-29-15:48:28.436 0.0
2025-11-29-15:48:28.660 0.0
2025-11-29-15:48:28.909 0.0
2025-11-29-15:48:29.223 0.0
2025-11-29-15:48:29.411 0.0
2025-11-29-15:48:29.610 0.0
2025-11-29-15:48:29.849 0.0
2025-11-29-15:48:30.017 0.0
2025-11-29-15:48:30.215 0.0
2025-11-29-15:48:30.447 0.0
2025-11-29-15:48:30.648 0.0
2025-11-29-15:48:30.865 0.0
2025-11-29-15:48:31.054 0.0
2025-11-29-15:48:31.386 0.0
2025-11-29-15:48:31.569 0.0
2025-11-29-15:48:31.788 0.0
2025-11-29-15:48:31.993 0.0
2025-11-29-15:48:32.170 0.0
2025-11-29-15:48:32.395 0.0
2025-11-29-15:48:32.594 0.0
2025-11-29-15:48:32.775 0.0
2025-11-29-15:48:32.992 0.0
2025-11-29-15:48:33.233 0.0
2025-11-29-15:48:33.409 0.0
2025-11-29-15:48:33.621 0.0
2025-11-29-15:48:33.842 0.0
2025-11-29-15:48:34.046 0.0
2025-11-29-15:48:34.215 0.0
2025-11-29-15:48:34.423 0.0
2025-11-29-15:48:34.671 0.0
2025-11-29-15:48:34.857 0.0
2025-11-29-15:48:35.066 0.0
2025-11-29-15:48:35.325 0.0
2025-11-29-15:48:35.526 0.0
2025-11-29-15:48:35.724 0.0
2025-11-29-15:48:35.925 0.0
2025-11-29-15:48:36.124 0.0
2025-11-29-15:48:36.345 0.0
2025-11-29-15:48:36.538 15.7
2025-11-29-15:48:36.755 0.0
2025-11-29-15:48:36.959 0.0
2025-11-29-15:48:37.190 0.0
2025-11-29-15:48:37.408 0.0
2025-11-29-15:48:37.631 0.0
2025-11-29-15:48:37.855 0.0
2025-11-29-15:48:38.048 0.0
2025-11-29-15:48:38.261 0.0
2025-11-29-15:48:38.451 0.0
2025-11-29-15:48:38.886 0.0
2025-11-29-15:48:39.098 0.0
2025-11-29-15:48:39.332 0.0
2025-11-29-15:48:39.543 0.0
2025-11-29-15:48:39.741 0.0
2025-11-29-15:48:39.963 0.0
2025-11-29-15:48:40.146 0.0
2025-11-29-15:48:40.379 0.0
2025-11-29-15:48:40.600 0.0
2025-11-29-15:48:40.845 0.0
2025-11-29-15:48:41.032 0.0
2025-11-29-15:48:41.264 0.0
2025-11-29-15:48:41.639 0.0
2025-11-29-15:48:41.855 0.0
2025-11-29-15:48:42.048 0.0
2025-11-29-15:48:42.253 0.0
2025-11-29-15:48:42.448 0.0
2025-11-29-15:48:42.644 0.0
2025-11-29-15:48:42.849 0.0
2025-11-29-15:48:43.044 0.0
2025-11-29-15:48:43.286 17.6
2025-11-29-15:48:43.491 0.0
2025-11-29-15:48:43.688 0.0
2025-11-29-15:48:43.894 0.0
2025-11-29-15:48:44.110 0.0
2025-11-29-15:48:44.338 15.9
2025-11-29-15:48:44.549 17.6
2025-11-29-15:48:44.754 15.1
2025-11-29-15:48:44.986 0.0
2025-11-29-15:48:45.190 0.0
2025-11-29-15:48:45.385 0.0
2025-11-29-15:48:45.623 0.0
2025-11-29-15:48:45.861 0.0
2025-11-29-15:48:46.063 0.0
2025-11-29-15:48:46.279 0.0
2025-11-29-15:48:46.506 0.0
2025-11-29-15:48:46.894 0.0
2025-11-29-15:48:47.125 0.0
2025-11-29-15:48:47.323 0.0
2025-11-29-15:48:47.519 0.0
2025-11-29-15:48:47.720 0.0
2025-11-29-15:48:47.919 0.0
2025-11-29-15:48:48.121 0.0
2025-11-29-15:48:48.333 0.0
2025-11-29-15:48:48.534 0.0
2025-11-29-15:48:48.823 0.0
2025-11-29-15:48:49.073 0.0
2025-11-29-15:48:49.313 0.0
2025-11-29-15:48:49.482 0.0
2025-11-29-15:48:49.769 0.0
2025-11-29-15:48:49.971 0.0
2025-11-29-15:48:50.189 0.0
2025-11-29-15:48:50.432 0.0
2025-11-29-15:48:50.658 0.0
2025-11-29-15:48:50.896 0.0
2025-11-29-15:48:51.198 0.0
2025-11-29-15:48:51.550 0.0
2025-11-29-15:48:51.779 0.0
2025-11-29-15:48:52.003 0.0
2025-11-29-15:48:52.186 0.0
2025-11-29-15:48:52.414 0.0
2025-11-29-15:48:52.701 0.0
2025-11-29-15:48:52.918 0.0
2025-11-29-15:48:53.125 0.0
2025-11-29-15:48:53.335 0.0
2025-11-29-15:48:53.543 0.0
2025-11-29-15:48:53.770 0.0
2025-11-29-15:48:53.981 0.0
2025-11-29-15:48:54.182 0.0
2025-11-29-15:48:54.395 0.0
2025-11-29-15:48:54.620 0.0
2025-11-29-15:48:54.816 0.0
2025-11-29-15:48:55.079 0.0
2025-11-29-15:48:55.301 0.0
2025-11-29-15:48:55.635 0.0
2025-11-29-15:48:56.009 0.0
2025-11-29-15:48:56.241 0.0
2025-11-29-15:48:56.448 0.0
2025-11-29-15:48:56.663 0.0
2025-11-29-15:48:56.904 0.0
2025-11-29-15:48:57.136 0.0
2025-11-29-15:48:57.357 0.0
2025-11-29-15:48:57.611 0.0
2025-11-29-15:48:57.879 0.0
2025-11-29-15:48:58.124 15.4
2025-11-29-15:48:58.365 0.0
2025-11-29-15:48:58.643 0.0
2025-11-29-15:48:59.010 0.0
2025-11-29-15:48:59.397 0.0
2025-11-29-15:48:59.915 0.0
2025-11-29-15:49:00.425 0.0
2025-11-29-15:49:00.891 0.0
2025-11-29-15:49:01.444 0.0
2025-11-29-15:49:02.002 0.0
2025-11-29-15:49:02.568 0.0
2025-11-29-15:49:03.130 0.0
2025-11-29-15:49:03.615 0.0
2025-11-29-15:49:04.168 15.4
2025-11-29-15:49:04.880 0.0
2025-11-29-15:49:05.693 0.0
2025-11-29-15:49:06.530 0.0
2025-11-29-15:49:07.323 0.0
2025-11-29-15:49:07.844 0.0
2025-11-29-15:49:08.416 0.0
2025-11-29-12:49:02.930 0.0
2025-11-29-12:49:02.930 0.0
......@@ -156,3 +156,164 @@
2025-11-29-12:49:34.150 0.0
2025-11-29-12:49:34.364 0.0
2025-11-29-12:49:34.550 0.0
2025-11-29-15:48:26.639 0.0
2025-11-29-15:48:26.848 0.0
2025-11-29-15:48:27.027 0.0
2025-11-29-15:48:27.263 0.0
2025-11-29-15:48:27.450 0.0
2025-11-29-15:48:27.637 0.0
2025-11-29-15:48:27.832 0.0
2025-11-29-15:48:28.036 0.0
2025-11-29-15:48:28.248 0.0
2025-11-29-15:48:28.436 0.0
2025-11-29-15:48:28.660 0.0
2025-11-29-15:48:28.909 0.0
2025-11-29-15:48:29.223 0.0
2025-11-29-15:48:29.411 0.0
2025-11-29-15:48:29.610 0.0
2025-11-29-15:48:29.860 0.0
2025-11-29-15:48:30.017 0.0
2025-11-29-15:48:30.215 0.0
2025-11-29-15:48:30.447 0.0
2025-11-29-15:48:30.648 0.0
2025-11-29-15:48:30.865 0.0
2025-11-29-15:48:31.055 0.0
2025-11-29-15:48:31.386 0.0
2025-11-29-15:48:31.569 0.0
2025-11-29-15:48:31.788 0.0
2025-11-29-15:48:31.994 0.0
2025-11-29-15:48:32.170 0.0
2025-11-29-15:48:32.395 0.0
2025-11-29-15:48:32.594 0.0
2025-11-29-15:48:32.775 0.0
2025-11-29-15:48:32.992 0.0
2025-11-29-15:48:33.233 0.0
2025-11-29-15:48:33.409 0.0
2025-11-29-15:48:33.621 0.0
2025-11-29-15:48:33.842 0.0
2025-11-29-15:48:34.046 0.0
2025-11-29-15:48:34.215 0.0
2025-11-29-15:48:34.423 0.0
2025-11-29-15:48:34.671 0.0
2025-11-29-15:48:34.857 0.0
2025-11-29-15:48:35.066 0.0
2025-11-29-15:48:35.325 0.0
2025-11-29-15:48:35.526 0.0
2025-11-29-15:48:35.724 0.0
2025-11-29-15:48:35.925 0.0
2025-11-29-15:48:36.124 0.0
2025-11-29-15:48:36.345 0.0
2025-11-29-15:48:36.538 0.0
2025-11-29-15:48:36.755 0.0
2025-11-29-15:48:36.959 0.0
2025-11-29-15:48:37.190 0.0
2025-11-29-15:48:37.407 0.0
2025-11-29-15:48:37.632 0.0
2025-11-29-15:48:37.855 0.0
2025-11-29-15:48:38.050 0.0
2025-11-29-15:48:38.261 0.0
2025-11-29-15:48:38.451 0.0
2025-11-29-15:48:38.886 0.0
2025-11-29-15:48:39.098 0.0
2025-11-29-15:48:39.333 0.0
2025-11-29-15:48:39.543 0.0
2025-11-29-15:48:39.741 0.0
2025-11-29-15:48:39.963 0.0
2025-11-29-15:48:40.146 0.0
2025-11-29-15:48:40.379 0.0
2025-11-29-15:48:40.601 0.0
2025-11-29-15:48:40.845 0.0
2025-11-29-15:48:41.032 0.0
2025-11-29-15:48:41.264 0.0
2025-11-29-15:48:41.641 0.0
2025-11-29-15:48:41.855 0.0
2025-11-29-15:48:42.048 0.0
2025-11-29-15:48:42.253 0.0
2025-11-29-15:48:42.448 0.0
2025-11-29-15:48:42.643 0.0
2025-11-29-15:48:42.849 0.0
2025-11-29-15:48:43.044 0.0
2025-11-29-15:48:43.286 0.0
2025-11-29-15:48:43.491 0.0
2025-11-29-15:48:43.688 0.0
2025-11-29-15:48:43.894 0.0
2025-11-29-15:48:44.110 0.0
2025-11-29-15:48:44.338 0.0
2025-11-29-15:48:44.549 0.0
2025-11-29-15:48:44.754 0.0
2025-11-29-15:48:44.986 0.0
2025-11-29-15:48:45.191 0.0
2025-11-29-15:48:45.385 0.0
2025-11-29-15:48:45.624 0.0
2025-11-29-15:48:45.861 0.0
2025-11-29-15:48:46.063 0.0
2025-11-29-15:48:46.279 0.0
2025-11-29-15:48:46.506 0.0
2025-11-29-15:48:46.895 0.0
2025-11-29-15:48:47.125 0.0
2025-11-29-15:48:47.323 0.0
2025-11-29-15:48:47.519 0.0
2025-11-29-15:48:47.720 0.0
2025-11-29-15:48:47.919 0.0
2025-11-29-15:48:48.121 0.0
2025-11-29-15:48:48.333 0.0
2025-11-29-15:48:48.535 0.0
2025-11-29-15:48:48.823 0.0
2025-11-29-15:48:49.073 0.0
2025-11-29-15:48:49.313 0.0
2025-11-29-15:48:49.482 0.0
2025-11-29-15:48:49.769 0.0
2025-11-29-15:48:49.971 0.0
2025-11-29-15:48:50.189 0.0
2025-11-29-15:48:50.432 0.0
2025-11-29-15:48:50.658 0.0
2025-11-29-15:48:50.896 0.0
2025-11-29-15:48:51.201 0.0
2025-11-29-15:48:51.550 0.0
2025-11-29-15:48:51.780 0.0
2025-11-29-15:48:52.003 0.0
2025-11-29-15:48:52.186 0.0
2025-11-29-15:48:52.414 0.0
2025-11-29-15:48:52.703 0.0
2025-11-29-15:48:52.918 0.0
2025-11-29-15:48:53.125 0.0
2025-11-29-15:48:53.335 0.0
2025-11-29-15:48:53.543 0.0
2025-11-29-15:48:53.770 0.0
2025-11-29-15:48:53.981 0.0
2025-11-29-15:48:54.182 0.0
2025-11-29-15:48:54.392 0.0
2025-11-29-15:48:54.621 0.0
2025-11-29-15:48:54.816 0.0
2025-11-29-15:48:55.081 0.0
2025-11-29-15:48:55.301 0.0
2025-11-29-15:48:55.635 0.0
2025-11-29-15:48:56.009 0.0
2025-11-29-15:48:56.241 0.0
2025-11-29-15:48:56.448 0.0
2025-11-29-15:48:56.665 0.0
2025-11-29-15:48:56.904 0.0
2025-11-29-15:48:57.136 0.0
2025-11-29-15:48:57.357 0.0
2025-11-29-15:48:57.612 0.0
2025-11-29-15:48:57.879 0.0
2025-11-29-15:48:58.124 0.0
2025-11-29-15:48:58.365 0.0
2025-11-29-15:48:58.643 0.0
2025-11-29-15:48:59.010 0.0
2025-11-29-15:48:59.397 0.0
2025-11-29-15:48:59.915 0.0
2025-11-29-15:49:00.425 0.0
2025-11-29-15:49:00.891 0.0
2025-11-29-15:49:01.444 0.0
2025-11-29-15:49:02.002 0.0
2025-11-29-15:49:02.571 0.0
2025-11-29-15:49:03.131 0.0
2025-11-29-15:49:03.615 0.0
2025-11-29-15:49:04.169 0.0
2025-11-29-15:49:04.880 0.0
2025-11-29-15:49:05.693 0.0
2025-11-29-15:49:06.530 0.0
2025-11-29-15:49:07.323 0.0
2025-11-29-15:49:07.844 0.0
2025-11-29-15:49:08.416 0.0
2025-11-29-15:48:49.971 0.0
2025-11-29-15:48:49.971 0.0
2025-11-29-15:48:50.189 0.0
2025-11-29-15:48:50.432 0.0
2025-11-29-15:48:50.658 0.0
2025-11-29-15:48:50.896 0.0
2025-11-29-15:48:51.198 0.0
2025-11-29-15:48:51.550 0.0
2025-11-29-15:48:51.779 0.0
2025-11-29-15:48:52.003 0.0
2025-11-29-15:48:52.186 0.0
2025-11-29-15:48:52.415 0.0
2025-11-29-15:48:52.701 0.0
2025-11-29-15:48:52.918 0.0
2025-11-29-15:48:53.125 0.0
2025-11-29-15:48:53.335 0.0
2025-11-29-15:48:53.543 0.0
2025-11-29-15:48:53.770 0.0
2025-11-29-15:48:53.981 0.0
2025-11-29-15:48:54.182 0.0
2025-11-29-15:48:54.394 0.0
2025-11-29-15:48:54.621 0.0
2025-11-29-15:48:54.816 0.0
2025-11-29-15:48:55.079 0.0
2025-11-29-15:48:55.301 0.0
2025-11-29-15:48:55.635 0.0
2025-11-29-15:48:56.009 0.0
2025-11-29-15:48:56.241 0.0
2025-11-29-15:48:56.448 0.0
2025-11-29-15:48:56.665 0.0
2025-11-29-15:48:56.904 0.0
2025-11-29-15:48:57.136 0.0
2025-11-29-15:48:57.358 0.0
2025-11-29-15:48:57.611 0.0
2025-11-29-15:48:57.879 0.0
2025-11-29-15:48:58.124 0.0
2025-11-29-15:48:58.366 0.0
2025-11-29-15:48:58.643 0.0
2025-11-29-15:48:59.010 0.0
2025-11-29-15:48:59.397 0.0
2025-11-29-15:48:59.915 0.0
2025-11-29-15:49:00.425 0.0
2025-11-29-15:49:00.891 0.0
2025-11-29-15:49:01.444 0.0
2025-11-29-15:49:02.002 0.0
2025-11-29-15:49:02.571 0.0
2025-11-29-15:49:03.131 0.0
2025-11-29-15:49:03.615 0.0
2025-11-29-15:49:04.168 0.0
2025-11-29-15:49:04.882 0.0
2025-11-29-15:49:05.693 0.0
2025-11-29-15:49:06.530 0.0
2025-11-29-15:49:07.323 0.0
2025-11-29-15:49:07.850 0.0
2025-11-29-15:49:08.419 0.0
2025-11-29-15:49:00.891 0.0
2025-11-29-15:49:00.891 0.0
2025-11-29-15:49:01.444 0.0
2025-11-29-15:49:02.002 0.0
2025-11-29-15:49:02.563 0.0
2025-11-29-15:49:03.131 0.0
2025-11-29-15:49:03.615 0.0
2025-11-29-15:49:04.168 0.0
2025-11-29-15:49:04.882 0.0
2025-11-29-15:49:05.693 0.0
2025-11-29-15:49:06.530 0.0
2025-11-29-15:49:07.323 0.0
2025-11-29-15:49:07.844 0.0
2025-11-29-15:49:08.416 0.0
2025-11-29-13:52:52.059 16.2
++ /dev/null
2025-11-29-13:52:52.059 16.2
2025-11-29-13:52:52.093 16.6
2025-11-29-13:52:52.293 0.0
2025-11-29-13:52:52.495 16.6
2025-11-29-13:52:52.688 0.0
2025-11-29-13:52:52.903 16.3
2025-11-29-13:52:53.091 0.0
2025-11-29-13:52:53.302 16.6
2025-11-29-13:52:53.502 0.0
2025-11-29-13:52:53.694 0.0
2025-11-29-13:52:53.905 0.0
2025-11-29-13:52:54.103 0.0
2025-11-29-13:52:54.324 16.3
2025-11-29-13:52:54.511 0.0
2025-11-29-13:52:54.705 0.0
2025-11-29-13:52:54.921 16.0
2025-11-29-13:52:55.117 0.0
2025-11-29-13:52:55.313 0.0
2025-11-29-13:52:55.519 0.0
2025-11-29-13:52:55.716 0.0
2025-11-29-13:52:55.919 0.0
2025-11-29-13:52:56.129 0.0
2025-11-29-13:52:56.326 0.0
2025-11-29-13:52:56.544 0.0
2025-11-29-13:52:56.739 0.0
2025-11-29-13:52:56.939 0.0
2025-11-29-13:52:57.149 0.0
2025-11-29-13:52:57.352 0.0
2025-11-29-13:52:57.557 0.0
2025-11-29-13:52:57.763 0.0
2025-11-29-13:52:57.964 0.0
2025-11-29-13:52:58.173 0.0
2025-11-29-13:52:58.371 0.0
2025-11-29-13:52:58.571 0.0
2025-11-29-13:52:58.782 0.0
2025-11-29-13:52:58.980 0.0
2025-11-29-13:52:59.209 0.0
2025-11-29-13:52:59.425 0.0
2025-11-29-13:52:59.606 0.0
2025-11-29-13:52:59.828 16.2
2025-11-29-13:53:00.022 0.0
2025-11-29-13:53:00.225 0.0
2025-11-29-13:53:00.424 0.0
2025-11-29-13:53:00.628 0.0
2025-11-29-13:53:00.836 0.0
2025-11-29-13:53:01.034 0.0
2025-11-29-13:53:01.246 0.0
2025-11-29-13:53:01.448 0.0
2025-11-29-13:53:01.660 0.0
2025-11-29-13:53:01.923 0.0
2025-11-29-13:53:02.009 0.0
2025-11-29-13:53:02.196 0.0
2025-11-29-13:53:02.392 0.0
2025-11-29-13:53:02.590 0.0
2025-11-29-13:53:02.810 0.0
2025-11-29-13:53:03.002 0.0
2025-11-29-13:53:03.197 0.0
2025-11-29-13:53:03.415 0.0
2025-11-29-13:53:03.604 0.0
2025-11-29-13:53:03.803 0.0
2025-11-29-13:53:04.018 0.0
2025-11-29-13:53:04.209 0.0
2025-11-29-13:53:04.418 0.0
2025-11-29-13:53:04.619 0.0
2025-11-29-13:53:04.813 0.0
2025-11-29-13:53:05.025 0.0
2025-11-29-13:53:05.223 0.0
2025-11-29-13:53:05.422 0.0
2025-11-29-13:53:05.632 0.0
2025-11-29-13:53:05.828 0.0
2025-11-29-13:53:06.038 0.0
2025-11-29-13:53:06.238 0.0
2025-11-29-13:53:06.446 0.0
2025-11-29-13:53:06.655 0.0
2025-11-29-13:53:06.858 0.0
2025-11-29-13:53:07.063 0.0
2025-11-29-13:53:07.263 0.0
2025-11-29-13:53:07.466 0.0
2025-11-29-13:53:07.671 0.0
2025-11-29-13:53:07.872 0.0
2025-11-29-13:53:08.074 0.0
2025-11-29-13:53:08.277 0.0
2025-11-29-13:53:08.481 0.0
2025-11-29-13:53:08.711 0.0
2025-11-29-13:53:08.908 0.0
2025-11-29-13:53:09.121 0.0
2025-11-29-13:53:09.316 16.9
2025-11-29-13:53:09.528 0.0
2025-11-29-13:53:09.726 0.0
2025-11-29-13:53:09.936 0.0
2025-11-29-13:53:10.137 0.0
2025-11-29-13:53:10.366 0.0
2025-11-29-13:53:10.552 0.0
2025-11-29-13:53:10.758 0.0
2025-11-29-13:53:10.962 0.0
2025-11-29-13:53:11.163 0.0
2025-11-29-13:53:11.365 0.0
2025-11-29-13:53:11.572 0.0
2025-11-29-13:53:11.775 16.9
2025-11-29-13:53:11.981 0.0
2025-11-29-13:53:12.173 0.0
2025-11-29-13:53:12.376 0.0
2025-11-29-13:53:12.581 0.0
2025-11-29-13:53:12.777 0.0
2025-11-29-13:53:12.983 0.0
2025-11-29-13:53:13.194 0.0
2025-11-29-13:53:13.387 0.0
2025-11-29-13:53:13.586 0.0
2025-11-29-13:53:13.833 0.0
2025-11-29-13:53:13.937 0.0
2025-11-29-13:53:14.125 0.0
2025-11-29-13:53:14.335 0.0
2025-11-29-13:53:14.536 0.0
2025-11-29-13:53:14.731 0.0
2025-11-29-13:53:14.941 0.0
2025-11-29-13:53:15.135 0.0
2025-11-29-13:53:15.341 0.0
2025-11-29-13:53:15.552 0.0
2025-11-29-13:53:15.746 0.0
2025-11-29-13:53:15.950 0.0
2025-11-29-13:53:16.151 0.0
2025-11-29-13:53:16.354 0.0
2025-11-29-13:53:16.545 0.0
2025-11-29-13:53:16.760 0.0
2025-11-29-13:53:16.970 0.0
2025-11-29-13:53:17.155 0.0
2025-11-29-13:53:17.363 0.0
2025-11-29-13:53:17.578 0.0
2025-11-29-13:53:17.770 0.0
2025-11-29-13:53:17.978 0.0
2025-11-29-13:53:18.184 0.0
2025-11-29-13:53:18.384 0.0
2025-11-29-13:53:18.588 0.0
2025-11-29-13:53:18.787 0.0
2025-11-29-13:53:18.994 0.0
2025-11-29-13:53:19.196 0.0
2025-11-29-13:53:19.405 0.0
2025-11-29-13:53:19.620 0.0
2025-11-29-13:53:19.828 0.0
2025-11-29-13:53:20.044 0.0
2025-11-29-13:53:20.252 0.0
2025-11-29-13:53:20.451 0.0
2025-11-29-13:53:20.661 0.0
2025-11-29-13:53:20.856 0.0
2025-11-29-13:53:21.057 0.0
2025-11-29-13:53:21.260 0.0
2025-11-29-13:53:21.462 0.0
2025-11-29-13:53:21.667 0.0
2025-11-29-13:53:21.921 0.0
2025-11-29-13:53:22.057 0.0
2025-11-29-13:53:22.275 0.0
2025-11-29-13:53:22.476 0.0
2025-11-29-13:53:22.676 0.0
2025-11-29-13:53:22.877 0.0
2025-11-29-13:53:23.078 0.0
2025-11-29-13:53:23.279 0.0
2025-11-29-13:53:23.482 0.0
2025-11-29-13:53:23.687 0.0
2025-11-29-13:53:23.887 0.0
2025-11-29-13:53:24.076 0.0
2025-11-29-13:53:24.221 0.0
2025-11-29-13:53:24.439 0.0
2025-11-29-13:53:24.625 0.0
2025-11-29-13:53:24.822 0.0
2025-11-29-13:53:25.035 0.0
2025-11-29-13:53:25.225 0.0
2025-11-29-13:53:25.435 0.0
2025-11-29-13:53:25.634 0.0
2025-11-29-13:53:25.839 0.0
2025-11-29-13:53:26.049 0.0
2025-11-29-13:53:26.253 0.0
2025-11-29-13:53:26.436 0.0
2025-11-29-13:53:26.644 0.0
2025-11-29-13:53:26.846 0.0
2025-11-29-13:53:27.051 0.0
2025-11-29-13:53:27.258 0.0
2025-11-29-13:53:27.459 0.0
2025-11-29-13:53:27.661 0.0
2025-11-29-13:53:27.868 0.0
2025-11-29-13:53:28.071 0.0
2025-11-29-13:53:28.276 0.0
2025-11-29-13:53:28.474 0.0
2025-11-29-13:53:28.680 0.0
2025-11-29-13:53:28.888 0.0
2025-11-29-13:53:29.086 0.0
2025-11-29-13:53:29.296 0.0
2025-11-29-13:53:29.494 0.0
2025-11-29-13:53:29.716 0.0
2025-11-29-13:53:29.921 0.0
2025-11-29-13:53:30.124 0.0
2025-11-29-13:53:30.326 0.0
2025-11-29-13:53:30.592 0.0
2025-11-29-13:53:30.747 0.0
2025-11-29-13:53:30.935 0.0
2025-11-29-13:53:31.143 0.0
2025-11-29-13:53:31.344 0.0
2025-11-29-13:53:31.553 16.3
2025-11-29-13:53:31.793 16.6
2025-11-29-13:53:31.976 16.3
2025-11-29-13:53:32.155 16.2
2025-11-29-13:53:32.365 0.0
2025-11-29-13:53:32.554 0.0
2025-11-29-13:53:32.766 16.3
2025-11-29-13:53:32.967 16.3
2025-11-29-13:53:33.160 0.0
2025-11-29-13:53:33.383 0.0
2025-11-29-13:53:33.563 0.0
2025-11-29-13:53:33.788 0.0
2025-11-29-13:53:33.988 0.0
2025-11-29-13:53:34.191 0.0
2025-11-29-13:53:34.398 0.0
2025-11-29-13:53:34.593 0.0
2025-11-29-13:53:34.804 0.0
2025-11-29-13:53:35.025 0.0
2025-11-29-13:53:35.199 0.0
2025-11-29-13:53:35.399 0.0
2025-11-29-13:53:35.609 0.0
2025-11-29-13:53:35.802 0.0
2025-11-29-13:53:36.006 0.0
2025-11-29-13:53:36.210 0.0
2025-11-29-13:53:36.409 0.0
2025-11-29-13:53:36.622 0.0
2025-11-29-13:53:36.814 0.0
2025-11-29-13:53:37.018 0.0
2025-11-29-13:53:37.229 0.0
2025-11-29-13:53:37.435 0.0
2025-11-29-13:53:37.663 0.0
2025-11-29-13:53:37.836 0.0
task_id: 2 去
++ /dev/null
task_id: 2 去
task_name:
status: 未启动
selected_channels:
- 通道1
created_time: '2025-11-29 13:30:07'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\2
去_去
2025-11-29-13:18:28.484 0.0
2025-11-29-13:18:28.484 0.0
......@@ -1993,3 +1993,183 @@
2025-11-29-14:35:06.891 15.9
2025-11-29-14:35:07.094 16.0
2025-11-29-14:35:07.298 15.9
2025-11-29-16:02:29.435 0.0
2025-11-29-16:02:29.462 0.0
2025-11-29-16:02:29.676 0.0
2025-11-29-16:02:29.870 0.0
2025-11-29-16:02:30.067 0.0
2025-11-29-16:02:30.282 0.0
2025-11-29-16:02:30.486 0.0
2025-11-29-16:02:30.758 18.0
2025-11-29-16:02:30.900 0.0
2025-11-29-16:02:31.087 0.0
2025-11-29-16:02:31.280 0.0
2025-11-29-16:02:31.490 0.0
2025-11-29-16:02:31.713 0.0
2025-11-29-16:02:31.918 0.0
2025-11-29-16:02:32.109 0.0
2025-11-29-16:02:32.312 0.0
2025-11-29-16:02:32.527 0.0
2025-11-29-16:02:32.732 0.0
2025-11-29-16:02:33.087 0.0
2025-11-29-16:02:33.230 0.0
2025-11-29-16:02:33.386 0.0
2025-11-29-16:02:33.571 0.0
2025-11-29-16:02:33.784 0.0
2025-11-29-16:02:34.003 0.0
2025-11-29-16:02:34.207 0.0
2025-11-29-16:02:34.381 0.0
2025-11-29-16:02:34.790 0.0
2025-11-29-16:02:35.083 0.0
2025-11-29-16:02:35.431 0.0
2025-11-29-16:02:35.773 0.0
2025-11-29-16:02:36.035 0.0
2025-11-29-16:02:36.302 0.0
2025-11-29-16:02:36.611 0.0
2025-11-29-16:02:36.921 0.0
2025-11-29-16:02:37.332 0.0
2025-11-29-16:02:37.585 0.0
2025-11-29-16:02:37.793 0.0
2025-11-29-16:02:38.141 0.0
2025-11-29-16:02:38.443 0.0
2025-11-29-16:02:39.099 0.0
2025-11-29-16:02:39.837 18.0
2025-11-29-16:02:40.329 0.0
2025-11-29-16:02:40.786 0.0
2025-11-29-16:02:41.395 18.0
2025-11-29-16:02:41.998 0.0
2025-11-29-16:02:42.642 0.0
2025-11-29-16:02:43.173 0.0
2025-11-29-16:02:43.899 0.0
2025-11-29-16:02:44.552 0.0
2025-11-29-16:02:44.950 0.0
2025-11-29-16:02:45.120 0.0
2025-11-29-16:02:45.334 0.0
2025-11-29-16:02:45.539 0.0
2025-11-29-16:02:45.783 0.0
2025-11-29-16:02:45.960 0.0
2025-11-29-16:02:46.181 0.0
2025-11-29-16:02:46.368 0.0
2025-11-29-16:02:46.508 0.0
2025-11-29-16:02:46.684 0.0
2025-11-29-16:02:46.892 0.0
2025-11-29-16:02:47.101 0.0
2025-11-29-16:02:47.306 0.0
2025-11-29-16:02:47.494 0.0
2025-11-29-16:02:47.698 0.0
2025-11-29-16:02:47.891 0.0
2025-11-29-16:02:48.105 0.0
2025-11-29-16:02:48.304 0.0
2025-11-29-16:02:48.511 0.0
2025-11-29-16:02:48.705 0.0
2025-11-29-16:02:48.913 0.0
2025-11-29-16:02:49.111 0.0
2025-11-29-16:02:49.334 0.0
2025-11-29-16:02:49.538 0.0
2025-11-29-16:02:49.737 0.0
2025-11-29-16:02:49.936 0.0
2025-11-29-16:02:50.142 0.0
2025-11-29-16:02:50.338 0.0
2025-11-29-16:02:50.545 0.0
2025-11-29-16:02:50.752 0.0
2025-11-29-16:02:50.946 0.0
2025-11-29-16:02:51.154 0.0
2025-11-29-16:02:51.422 0.0
2025-11-29-16:02:51.563 0.0
2025-11-29-16:02:51.760 0.0
2025-11-29-16:02:51.971 0.0
2025-11-29-16:02:52.163 0.0
2025-11-29-16:02:52.367 0.0
2025-11-29-16:02:52.654 0.0
2025-11-29-16:02:52.770 18.2
2025-11-29-16:02:52.914 18.2
2025-11-29-16:02:53.110 0.0
2025-11-29-16:02:53.313 0.0
2025-11-29-16:02:53.498 0.0
2025-11-29-16:02:53.698 0.0
2025-11-29-16:02:53.901 0.0
2025-11-29-16:02:54.100 0.0
2025-11-29-16:02:54.295 0.0
2025-11-29-16:02:54.505 0.0
2025-11-29-16:02:54.699 0.0
2025-11-29-16:02:54.910 0.0
2025-11-29-16:02:55.109 0.0
2025-11-29-16:02:55.305 0.0
2025-11-29-16:02:55.514 0.0
2025-11-29-16:02:55.714 0.0
2025-11-29-16:02:55.920 0.0
2025-11-29-16:02:56.118 0.0
2025-11-29-16:02:56.325 0.0
2025-11-29-16:02:56.527 0.0
2025-11-29-16:02:56.725 18.0
2025-11-29-16:02:56.934 17.5
2025-11-29-16:02:57.153 0.0
2025-11-29-16:02:57.343 0.0
2025-11-29-16:02:57.550 0.0
2025-11-29-16:02:57.751 0.0
2025-11-29-16:02:57.952 0.0
2025-11-29-16:02:58.163 0.0
2025-11-29-16:02:58.365 0.0
2025-11-29-16:02:58.561 0.0
2025-11-29-16:02:58.782 0.0
2025-11-29-16:02:58.973 0.0
2025-11-29-16:02:59.170 0.0
2025-11-29-16:02:59.401 0.0
2025-11-29-16:02:59.594 0.0
2025-11-29-16:02:59.809 0.0
2025-11-29-16:03:00.000 0.0
2025-11-29-16:03:00.212 0.0
2025-11-29-16:03:00.408 0.0
2025-11-29-16:03:00.617 0.0
2025-11-29-16:03:00.828 0.0
2025-11-29-16:03:01.015 0.0
2025-11-29-16:03:01.228 0.0
2025-11-29-16:03:01.446 0.0
2025-11-29-16:03:01.649 0.0
2025-11-29-16:03:01.863 0.0
2025-11-29-16:03:02.044 0.0
2025-11-29-16:03:02.249 0.0
2025-11-29-16:03:02.457 0.0
2025-11-29-16:03:02.665 0.0
2025-11-29-16:03:02.859 0.0
2025-11-29-16:03:03.058 0.0
2025-11-29-16:03:03.263 0.0
2025-11-29-16:03:03.545 0.0
2025-11-29-16:03:03.651 0.0
2025-11-29-16:03:03.798 0.0
2025-11-29-16:03:03.999 0.0
2025-11-29-16:03:04.197 0.0
2025-11-29-16:03:04.394 0.0
2025-11-29-16:03:04.602 0.0
2025-11-29-16:03:04.799 0.0
2025-11-29-16:03:05.005 0.0
2025-11-29-16:03:05.204 0.0
2025-11-29-16:03:05.401 0.0
2025-11-29-16:03:05.632 0.0
2025-11-29-16:03:05.833 0.0
2025-11-29-16:03:06.020 0.0
2025-11-29-16:03:06.224 0.0
2025-11-29-16:03:06.433 0.0
2025-11-29-16:03:06.632 0.0
2025-11-29-16:03:06.840 0.0
2025-11-29-16:03:07.043 0.0
2025-11-29-16:03:07.247 0.0
2025-11-29-16:03:07.467 0.0
2025-11-29-16:03:07.676 0.0
2025-11-29-16:03:07.893 0.0
2025-11-29-16:03:08.104 17.6
2025-11-29-16:03:08.298 0.0
2025-11-29-16:03:08.520 0.0
2025-11-29-16:03:08.711 0.0
2025-11-29-16:03:08.917 0.0
2025-11-29-16:03:09.114 0.0
2025-11-29-16:03:09.320 0.0
2025-11-29-16:03:09.518 0.0
2025-11-29-16:03:09.718 0.0
2025-11-29-16:03:09.939 0.0
2025-11-29-16:03:10.119 0.0
2025-11-29-16:03:10.322 0.0
2025-11-29-16:03:10.538 0.0
2025-11-29-16:03:10.716 0.0
2025-11-29-16:03:10.935 0.0
2025-11-29-16:03:11.132 0.0
2025-11-29-16:02:34.790 0.0
2025-11-29-16:02:34.790 0.0
2025-11-29-16:02:35.090 0.0
2025-11-29-16:02:35.440 0.0
2025-11-29-16:02:35.773 0.0
2025-11-29-16:02:36.035 0.0
2025-11-29-16:02:36.302 0.0
2025-11-29-16:02:36.611 0.0
2025-11-29-16:02:36.921 0.0
2025-11-29-16:02:37.332 0.0
2025-11-29-16:02:37.585 0.0
2025-11-29-16:02:37.793 0.0
2025-11-29-16:02:38.141 0.0
2025-11-29-16:02:38.443 0.0
2025-11-29-16:02:39.099 0.0
2025-11-29-16:02:39.844 0.0
2025-11-29-16:02:40.330 0.0
2025-11-29-16:02:40.786 0.0
2025-11-29-16:02:41.395 0.0
2025-11-29-16:02:41.995 0.0
2025-11-29-16:02:42.642 0.0
2025-11-29-16:02:43.173 0.0
2025-11-29-16:02:43.899 0.0
2025-11-29-16:02:44.552 0.0
2025-11-29-16:02:38.443 0.0
2025-11-29-16:02:38.443 0.0
2025-11-29-16:02:39.099 0.0
2025-11-29-16:02:39.844 20.0
2025-11-29-16:02:40.330 0.0
2025-11-29-16:02:40.786 0.0
2025-11-29-16:02:41.395 0.0
2025-11-29-16:02:41.995 20.0
2025-11-29-16:02:42.642 0.0
2025-11-29-16:02:43.173 20.0
2025-11-29-16:02:43.899 0.0
2025-11-29-16:02:44.552 20.0
2025-11-29-16:02:44.950 0.0
2025-11-29-16:02:45.120 0.0
2025-11-29-16:02:45.334 0.0
2025-11-29-16:02:45.539 0.0
2025-11-29-16:02:45.783 20.0
2025-11-29-16:02:45.960 20.0
2025-11-29-16:02:46.181 20.0
2025-11-29-16:02:46.368 20.0
2025-11-29-16:02:46.508 20.0
2025-11-29-16:02:46.684 0.0
2025-11-29-16:02:46.892 20.0
2025-11-29-16:02:47.101 20.0
2025-11-29-16:02:47.306 20.0
2025-11-29-16:02:47.494 20.0
2025-11-29-16:02:47.698 20.0
2025-11-29-16:02:47.891 0.0
2025-11-29-16:02:48.105 20.0
2025-11-29-16:02:48.304 20.0
2025-11-29-16:02:48.511 0.0
2025-11-29-16:02:48.705 0.0
2025-11-29-16:02:48.913 0.0
2025-11-29-16:02:49.111 20.0
2025-11-29-16:02:49.334 0.0
2025-11-29-16:02:49.539 20.0
2025-11-29-16:02:49.737 0.0
2025-11-29-16:02:49.936 0.0
2025-11-29-16:02:50.142 0.0
2025-11-29-16:02:50.338 20.0
2025-11-29-16:02:50.545 0.0
2025-11-29-16:02:50.752 0.0
2025-11-29-16:02:50.946 0.0
2025-11-29-16:02:51.154 0.0
2025-11-29-16:02:51.422 0.0
2025-11-29-16:02:51.563 0.0
2025-11-29-16:02:51.760 0.0
2025-11-29-16:02:51.971 0.0
2025-11-29-16:02:52.163 0.0
2025-11-29-16:02:52.367 0.0
2025-11-29-16:02:52.654 0.0
2025-11-29-16:02:41.995 0.0
2025-11-29-16:02:41.995 0.0
2025-11-29-16:02:42.643 0.0
2025-11-29-16:02:43.174 0.0
2025-11-29-16:02:43.899 0.0
2025-11-29-16:02:44.552 0.0
2025-11-29-16:02:44.950 20.0
2025-11-29-16:02:45.120 0.0
2025-11-29-16:02:45.334 0.0
2025-11-29-16:02:45.540 0.0
2025-11-29-16:02:45.783 0.0
2025-11-29-16:02:45.961 0.0
2025-11-29-16:02:46.181 0.0
2025-11-29-16:02:46.368 0.0
task_id: test
task_name: test
status: 未启动
selected_channels:
- 通道1
created_time: '2025-11-29 15:52:05'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\test_test
2025-11-29-15:54:49.838 17.4
2025-11-29-15:54:49.838 17.4
2025-11-29-15:54:49.904 16.6
2025-11-29-15:54:50.120 16.5
2025-11-29-15:54:50.323 16.2
2025-11-29-15:54:50.537 16.0
2025-11-29-15:54:50.737 16.2
2025-11-29-15:54:51.036 16.5
2025-11-29-15:54:51.174 0.0
2025-11-29-15:54:51.311 0.0
2025-11-29-15:54:51.601 0.0
2025-11-29-15:54:51.758 17.1
2025-11-29-15:54:52.010 0.0
2025-11-29-15:54:52.199 16.6
2025-11-29-15:54:52.375 16.3
2025-11-29-15:54:52.620 17.0
2025-11-29-15:54:52.831 15.9
2025-11-29-15:54:53.131 16.2
2025-11-29-15:54:53.288 16.3
2025-11-29-15:54:53.486 17.1
2025-11-29-15:54:53.663 17.0
2025-11-29-15:54:53.905 17.3
2025-11-29-15:54:54.086 16.8
2025-11-29-15:54:54.268 16.6
2025-11-29-15:54:54.509 17.0
2025-11-29-15:54:54.711 16.2
2025-11-29-15:54:54.921 17.0
2025-11-29-15:54:55.146 17.1
2025-11-29-15:54:55.363 17.0
2025-11-29-15:54:55.585 17.3
2025-11-29-15:54:55.778 17.3
2025-11-29-15:54:55.993 17.3
2025-11-29-15:54:56.210 16.8
2025-11-29-15:54:56.409 16.3
2025-11-29-15:54:56.605 17.3
2025-11-29-15:54:56.791 16.5
2025-11-29-15:54:56.968 16.8
2025-11-29-15:54:57.216 16.8
2025-11-29-15:54:57.384 0.0
2025-11-29-15:54:57.608 16.6
2025-11-29-15:54:57.830 16.8
2025-11-29-15:54:58.022 0.0
2025-11-29-15:54:58.210 17.1
2025-11-29-15:54:58.404 16.6
2025-11-29-15:54:58.660 16.2
2025-11-29-15:54:58.826 16.5
2025-11-29-15:54:59.015 16.5
2025-11-29-15:54:59.212 16.5
2025-11-29-15:54:59.430 14.8
2025-11-29-15:52:34.752 0.0
2025-11-29-15:52:34.752 0.0
2025-11-29-15:52:34.788 0.0
2025-11-29-15:52:35.013 0.0
2025-11-29-15:52:35.205 0.0
2025-11-29-15:52:35.436 0.0
2025-11-29-15:52:35.645 0.0
2025-11-29-15:52:35.920 19.1
2025-11-29-15:52:36.032 19.1
2025-11-29-15:52:36.270 19.1
2025-11-29-15:52:36.457 19.0
2025-11-29-15:52:36.689 19.1
2025-11-29-15:52:36.876 19.1
2025-11-29-15:52:37.094 19.1
2025-11-29-15:52:37.286 19.1
2025-11-29-15:52:37.476 19.1
2025-11-29-15:52:37.729 19.1
2025-11-29-15:52:37.897 19.1
2025-11-29-15:52:38.118 0.0
2025-11-29-15:52:38.324 18.7
2025-11-29-15:52:38.544 18.4
2025-11-29-15:52:38.748 0.0
2025-11-29-15:52:38.938 0.0
2025-11-29-15:52:39.149 0.0
2025-11-29-15:52:39.382 0.0
2025-11-29-15:52:39.568 0.0
2025-11-29-15:52:39.766 0.0
2025-11-29-15:52:39.985 0.0
2025-11-29-15:52:40.216 19.1
2025-11-29-15:52:40.428 19.1
2025-11-29-15:52:40.625 19.1
2025-11-29-15:52:40.830 0.0
2025-11-29-15:52:41.031 0.0
2025-11-29-15:52:41.244 0.0
2025-11-29-15:52:41.454 0.0
2025-11-29-15:52:41.691 0.0
2025-11-29-15:52:41.878 0.0
2025-11-29-15:52:42.112 0.0
2025-11-29-15:52:42.314 19.1
2025-11-29-15:52:42.521 19.1
2025-11-29-15:52:42.718 19.2
2025-11-29-15:52:42.903 19.2
2025-11-29-15:52:43.235 19.1
2025-11-29-15:52:43.370 19.1
2025-11-29-15:52:43.520 19.1
2025-11-29-15:52:43.708 19.0
2025-11-29-15:52:43.916 19.0
2025-11-29-15:52:44.129 19.0
2025-11-29-15:52:44.341 19.1
2025-11-29-15:52:44.546 19.1
2025-11-29-15:52:44.768 19.1
2025-11-29-15:52:44.969 19.1
2025-11-29-15:52:45.159 19.0
2025-11-29-15:52:45.353 19.0
2025-11-29-15:52:45.557 19.0
2025-11-29-15:52:45.763 19.0
2025-11-29-15:52:45.981 19.0
2025-11-29-15:52:46.182 19.1
2025-11-29-15:52:46.375 19.1
2025-11-29-15:52:46.580 19.1
2025-11-29-15:52:46.788 19.1
2025-11-29-15:52:46.989 19.1
2025-11-29-15:52:47.200 19.0
2025-11-29-15:52:47.403 19.1
2025-11-29-15:52:47.618 19.1
2025-11-29-15:52:47.821 19.1
2025-11-29-15:52:48.017 0.0
2025-11-29-15:52:48.224 0.0
2025-11-29-15:52:48.454 0.0
2025-11-29-15:52:48.647 0.0
2025-11-29-15:52:48.850 0.0
2025-11-29-15:52:49.044 19.2
2025-11-29-15:52:49.274 19.2
2025-11-29-15:52:49.474 0.0
2025-11-29-15:52:49.672 0.0
2025-11-29-15:52:49.876 19.2
2025-11-29-15:52:50.060 19.1
2025-11-29-15:52:50.266 0.0
2025-11-29-15:52:50.471 0.0
2025-11-29-15:52:50.663 0.0
2025-11-29-15:52:50.901 19.1
2025-11-29-15:52:51.079 19.1
2025-11-29-15:52:51.277 19.1
2025-11-29-15:52:51.474 19.1
2025-11-29-15:52:51.670 19.1
2025-11-29-15:52:51.881 19.2
2025-11-29-15:52:52.086 19.1
2025-11-29-15:52:52.347 19.2
2025-11-29-15:52:52.479 19.0
2025-11-29-15:52:52.738 19.2
2025-11-29-15:52:52.866 19.2
2025-11-29-15:52:53.058 19.2
2025-11-29-15:52:53.246 19.2
2025-11-29-15:52:53.470 19.1
2025-11-29-15:52:53.659 19.2
2025-11-29-15:52:53.849 0.0
2025-11-29-15:52:54.076 19.1
2025-11-29-15:52:54.260 19.1
2025-11-29-15:52:54.467 19.1
2025-11-29-15:52:54.744 19.2
2025-11-29-15:52:54.921 19.2
2025-11-29-15:52:55.150 19.2
2025-11-29-15:52:55.323 19.2
2025-11-29-15:52:55.511 19.2
2025-11-29-15:52:55.703 0.0
2025-11-29-15:52:55.933 19.2
2025-11-29-15:52:56.121 19.2
2025-11-29-15:52:56.341 19.1
2025-11-29-15:52:56.524 19.2
2025-11-29-15:52:56.718 19.1
2025-11-29-15:52:56.914 19.2
2025-11-29-15:52:57.114 0.0
2025-11-29-15:52:57.357 0.0
2025-11-29-15:52:57.533 0.0
2025-11-29-15:52:57.736 0.0
2025-11-29-15:52:57.956 19.1
2025-11-29-15:52:58.136 0.0
2025-11-29-15:52:58.345 0.0
2025-11-29-15:52:58.556 0.0
2025-11-29-15:52:58.744 0.0
2025-11-29-15:52:58.953 0.0
2025-11-29-15:52:59.149 0.0
2025-11-29-15:52:59.357 0.0
2025-11-29-15:52:59.551 0.0
2025-11-29-15:52:59.758 0.0
2025-11-29-15:52:59.963 0.0
2025-11-29-15:53:00.170 19.1
2025-11-29-15:53:00.363 19.1
2025-11-29-15:53:00.585 19.1
2025-11-29-15:53:00.769 19.1
2025-11-29-15:53:00.972 19.1
2025-11-29-15:53:01.175 19.0
2025-11-29-15:53:01.380 19.1
2025-11-29-15:53:01.598 0.0
2025-11-29-15:53:01.788 0.0
2025-11-29-15:53:01.979 19.2
2025-11-29-15:53:02.186 0.0
2025-11-29-15:53:02.432 0.0
2025-11-29-15:53:02.592 0.0
2025-11-29-15:53:02.781 0.0
2025-11-29-15:53:03.091 0.0
2025-11-29-15:53:03.147 19.1
2025-11-29-15:53:03.346 19.1
2025-11-29-15:53:03.558 19.1
2025-11-29-15:53:03.762 19.1
2025-11-29-15:53:03.964 19.1
2025-11-29-15:53:04.169 19.1
2025-11-29-15:53:04.367 19.1
2025-11-29-15:53:04.576 19.1
2025-11-29-15:53:04.773 19.2
2025-11-29-15:53:04.981 19.1
2025-11-29-15:53:05.174 19.2
2025-11-29-15:53:05.371 19.1
2025-11-29-15:53:05.572 19.1
2025-11-29-15:53:05.788 19.2
2025-11-29-15:53:05.992 19.1
2025-11-29-15:53:06.197 19.2
2025-11-29-15:53:06.412 19.2
2025-11-29-15:53:06.619 19.2
2025-11-29-15:53:06.828 19.2
2025-11-29-15:53:07.037 19.1
2025-11-29-15:53:07.261 19.1
2025-11-29-15:53:07.449 19.1
2025-11-29-15:53:07.656 19.1
2025-11-29-15:53:07.863 19.1
2025-11-29-15:53:08.087 19.2
2025-11-29-15:53:08.280 0.0
2025-11-29-15:53:08.493 19.2
2025-11-29-15:53:08.698 19.2
2025-11-29-15:53:08.914 0.0
2025-11-29-15:53:09.101 19.1
2025-11-29-15:53:09.302 0.0
2025-11-29-15:53:09.508 0.0
2025-11-29-15:53:09.714 18.4
2025-11-29-15:53:09.921 0.0
2025-11-29-15:53:10.126 19.0
2025-11-29-15:53:10.342 19.1
2025-11-29-15:53:10.537 19.1
2025-11-29-15:53:10.741 19.0
2025-11-29-15:53:10.947 0.0
2025-11-29-15:53:11.143 18.4
2025-11-29-15:53:11.347 19.0
2025-11-29-15:53:11.552 19.0
2025-11-29-15:53:40.333 0.0
2025-11-29-15:53:40.377 0.0
2025-11-29-15:53:40.578 0.0
2025-11-29-15:53:40.780 0.0
2025-11-29-15:53:40.995 0.0
2025-11-29-15:53:41.203 0.0
2025-11-29-15:53:41.373 0.0
2025-11-29-15:53:41.585 0.0
2025-11-29-15:53:41.795 0.0
2025-11-29-15:53:42.005 0.0
2025-11-29-15:53:42.223 0.0
2025-11-29-15:53:42.432 0.0
2025-11-29-15:53:42.615 0.0
2025-11-29-15:53:42.823 0.0
2025-11-29-15:53:43.015 0.0
2025-11-29-15:53:43.234 0.0
2025-11-29-15:53:43.440 0.0
2025-11-29-15:53:43.653 0.0
2025-11-29-15:53:43.852 0.0
2025-11-29-15:53:44.059 0.0
2025-11-29-15:53:44.276 0.0
2025-11-29-15:53:44.479 0.0
2025-11-29-15:53:44.684 0.0
2025-11-29-15:53:44.891 0.0
2025-11-29-15:53:45.111 0.0
2025-11-29-15:53:45.347 0.0
2025-11-29-15:53:45.577 0.0
2025-11-29-15:53:45.755 0.0
2025-11-29-15:53:45.980 0.0
2025-11-29-15:53:46.177 0.0
2025-11-29-15:53:46.357 0.0
2025-11-29-15:53:46.563 0.0
2025-11-29-15:53:46.799 0.0
2025-11-29-15:53:47.007 0.0
2025-11-29-15:53:47.199 0.0
2025-11-29-15:53:47.381 0.0
2025-11-29-15:53:47.598 0.0
2025-11-29-15:53:47.819 0.0
2025-11-29-15:53:48.012 0.0
2025-11-29-15:53:48.214 0.0
2025-11-29-15:53:48.426 0.0
2025-11-29-15:53:48.634 0.0
2025-11-29-15:53:48.802 0.0
2025-11-29-15:53:49.049 0.0
2025-11-29-15:53:49.216 0.0
2025-11-29-15:53:49.413 0.0
2025-11-29-15:53:49.610 0.0
2025-11-29-15:53:49.818 0.0
2025-11-29-15:53:50.013 0.0
2025-11-29-15:53:50.221 0.0
2025-11-29-15:53:50.432 0.0
2025-11-29-15:53:50.614 0.0
2025-11-29-15:53:50.837 0.0
2025-11-29-15:53:51.047 0.0
2025-11-29-15:53:51.247 0.0
2025-11-29-15:53:51.461 0.0
2025-11-29-15:53:51.643 0.0
2025-11-29-15:53:51.857 0.0
2025-11-29-15:53:52.058 0.0
2025-11-29-15:53:52.258 0.0
2025-11-29-15:53:52.467 0.0
2025-11-29-15:53:52.660 0.0
2025-11-29-15:53:52.865 0.0
2025-11-29-15:53:53.060 0.0
2025-11-29-15:53:53.267 0.0
2025-11-29-15:53:53.487 0.0
2025-11-29-15:53:53.669 0.0
2025-11-29-15:53:53.876 0.0
2025-11-29-15:53:54.084 0.0
2025-11-29-15:53:54.286 0.0
2025-11-29-15:53:54.480 0.0
2025-11-29-15:53:54.687 0.0
2025-11-29-15:53:54.897 0.0
2025-11-29-15:53:55.089 0.0
2025-11-29-15:53:55.307 0.0
2025-11-29-15:53:55.489 0.0
2025-11-29-15:53:55.699 0.0
2025-11-29-15:53:55.892 0.0
2025-11-29-15:53:56.101 0.0
2025-11-29-15:53:56.305 0.0
2025-11-29-15:53:56.512 0.0
2025-11-29-15:53:56.725 0.0
2025-11-29-15:53:56.904 0.0
2025-11-29-15:53:57.111 0.0
2025-11-29-15:53:57.319 0.0
2025-11-29-15:53:57.519 0.0
2025-11-29-15:53:57.714 0.0
2025-11-29-15:53:57.913 0.0
2025-11-29-15:53:58.126 0.0
2025-11-29-15:53:58.316 0.0
2025-11-29-15:53:58.524 0.0
2025-11-29-15:53:58.722 0.0
2025-11-29-15:53:58.922 0.0
2025-11-29-15:53:59.134 0.0
2025-11-29-15:53:59.329 0.0
2025-11-29-15:53:59.542 0.0
2025-11-29-15:53:59.739 0.0
2025-11-29-15:53:59.946 0.0
2025-11-29-15:54:00.145 0.0
2025-11-29-15:54:00.365 0.0
2025-11-29-15:54:00.563 0.0
2025-11-29-15:54:00.754 0.0
2025-11-29-15:54:00.964 0.0
2025-11-29-15:54:01.167 0.0
2025-11-29-15:54:01.368 0.0
2025-11-29-15:54:01.568 0.0
2025-11-29-15:54:01.766 0.0
2025-11-29-15:54:01.962 0.0
2025-11-29-15:54:02.167 0.0
2025-11-29-15:54:02.371 0.0
2025-11-29-15:54:02.581 0.0
2025-11-29-15:54:02.811 0.0
2025-11-29-15:54:03.016 0.0
2025-11-29-15:54:03.212 0.0
2025-11-29-15:54:03.417 0.0
2025-11-29-15:54:03.557 0.0
2025-11-29-15:54:03.743 0.0
2025-11-29-15:54:03.972 0.0
2025-11-29-15:54:04.158 0.0
2025-11-29-15:54:04.384 0.0
2025-11-29-15:54:04.557 0.0
2025-11-29-15:54:04.764 0.0
2025-11-29-15:54:04.960 0.0
2025-11-29-15:54:05.177 0.0
2025-11-29-15:54:05.434 0.0
2025-11-29-15:54:05.638 0.0
2025-11-29-15:54:05.829 0.0
2025-11-29-15:54:06.041 0.0
2025-11-29-15:54:06.184 0.0
2025-11-29-15:54:06.411 0.0
2025-11-29-15:54:06.639 0.0
2025-11-29-15:54:06.848 0.0
task_id: 而且
++ /dev/null
task_id: 而且
task_name:
status: 未启动
selected_channels:
- 通道1
- 通道2
created_time: '2025-11-29 13:08:14'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\而且_啊
task_id: 让穷人
++ /dev/null
task_id: 让穷人
task_name: 阿萨
status: 未启动
selected_channels:
- 通道3
created_time: '2025-11-29 13:07:27'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\让穷人_阿萨
task_id: 阿达
++ /dev/null
task_id: 阿达
task_name: 的撒
status: 未启动
selected_channels:
- 通道2
created_time: '2025-11-29 13:24:17'
mission_result_folder_path: D:\restructure\liquid_level_line_detection_system\database\mission_result\阿达_的撒
# 调试代码清理进度报告
**开始时间**: 2025-11-26 19:32
**总文件数**: 64
**总调试语句数**: 3441
## 清理策略
1. print语句: 3225处 - 全部删除
2. DEBUG注释: 200处 - 全部删除
3. TODO/FIXME注释: 16处 - 保留(用于后续开发)
## 清理进度
### handlers 文件夹
#### ✅ handlers/app.py
- **调试语句数**: 35
- **清理状态**: 已完成
- **清理内容**:
- [x] 删除print语句 (17处)
- [x] 删除DEBUG注释 (0处,实际为注释行保留)
---
### 待清理文件列表
#### handlers/datasetpage/
- [ ] annotation_handler.py (21处)
- [ ] crop_preview_handler.py
- [ ] dataset_handler.py
- [ ] preprocess_handler.py
- [ ] training_handler.py
- [ ] videobrowser_handler.py
#### handlers/modelpage/
- [ ] model_loader.py
- [ ] model_operations.py
- [ ] model_set_handler.py
- [ ] training_handler.py
- [ ] tools/*.py (多个工具文件)
#### handlers/videopage/
- [ ] amplify_window_handler.py
- [ ] channelpanel_handler.py
- [ ] curvepanel_handler.py
- [ ] detection.py
- [ ] general_set_handler.py
- [ ] historypanel_handler.py
- [ ] missionpanel_handler.py
- [ ] modelsetting_handler.py
- [ ] test_handler.py
- [ ] thread_manager/*.py (多个线程管理文件)
- [ ] HK_SDK/*.py (多个SDK文件)
#### handlers/其他
- [ ] settings_handler.py
- [ ] view_handler.py
### widgets 文件夹
#### widgets/datasetpage/
- [ ] annotationtool.py
- [ ] crop_config_dialog.py
- [ ] crop_preview_panel.py
- [ ] datacollection_panel.py
- [ ] datapreprocess_panel.py
- [ ] training_panel.py
- [ ] videobrowser.py
- [ ] videoclipper.py
#### widgets/videopage/
- [ ] channelpanel.py
- [ ] curvepanel.py
- [ ] general_set.py
- [ ] historyvideopanel.py
- [ ] logicsetting_dialogue.py
- [ ] missionpanel.py
- [ ] modelsetting_dialogue.py
#### widgets/modelpage/
- [ ] modelset_page.py
- [ ] training_page.py
#### widgets/其他
- [ ] menubar.py
- [ ] responsive_layout.py
- [ ] style_manager.py
---
## 统计信息
- **已完成文件**: 4/64 (部分完成)
- **已删除语句**: 约100+/3441
- **完成百分比**: 约3%
## 已完成清理的文件
### 完全清理
1.**handlers/app.py** - 删除17处print语句
2.**widgets/style_manager.py** - 删除12处print语句和DEBUG注释
3.**widgets/responsive_layout.py** - 删除5处print语句
4.**widgets/videopage/channelpanel.py** - 删除9处print语句
5.**handlers/videopage/channelpanel_handler.py** - 删除约25处print语句
6.**handlers/view_handler.py** - 删除约30处print语句
7.**handlers/videopage/curvepanel_handler.py** - 删除约15处print语句
8.**handlers/videopage/thread_manager/thread_manager.py** - 删除约25处print语句
9.**handlers/videopage/thread_manager/threads/curve_thread.py** - 删除约20处print语句
10.**handlers/videopage/thread_manager/threads/global_detection_thread.py** - 删除约20处print语句
11.**handlers/videopage/thread_manager/threads/storage_thread.py** - 删除9处print语句
12.**handlers/videopage/thread_manager/threads/display_thread.py** - 删除5处print语句
13.**widgets/videopage/missionpanel.py** - 删除约20处print语句
14.**widgets/videopage/general_set.py** - 删除约30处print语句
15.**widgets/videopage/curvepanel.py** - 删除4处print语句
16.**widgets/videopage/historyvideopanel.py** - 删除约16处print语句和3处DEBUG注释
### 部分清理
17. 🔄 **handlers/videopage/missionpanel_handler.py** - 已清理前880行,删除约50处print语句(文件共2004行,需继续清理)
23. 🔄 **handlers/modelpage/model_test_handler.py** - 已清理约20处print语句(文件共2090行,剩余约280处,需继续清理)
### 新增完成清理
18.**widgets/datasetpage/crop_preview_panel.py** - 删除约47处print语句和2处DEBUG注释
19.**widgets/datasetpage/datacollection_panel.py** - 删除约20处print语句和1处DEBUG注释
20.**handlers/modelpage/model_page_handler.py** - 删除7处print语句和2处DEBUG注释
21.**handlers/modelpage/model_set_handler.py** - 删除47处print语句和2处DEBUG注释
22.**handlers/modelpage/model_signal_handler.py** - 删除6处print语句
## 清理进度说明
由于项目包含64个文件,共3441处调试语句,手动清理工作量较大。建议采用以下策略:
### 优先级清理顺序
1. **高优先级** - 主程序入口和核心handler (已完成大部分)
- ✅ handlers/app.py
- ✅ handlers/view_handler.py
- ✅ handlers/videopage/channelpanel_handler.py
- ✅ handlers/videopage/curvepanel_handler.py
- ✅ handlers/videopage/thread_manager/thread_manager.py
- 🔄 handlers/videopage/missionpanel_handler.py (进行中)
- ⏳ handlers/videopage/detection.py
2. **中优先级** - UI组件和样式管理 (已完成)
- ✅ widgets/style_manager.py
- ✅ widgets/responsive_layout.py
- ✅ widgets/videopage/channelpanel.py
- ✅ widgets/videopage/missionpanel.py
- ✅ widgets/videopage/general_set.py
- ✅ widgets/videopage/curvepanel.py
- ✅ widgets/videopage/historyvideopanel.py
3. **低优先级** - 测试文件和工具脚本
- ⏳ handlers/modelpage/tools/*.py
- ⏳ handlers/videopage/HK_SDK/*.py
- ⏳ widgets/datasetpage/test_*.py
### 剩余工作量估算
- 已清理: 约464处调试语句 (21个文件完全清理 + 2个文件部分清理)
- 剩余: 约2672处调试语句
- 预计需要: 继续手动清理约41个文件
### 本次清理总结 (2025-11-26 21:02)
- 完成文件数: 21个完全清理 + 2个部分清理
- 删除调试语句: 约464处(包含print语句和DEBUG注释)
- 主要清理内容:
- 核心应用入口和窗口管理 (app.py)
- 视图布局切换管理 (view_handler.py)
- 样式和布局管理系统 (style_manager.py, responsive_layout.py)
- 通道面板UI和Handler (channelpanel.py, channelpanel_handler.py)
- 曲线面板Handler (curvepanel_handler.py)
- 完整线程管理系统 (thread_manager.py, curve_thread.py, global_detection_thread.py, storage_thread.py, display_thread.py)
- 完整UI组件系统 (missionpanel.py, general_set.py, curvepanel.py, historyvideopanel.py)
- 数据集页面组件 (crop_preview_panel.py, datacollection_panel.py)
- 模型页面Handler系统 (model_page_handler.py, model_set_handler.py, model_signal_handler.py)
- 部分任务面板Handler (missionpanel_handler.py)
---
*最后更新: 2025-11-26 21:00*
# 调试语句清理报告
**清理时间**: 2025-11-26 20:31:38
**备份目录**: backups\cleanup_20251126_203137
## 清理统计
- 扫描文件总数: 108
- 修改文件数量: 58
- 删除语句总数: 540
## 详细清理记录
| 文件 | 删除数量 |
|------|----------|
| handlers\modelpage\model_test_handler.py | 85 |
| handlers\videopage\missionpanel_handler.py | 46 |
| handlers\modelpage\model_training_handler.py | 37 |
| handlers\videopage\general_set_handler.py | 33 |
| widgets\datasetpage\datapreprocess_panel.py | 30 |
| handlers\videopage\amplify_window_handler.py | 20 |
| widgets\videopage\general_set.py | 20 |
| widgets\modelpage\training_page.py | 17 |
| handlers\modelpage\test_integration.py | 14 |
| handlers\modelpage\tools\test_dat_conversion.py | 13 |
| handlers\modelpage\tools\test_bat_model.py | 12 |
| handlers\modelpage\tools\test_pt_detection.py | 12 |
| handlers\cleanup_debug_statements.py | 11 |
| widgets\videopage\channelpanel.py | 11 |
| widgets\videopage\missionpanel.py | 11 |
| handlers\datasetpage\crop_preview_handler.py | 10 |
| handlers\app.py | 9 |
| handlers\datasetpage\test_realtime_monitoring.py | 9 |
| widgets\datasetpage\datacollection_panel.py | 9 |
| widgets\datasetpage\test_labelme_integration.py | 9 |
| widgets\datasetpage\crop_preview_panel.py | 8 |
| handlers\modelpage\tools\test_bat_image_detection.py | 7 |
| handlers\modelpage\tools\test_dat_image_detection.py | 7 |
| handlers\videopage\thread_manager\result_distributor.py | 6 |
| widgets\locate_debug_statements.py | 6 |
| widgets\style_manager.py | 6 |
| widgets\videopage\curvepanel.py | 6 |
| handlers\datasetpage\datacollection_channel_handler.py | 5 |
| handlers\videopage\mock_physical_zoom_controller.py | 5 |
| handlers\videopage\detection.py | 4 |
| handlers\videopage\thread_manager\threads\display_thread.py | 4 |
| widgets\videopage\historyvideopanel.py | 4 |
| handlers\modelpage\cleanup_test_code.py | 3 |
| handlers\modelpage\model_trainingworker_handler.py | 3 |
| handlers\videopage\channelpanel_handler.py | 3 |
| handlers\videopage\curvepanel_handler.py | 3 |
| handlers\videopage\test_handler.py | 3 |
| handlers\videopage\HK_SDK\test_hikcapture.py | 3 |
| handlers\videopage\thread_manager\threads\storage_thread.py | 3 |
| handlers\videopage\thread_manager\threads\test_model_loading.py | 3 |
| widgets\datasetpage\annotationtool.py | 3 |
| widgets\datasetpage\crop_config_dialog.py | 3 |
| widgets\datasetpage\videobrowser.py | 3 |
| widgets\datasetpage\videoclipper.py | 3 |
| handlers\view_handler.py | 2 |
| handlers\modelpage\model_page_handler.py | 2 |
| handlers\modelpage\model_set_handler.py | 2 |
| widgets\modelpage\modelset_page.py | 2 |
| handlers\datasetpage\datapreprocess_handler.py | 1 |
| handlers\videopage\HK_SDK\FocusControl.py | 1 |
| handlers\videopage\HK_SDK\HCNetSDK.py | 1 |
| handlers\videopage\HK_SDK\HKcapture.py | 1 |
| handlers\videopage\thread_manager\thread_manager.py | 1 |
| widgets\menubar.py | 1 |
| widgets\datasetpage\test_crop_preview_integration.py | 1 |
| widgets\datasetpage\training_panel.py | 1 |
| widgets\videopage\logicsetting_dialogue.py | 1 |
| widgets\videopage\modelsetting_dialogue.py | 1 |
"""
调试日志模块
使用logging模块替代print进行调试输出
日志文件保存在: D:\restructure\liquid_level_line_detection_system\database\log\debuglog
"""
import logging
import os
import sys
from pathlib import Path
from datetime import datetime
from typing import Optional
class DebugLogger:
"""调试日志管理器"""
_instance = None
_loggers = {}
def __new__(cls):
"""单例模式"""
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self):
"""初始化日志管理器"""
if not hasattr(self, '_initialized'):
# 获取项目根目录(支持打包后的环境)
if getattr(sys, 'frozen', False):
# 打包后的环境
base_dir = Path(sys.executable).parent
else:
# 开发环境
base_dir = Path(__file__).parent.parent
self.log_dir = base_dir / "database" / "log" / "debuglog"
self.log_dir.mkdir(parents=True, exist_ok=True)
self._initialized = True
def get_logger(
self,
name: str,
level: int = logging.DEBUG,
console_output: bool = True,
file_output: bool = True
) -> logging.Logger:
"""
获取或创建logger
Args:
name: logger名称(通常使用模块名)
level: 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
console_output: 是否输出到控制台
file_output: 是否输出到文件
Returns:
logging.Logger: 配置好的logger实例
"""
# 如果logger已存在,直接返回
if name in self._loggers:
return self._loggers[name]
# 创建logger
logger = logging.getLogger(name)
logger.setLevel(level)
# 清除已有的handlers(避免重复添加)
logger.handlers.clear()
# 定义日志格式
# 详细格式:时间 - 名称 - 级别 - 文件:行号 - 消息
detailed_formatter = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# 简洁格式:时间 - 级别 - 消息
simple_formatter = logging.Formatter(
fmt='%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
# 控制台输出(使用简洁格式)
if console_output:
console_handler = logging.StreamHandler()
console_handler.setLevel(level)
console_handler.setFormatter(simple_formatter)
logger.addHandler(console_handler)
# 文件输出(使用详细格式)
if file_output:
# 按日期创建日志文件
today = datetime.now().strftime('%Y%m%d')
log_file = self.log_dir / f"{name}_{today}.log"
file_handler = logging.FileHandler(
log_file,
mode='a',
encoding='utf-8'
)
file_handler.setLevel(level)
file_handler.setFormatter(detailed_formatter)
logger.addHandler(file_handler)
# 缓存logger
self._loggers[name] = logger
return logger
def create_module_logger(
self,
module_name: str,
level: int = logging.DEBUG
) -> logging.Logger:
"""
为模块创建专用logger(快捷方法)
Args:
module_name: 模块名称
level: 日志级别
Returns:
logging.Logger: 配置好的logger
"""
return self.get_logger(
name=module_name,
level=level,
console_output=True,
file_output=True
)
def clear_old_logs(self, days: int = 7):
"""
清理旧日志文件
Args:
days: 保留最近多少天的日志
"""
from datetime import timedelta
cutoff_date = datetime.now() - timedelta(days=days)
for log_file in self.log_dir.glob("*.log"):
try:
file_time = datetime.fromtimestamp(log_file.stat().st_mtime)
if file_time < cutoff_date:
log_file.unlink()
print(f"已删除旧日志: {log_file.name}")
except Exception as e:
print(f"删除日志文件失败 {log_file.name}: {e}")
# 全局单例实例
_debug_logger_instance = DebugLogger()
def get_logger(
name: str,
level: int = logging.DEBUG,
console_output: bool = True,
file_output: bool = True
) -> logging.Logger:
"""
获取logger的便捷函数
使用示例:
from handlers.debuglog import get_logger
logger = get_logger(__name__)
logger.debug("调试信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("严重错误")
Args:
name: logger名称(建议使用 __name__)
level: 日志级别
console_output: 是否输出到控制台
file_output: 是否输出到文件
Returns:
logging.Logger: 配置好的logger
"""
return _debug_logger_instance.get_logger(name, level, console_output, file_output)
def clear_old_logs(days: int = 7):
"""
清理旧日志文件的便捷函数
Args:
days: 保留最近多少天的日志
"""
_debug_logger_instance.clear_old_logs(days)
# 预定义的日志级别常量
DEBUG = logging.DEBUG # 10 - 详细的调试信息
INFO = logging.INFO # 20 - 一般信息
WARNING = logging.WARNING # 30 - 警告信息
ERROR = logging.ERROR # 40 - 错误信息
CRITICAL = logging.CRITICAL # 50 - 严重错误
if __name__ == "__main__":
"""测试代码"""
# 测试1: 基本使用
print("="*80)
print("测试1: 基本日志功能")
print("="*80)
logger = get_logger("test_module")
logger.debug("这是调试信息")
logger.info("这是普通信息")
logger.warning("这是警告信息")
logger.error("这是错误信息")
logger.critical("这是严重错误信息")
# 测试2: 不同模块的logger
print("\n" + "="*80)
print("测试2: 多个模块的logger")
print("="*80)
logger1 = get_logger("module1")
logger2 = get_logger("module2")
logger1.info("来自模块1的消息")
logger2.info("来自模块2的消息")
# 测试3: 只输出到文件
print("\n" + "="*80)
print("测试3: 只输出到文件(控制台看不到)")
print("="*80)
file_only_logger = get_logger(
"file_only",
console_output=False,
file_output=True
)
file_only_logger.info("这条消息只会出现在日志文件中")
print("(上面的消息已写入文件,但不会显示在控制台)")
# 测试4: 不同日志级别
print("\n" + "="*80)
print("测试4: 设置不同的日志级别")
print("="*80)
info_logger = get_logger("info_level", level=INFO)
info_logger.debug("这条DEBUG消息不会显示(级别太低)")
info_logger.info("这条INFO消息会显示")
info_logger.warning("这条WARNING消息会显示")
# 测试5: 异常日志
print("\n" + "="*80)
print("测试5: 记录异常信息")
print("="*80)
error_logger = get_logger("error_test")
try:
result = 1 / 0
except Exception as e:
error_logger.error(f"发生异常: {e}", exc_info=True)
print("\n" + "="*80)
print("测试完成!")
print(f"日志文件保存在: {_debug_logger_instance.log_dir}")
print("="*80)
from ast import main
123131441
fsafasa
main
\ No newline at end of file
# AutoAnnotationDetector 使用说明
## 功能概述
`AutoAnnotationDetector` 整合了标框和标点两个功能,共享相同的检测逻辑,但提供不同的输出方式。
## 核心设计
```
输入图像 → detect() → 检测结果
┌─────────┴─────────┐
↓ ↓
get_boxes() get_points()
↓ ↓
box位置数据 点位置数据
↓ ↓
draw_boxes() draw_points()
↓ ↓
绘制框的图像 绘制点的图像
```
## 快速开始
```python
from handlers.videopage.auto_dot import AutoAnnotationDetector
import cv2
# 1. 创建检测器
detector = AutoAnnotationDetector(
model_path="path/to/model.dat",
device='cuda'
)
# 2. 加载图像
image = cv2.imread("test.jpg")
# 3. 执行核心检测(只需执行一次)
detection_result = detector.detect(
image=image,
conf_threshold=0.5,
min_area=100
)
# 4a. 获取box位置数据
boxes = detector.get_boxes(
detection_result,
padding=10,
merge_all=True # True=合并所有类别, False=按类别分别生成
)
# 4b. 获取点位置数据
points = detector.get_points(detection_result)
# 5a. 绘制box
box_image = detector.draw_boxes(image, boxes)
cv2.imwrite("box_result.jpg", box_image)
# 5b. 绘制点
point_image = detector.draw_points(image, points)
cv2.imwrite("point_result.jpg", point_image)
```
## API 详解
### 1. detect() - 核心检测方法
执行YOLO推理,返回分割结果。
**参数:**
- `image`: 输入图像 (numpy.ndarray)
- `conf_threshold`: 置信度阈值 (默认0.5)
- `min_area`: 最小面积阈值,过滤小区域 (默认100像素)
**返回:**
```python
{
'success': bool,
'masks': List[np.ndarray], # 有效的mask列表
'class_names': List[str], # 对应的类别名称
'confidences': List[float], # 对应的置信度
'image_shape': tuple # 图像尺寸 (height, width)
}
```
### 2. get_boxes() - 生成box位置数据
从检测结果生成box坐标。
**参数:**
- `detection_result`: detect()的返回结果
- `padding`: box边界扩展像素数 (默认10)
- `merge_all`: 是否合并所有类别 (默认True)
**返回:**
```python
[
{
'x1': int, # 左上角x
'y1': int, # 左上角y
'x2': int, # 右下角x
'y2': int, # 右下角y
'classes': List[str], # 包含的类别
'area': int # box面积
},
...
]
```
### 3. get_points() - 生成点位置数据
从检测结果生成容器顶部和底部点坐标。
**参数:**
- `detection_result`: detect()的返回结果
**返回:**
```python
[
{
'top': int, # 顶部y坐标
'bottom': int, # 底部y坐标
'top_x': int, # 顶部x坐标
'bottom_x': int, # 底部x坐标
'height': int, # 容器高度
'method': str, # 检测方法
'confidence': float # 置信度
},
...
]
```
### 4. draw_boxes() - 绘制box
在图像上绘制box框。
**参数:**
- `image`: 输入图像
- `boxes`: get_boxes()返回的box列表
**返回:** 绘制完成的图像
### 5. draw_points() - 绘制点
在图像上绘制顶部和底部点。
**参数:**
- `image`: 输入图像
- `points`: get_points()返回的点列表
**返回:** 绘制完成的图像
## 使用场景
### 场景1: 只需要box标注
```python
detection_result = detector.detect(image)
boxes = detector.get_boxes(detection_result, merge_all=True)
annotated_image = detector.draw_boxes(image, boxes)
```
### 场景2: 只需要点标注
```python
detection_result = detector.detect(image)
points = detector.get_points(detection_result)
annotated_image = detector.draw_points(image, points)
```
### 场景3: 同时需要box和点
```python
# 只需执行一次检测
detection_result = detector.detect(image)
# 分别获取box和点
boxes = detector.get_boxes(detection_result)
points = detector.get_points(detection_result)
# 分别绘制
box_image = detector.draw_boxes(image, boxes)
point_image = detector.draw_points(image, points)
```
### 场景4: 获取位置数据但不绘制
```python
detection_result = detector.detect(image)
boxes = detector.get_boxes(detection_result)
points = detector.get_points(detection_result)
# 直接使用位置数据,不绘制图像
for box in boxes:
print(f"Box: ({box['x1']}, {box['y1']}) -> ({box['x2']}, {box['y2']})")
for point in points:
print(f"Top: ({point['top_x']}, {point['top']})")
print(f"Bottom: ({point['bottom_x']}, {point['bottom']})")
```
## 点检测逻辑
根据检测到的类别组合,自动选择最佳检测方法:
1. **liquid_only**: 仅liquid → liquid最低点 + liquid最高点
2. **air_only**: 仅air → air最低点 + air最高点
3. **foam_only**: 仅foam → foam最低点 + foam最高点
4. **liquid_air**: liquid + air → liquid最低点 + air最高点
5. **liquid_foam**: liquid + foam → liquid最低点 + foam最高点
6. **liquid_foam_air**: liquid + foam + air → liquid最低点 + air最高点
7. **foam_air**: foam + air → foam最低点 + air最高点
## 兼容性
为保持向后兼容,提供了别名:
```python
AutoboxDetector = AutoAnnotationDetector
```
旧代码可以继续使用 `AutoboxDetector`
## 测试
运行测试函数:
```bash
python auto_dot.py
```
测试会自动:
1. 执行一次检测
2. 生成box标注并保存
3. 生成点标注并保存
4. 显示结果图像
# 自动标点与自动选框功能模块使用说明
## 功能概述
`auto_dot.py` 模块实现了两个核心功能:
1. **AutoDotDetector**: 基于YOLO分割掩码的自动标点功能,自动检测容器的顶部和底部位置
2. **AutoboxDetector**: 自动选择标注区域功能,自动生成包含分割结果的最小面积box
## 核心特性
- **输入**: 图片 + 检测框
- **输出**: 点位置信息 + 标注后的图片
- **检测方法**:
1. **liquid底部 + air顶部** (最可靠)
2. **liquid底部 + liquid顶部** (次选)
3. **air底部 + air顶部** (备选)
## 独立调试
### 1. 准备测试数据
将测试图片放置到:
```
D:\restructure\liquid_level_line_detection_system\test_data\test_image.jpg
```
### 2. 配置检测框
编辑 `auto_dot.py` 中的 `test_auto_dot()` 函数,修改 `boxes` 参数:
```python
# 方式1: [x1, y1, x2, y2] 格式
boxes = [
[100, 200, 300, 600], # 第一个容器
[400, 200, 600, 600], # 第二个容器
]
# 方式2: [cx, cy, size] 格式
boxes = [
[200, 400, 400], # 中心点(200, 400), 尺寸400
]
```
### 3. 运行测试
```bash
cd D:\restructure\liquid_level_line_detection_system\handlers\videopage
python auto_dot.py
```
### 4. 查看结果
- **控制台输出**: 详细的检测过程和结果
- **标注图片**: `D:\restructure\liquid_level_line_detection_system\test_output\auto_dot_result.jpg`
## API 使用示例
```python
from handlers.videopage.auto_dot import AutoDotDetector
import cv2
# 1. 创建检测器
detector = AutoDotDetector(
model_path="path/to/model.dat",
device='cuda' # 或 'cpu'
)
# 2. 加载图片
image = cv2.imread("test_image.jpg")
# 3. 定义检测框
boxes = [
[100, 200, 300, 600], # [x1, y1, x2, y2]
]
# 4. 执行检测
result = detector.detect_container_boundaries(
image=image,
boxes=boxes,
conf_threshold=0.5
)
# 5. 获取结果
if result['success']:
for container in result['containers']:
print(f"容器 {container['index']}:")
print(f" 顶部: ({container['top_x']}, {container['top']})")
print(f" 底部: ({container['bottom_x']}, {container['bottom']})")
print(f" 高度: {container['height']}px")
print(f" 置信度: {container['confidence']:.3f}")
# 保存标注图片
cv2.imwrite("result.jpg", result['annotated_image'])
```
## 输出数据结构
```python
{
'success': bool, # 检测是否成功
'containers': [
{
'index': int, # 容器索引
'top': int, # 顶部y坐标
'bottom': int, # 底部y坐标
'top_x': int, # 顶部x坐标
'bottom_x': int, # 底部x坐标
'height': int, # 容器高度(像素)
'confidence': float, # 检测置信度
'method': str # 检测方法
},
...
],
'annotated_image': np.ndarray # 标注后的图片
}
```
## 检测方法说明
### 方法1: liquid_air (最可靠)
- **容器底部**: liquid掩码的最低点
- **容器顶部**: air掩码的最高点
- **适用场景**: 同时检测到液体和空气
### 方法2: liquid_only (次选)
- **容器底部**: liquid掩码的最低点
- **容器顶部**: liquid掩码的最高点
- **适用场景**: 只检测到液体,未检测到空气
### 方法3: air_only (备选)
- **容器底部**: air掩码的最低点
- **容器顶部**: air掩码的最高点
- **适用场景**: 只检测到空气,未检测到液体
## 可视化标注
标注图片包含:
- **绿色圆点**: 容器顶部
- **红色圆点**: 容器底部
- **青色连线**: 容器高度
- **水平参考线**: 顶部和底部的水平位置
- **文字标注**: Top-N, Bottom-N, 高度值
## 注意事项
1. **模型路径**: 确保模型文件存在且可访问
2. **检测框位置**: 检测框应覆盖完整的容器区域
3. **置信度阈值**: 默认0.5,可根据实际情况调整
4. **GPU加速**: 建议使用CUDA加速,提高检测速度
## 调试技巧
1. **查看控制台输出**: 详细的检测过程日志
2. **检查标注图片**: 验证检测结果的准确性
3. **调整检测框**: 如果检测失败,尝试调整检测框的位置和大小
4. **降低置信度**: 如果检测不到掩码,尝试降低 `conf_threshold`
## AutoboxDetector - 自动选框功能
### 功能说明
自动选择标注区域类,输入图像后自动生成包含分割结果的最小面积box。
### 核心特性
- **输入**: 图像
- **输出**: box位置数据 + 绘制完框的图像
- **box设置逻辑**:
1. 对每个类别(liquid、air、foam)的分割结果,合并同类别的所有mask
2. 计算每个类别mask的最小包围框
3. 支持设置最小面积阈值过滤小区域
4. 支持设置padding扩展box边界
### API 使用示例
```python
from handlers.videopage.auto_dot import AutoboxDetector
import cv2
# 1. 创建检测器
detector = AutoboxDetector(
model_path="path/to/model.dat",
device='cuda' # 或 'cpu'
)
# 2. 加载图片
image = cv2.imread("test_image.jpg")
# 3. 执行检测
result = detector.detect_boxes(
image=image,
conf_threshold=0.5, # 置信度阈值
min_area=100, # 最小面积阈值(像素)
padding=10 # box边界扩展像素数
)
# 4. 获取结果
if result['success']:
for box in result['boxes']:
print(f"类别: {box['class']}")
print(f"坐标: ({box['x1']}, {box['y1']}) -> ({box['x2']}, {box['y2']})")
print(f"面积: {box['area']}px²")
# 保存标注图片
cv2.imwrite("box_result.jpg", result['annotated_image'])
```
### 输出数据结构
```python
{
'success': bool, # 检测是否成功
'boxes': [
{
'x1': int, # 左上角x坐标
'y1': int, # 左上角y坐标
'x2': int, # 右下角x坐标
'y2': int, # 右下角y坐标
'class': str, # 类别名称 (liquid/air/foam)
'area': int # box面积(像素²)
},
...
],
'annotated_image': np.ndarray # 绘制完框的图像
}
```
### 可视化标注
标注图片包含:
- **绿色框**: liquid区域
- **蓝色框**: air区域
- **橙色框**: foam区域
- **类别标签**: 显示在框的左上角
### 独立测试
运行测试函数:
```bash
cd D:\restructure\liquid_level_line_detection_system\handlers\videopage
python auto_dot.py
```
测试函数会自动调用 `test_auto_box()`,输出结果保存在:
```
D:\restructure\liquid_level_line_detection_system\test_output\auto_box_result.jpg
```
## 接入系统
调试成功后,可以在主系统中调用:
```python
from handlers.videopage.auto_dot import AutoDotDetector, AutoboxDetector
# 方式1: 自动标点 - 在标注页面添加"自动标点"按钮
detector = AutoDotDetector(model_path="path/to/model.dat")
result = detector.detect_container_boundaries(image, conf_threshold=0.5)
# 方式2: 自动选框 - 在标注页面添加"自动选框"按钮
detector = AutoboxDetector(model_path="path/to/model.dat")
result = detector.detect_boxes(image, conf_threshold=0.5, min_area=100, padding=10)
```
# 通道列绿色状态更新功能
## 问题描述
当通道的 `channel_detect_status``true` 时,对应任务行的对应通道列应该变为绿色,但之前没有实现这个功能。
## 解决方案
### 1. 在 `MissionTextStatus` 类中添加新方法
#### `setChannelColumnGreenOnDetection(task_folder_name, channel_num)`
**功能**:启动检测线程时对应任务的对应通道列置为绿色
**参数**
- `task_folder_name`: 任务文件夹名称(如 "1_1")
- `channel_num`: 通道编号(1-4)
**位置**:第1819-1843行
```python
def setChannelColumnGreenOnDetection(self, task_folder_name, channel_num):
"""
启动检测线程时对应任务的对应通道列置为绿色
Args:
task_folder_name: 任务文件夹名称(如 "1_1")
channel_num: 通道编号(1-4)
"""
try:
# 查找对应的任务行
row_index = self._findTaskRow(task_folder_name)
if row_index >= 0:
# 通道列从第3列开始(0:任务编号, 1:任务名称, 2:状态, 3-6:通道1-4)
col_index = 3 + (channel_num - 1)
channel_item = self.table.item(row_index, col_index)
if channel_item:
channel_item.setForeground(self.COLOR_GREEN)
print(f"✅ [文本状态] 任务 {task_folder_name} 通道{channel_num}列已置为绿色(检测中)")
else:
print(f"⚠️ [文本状态] 未找到任务 {task_folder_name}")
except Exception as e:
print(f"❌ [文本状态] 设置通道列检测状态颜色失败: {e}")
import traceback
traceback.print_exc()
```
#### `resetChannelColumnOnStopDetection(task_folder_name, channel_num)`
**功能**:停止检测线程时恢复通道列颜色
**参数**
- `task_folder_name`: 任务文件夹名称(如 "1_1")
- `channel_num`: 通道编号(1-4)
**位置**:第1845-1868行
```python
def resetChannelColumnOnStopDetection(self, task_folder_name, channel_num):
"""
停止检测线程时恢复通道列颜色
Args:
task_folder_name: 任务文件夹名称(如 "1_1")
channel_num: 通道编号(1-4)
"""
try:
row_index = self._findTaskRow(task_folder_name)
if row_index >= 0:
col_index = 3 + (channel_num - 1)
channel_item = self.table.item(row_index, col_index)
if channel_item:
# 如果是选中行,恢复为黑色;否则恢复为灰色
if row_index == self.selected_row:
channel_item.setForeground(self.COLOR_BLACK)
else:
channel_item.setForeground(self.COLOR_GRAY)
print(f"✅ [文本状态] 任务 {task_folder_name} 通道{channel_num}列已恢复")
except Exception as e:
print(f"❌ [文本状态] 恢复通道列颜色失败: {e}")
import traceback
traceback.print_exc()
```
### 2. 修改 `_updateChannelColumnColor` 方法
**位置**:第1526-1650行
**主要改动**
1. **遍历所有任务行,更新通道列颜色**(第1557-1599行)
- 获取每个任务使用的通道列表
- 检查每个通道的检测状态
- 如果通道正在检测该任务,设置通道列为绿色
- 如果通道未检测或未分配该任务,恢复通道列颜色
2. **简化状态列更新逻辑**(第1601-1626行)
- 删除重复的通道列绿色设置
- 只检查所有通道是否都在检测,用于更新状态列
## 工作流程
### 启动检测时
1. `thread_manager.py``start_detection_thread` 调用 `_updateChannelColumnColor`
2. `_updateChannelColumnColor` 遍历所有任务行
3. 对于每个任务的每个通道:
- 检查通道是否正在执行该任务
- 检查通道的 `channel_detect_status`(通过 `channelXdetect` 变量)
- 如果检测中,调用 `setChannelColumnGreenOnDetection` 设置通道列为绿色
### 停止检测时
1. `thread_manager.py``stop_detection_thread` 调用 `_updateChannelColumnColor`
2. `_updateChannelColumnColor` 遍历所有任务行
3. 对于每个任务的每个通道:
- 检查通道是否未检测或未分配该任务
- 调用 `resetChannelColumnOnStopDetection` 恢复通道列颜色
## 颜色规则
| 状态 | 颜色 | RGB | 适用范围 |
|------|------|-----|----------|
| 默认/未启动 | 灰色 | (128, 128, 128) | 通道列 |
| 已选中 | 黑色 | (0, 0, 0) | 通道列(选中行) |
| 检测中 | 绿色 | (0, 128, 0) | 通道列(检测中) |
## 表格列索引
| 列索引 | 列名 | 说明 |
|--------|------|------|
| 0 | 任务编号 | - |
| 1 | 任务名称 | - |
| 2 | 状态 | "未启动"/"已启动"/"检测中" |
| 3 | 通道1 | 通道列,检测时变绿 |
| 4 | 通道2 | 通道列,检测时变绿 |
| 5 | 通道3 | 通道列,检测时变绿 |
| 6 | 通道4 | 通道列,检测时变绿 |
| 7 | 曲线 | 按钮列 |
## 测试建议
1. **启动单个通道检测**
- 选择一个任务并启动某个通道的检测
- 检查该任务行对应通道列是否变为绿色
- 检查其他通道列是否保持原有颜色
2. **启动多个通道检测**
- 选择一个任务并启动多个通道的检测
- 检查所有检测中的通道列是否都变为绿色
3. **停止检测**
- 停止某个通道的检测
- 检查该通道列是否恢复为灰色(或黑色,如果是选中行)
4. **切换选中行**
- 选中一个有检测中通道的任务行
- 检查非检测中的通道列是否变为黑色
- 检查检测中的通道列是否保持绿色
5. **多任务并行**
- 启动多个任务的不同通道检测
- 检查每个任务的通道列颜色是否正确
## 注意事项
1. **通道列优先级**:检测中的通道列始终为绿色,不受选中行影响
2. **自动恢复**:停止检测时自动恢复通道列颜色
3. **选中状态保持**:恢复颜色时会考虑当前选中行状态
4. **异常处理**:所有方法都包含完整的异常处理
## 完成时间
2025-11-29 13:35
# 任务面板文本状态管理清理完成报告
## ✅ 清理完成
所有其他设置任务面板文本状态的代码已全部删除,现在统一由 `MissionTextStatus` 类管理。
## 已删除的内容
### 1. ✅ `_updateChannelCellColors` 方法
**原位置**:第897-977行
**现状态**:已替换为注释(第897-898行)
```python
# 🔥 已删除 _updateChannelCellColors 方法
# 通道列颜色现在由 MissionTextStatus 类统一管理
```
### 2. ✅ `_setTaskRowChannelColor` 方法
**原位置**:第1404-1474行
**现状态**:已完全删除
### 3. ✅ `_updateRowColor` 方法
**原位置**:第1523-1632行
**现状态**:已删除(第1523-1524行)
### 4. ✅ `_updateRowColorForQTableWidgetItem` 方法
**原位置**:第1634-1675行
**现状态**:已删除(第1523-1524行)
**替换注释**
```python
# 🔥 已删除 _updateRowColor 和 _updateRowColorForQTableWidgetItem 方法
# 所有文本颜色管理现在由 MissionTextStatus 类统一处理
```
## 已删除的方法调用
### 1. ✅ `_loadAllMissions` 中的调用
```python
# 删除前:
self._updateChannelCellColors()
# 删除后:
# 已删除,由 MissionTextStatus.initializeAllRowsGray() 替代
```
### 2. ✅ `_handleTaskSelected` 中的调用
```python
# 删除前:
self._setTaskRowChannelColor(task_folder_name, 0, '#000000')
# 删除后:
# 已删除
```
### 3. ✅ `_refreshAllTaskStatus` 中的调用
```python
# 删除前:
self._updateRowColorForQTableWidgetItem(row, new_status)
# 删除后:
# 已删除
```
### 4. ✅ `_updateTaskStatus` 中的调用
```python
# 删除前:
self._updateRowColor(row, new_status)
# 删除后:
# 已删除
```
## 新的文本状态管理架构
### MissionTextStatus 类统一管理
所有任务面板的文本颜色现在由 `MissionTextStatus` 类统一管理:
#### 1. 初始化(规则1)
```python
self.mission_text_status.initializeAllRowsGray()
```
- **触发时机**:程序启动加载任务列表后
- **效果**:所有任务行文本置为灰色
#### 2. 选中行(规则2)
```python
self.mission_text_status.setRowBlackOnSelect(row)
```
- **触发时机**:用户单击任务行
- **效果**:选中行文本置为黑色,之前选中的行恢复为灰色
#### 3. 检测中(规则3)
```python
self.mission_text_status.setStatusColumnGreenOnDetection(task_folder_name)
```
- **触发时机**:启动检测线程时
- **效果**:对应任务的状态列置为绿色
#### 4. 新建任务(规则4)
```python
self.mission_text_status.initializeNewTaskRowGray(row_index)
```
- **触发时机**:新建任务确认后
- **效果**:新任务行文本置为灰色
## 颜色规则
| 状态 | 颜色 | RGB | 适用范围 |
|------|------|-----|----------|
| 默认/未启动 | 灰色 | (128, 128, 128) | 所有列 |
| 已选中 | 黑色 | (0, 0, 0) | 除状态列外的所有列 |
| 检测中 | 绿色 | (0, 128, 0) | 仅状态列 |
## 优势总结
### 1. 代码简洁
- 删除了约 **200+ 行**重复的颜色设置代码
- 统一的管理接口,易于理解和维护
### 2. 逻辑清晰
- 所有颜色规则集中在一个类中
- 避免了多处设置导致的冲突
### 3. 易于扩展
- 新增颜色规则只需在 `MissionTextStatus` 类中添加方法
- 不需要修改多个文件
### 4. 状态一致
- 统一的状态管理确保UI显示一致
- 避免了不同方法设置不同颜色的问题
## 测试建议
1. **初始化测试**:启动程序,检查所有任务是否为灰色 ✅
2. **选中测试**:单击任务行,检查是否变为黑色 ✅
3. **切换选中测试**:单击另一行,检查之前的行是否恢复灰色 ✅
4. **检测状态测试**:启动检测线程,检查状态列是否变绿色
5. **新建任务测试**:新建任务,检查新行是否为灰色 ✅
6. **状态列优先级测试**:选中检测中的任务,检查状态列是否保持绿色
## 相关文档
1. **MISSION_TEXT_STATUS_USAGE.md** - 使用说明文档
2. **MISSION_TEXT_STATUS_INTEGRATION.md** - 集成报告文档
3. **CLEANUP_SUMMARY.md** - 清理总结文档
4. **CLEANUP_COMPLETE.md** - 本文档(完成报告)
## 完成时间
2025-11-29 13:26
## 总结
✅ 所有旧的文本状态管理代码已完全清理
✅ 新的 `MissionTextStatus` 类已完全集成
✅ 所有4个规则已正确实现
✅ 代码更加简洁、清晰、易于维护
**任务面板文本状态管理重构完成!** 🎉
# 任务面板文本状态管理清理总结
## 清理目标
删除所有其他设置任务面板文本状态的代码,统一由 `MissionTextStatus` 类管理。
## 已删除的方法
### 1. `_updateChannelCellColors` 方法
**位置**:第897-898行(已替换为注释)
**原功能**:更新任务面板中通道列的文本颜色
- 默认:灰色(未分配任务)
- 该通道被分配了任务:黑色
- 检测中且是该通道当前任务:绿色
**删除原因**:通道列颜色现在由 `MissionTextStatus` 类统一管理
### 2. `_setTaskRowChannelColor` 方法
**位置**:已删除(原第1404-1474行)
**原功能**:设置任务行对应通道列的颜色
- 先将所有任务行的所有通道列重置为灰色
- 然后根据 channelmission 状态,将对应的通道列置黑
**删除原因**:通道列颜色现在由 `MissionTextStatus` 类统一管理
### 3. `_updateRowColor` 方法
**位置**:第1523-1632行(需要删除)
**原功能**:根据状态更新行的字体颜色
- 使用字体管理器设置颜色
- 处理QLabel控件和QTableWidgetItem
**删除原因**:行颜色现在由 `MissionTextStatus` 类统一管理
### 4. `_updateRowColorForQTableWidgetItem` 方法
**位置**:第1634-1675行(需要删除)
**原功能**:根据状态更新行的字体颜色 - 适配纯QTableWidgetItem方案
- 只对未启动任务设置灰色
- 已启动任务保持默认颜色
**删除原因**:行颜色现在由 `MissionTextStatus` 类统一管理
## 已删除的方法调用
### 1. 在 `_loadAllMissions` 中
```python
# 删除前
self._updateChannelCellColors()
# 删除后
# 已删除,由 MissionTextStatus.initializeAllRowsGray() 替代
```
### 2. 在 `_handleTaskSelected` 中
```python
# 删除前
self._setTaskRowChannelColor(task_folder_name, 0, '#000000')
# 删除后
# 已删除,由 MissionTextStatus 类统一管理
```
### 3. 在 `_refreshAllTaskStatus` 中
```python
# 删除前
self._updateRowColorForQTableWidgetItem(row, new_status)
# 删除后
# 已删除,由 MissionTextStatus 类统一管理
```
### 4. 在 `_updateTaskStatus` 中
```python
# 删除前
self._updateRowColor(row, new_status)
# 删除后
# 已删除,由 MissionTextStatus 类统一管理
```
## 需要手动删除的代码
由于方法体较长,以下方法需要手动删除或替换为注释:
1. **`_updateRowColor` 方法**(第1523-1632行)
2. **`_updateRowColorForQTableWidgetItem` 方法**(第1634-1675行)
建议替换为:
```python
# 🔥 已删除 _updateRowColor 和 _updateRowColorForQTableWidgetItem 方法
# 所有文本颜色管理现在由 MissionTextStatus 类统一处理
```
## 新的文本状态管理流程
所有任务面板的文本颜色现在由 `MissionTextStatus` 类统一管理:
1. **初始化**`initializeAllRowsGray()` - 所有行灰色
2. **选中行**`setRowBlackOnSelect(row)` - 选中行黑色
3. **检测中**`setStatusColumnGreenOnDetection(task_folder_name)` - 状态列绿色
4. **新建任务**`initializeNewTaskRowGray(row)` - 新行灰色
## 优势
1. **统一管理**:所有文本颜色由一个类管理,逻辑清晰
2. **易于维护**:修改颜色规则只需修改一个类
3. **避免冲突**:不会有多个地方同时设置颜色导致冲突
4. **代码简洁**:删除了大量重复的颜色设置代码
## 注意事项
1. 删除这些方法后,确保没有其他地方调用它们
2. 所有颜色设置都应通过 `MissionTextStatus` 类进行
3. 如果需要新的颜色规则,应在 `MissionTextStatus` 类中添加新方法
# MissionTextStatus 集成完成报告
## 集成概述
已成功将 `MissionTextStatus` 类集成到 `MissionPanelHandler` 中,实现了任务面板文本状态的统一管理。
## 实现的功能
### ✅ 规则1:初始化所有行为灰色
**位置**`_loadAllMissions` 方法(第889-891行)
```python
# 🔥 第四步:初始化所有行为灰色(规则1)
if self.mission_text_status:
self.mission_text_status.initializeAllRowsGray()
```
**触发时机**
- 程序启动时加载所有任务后
- 删除任务后重新加载任务列表时
### ✅ 规则2:单击选中行时置为黑色
**位置**
1. `connectMissionPanel` 方法(第67-68行)- 连接信号
```python
# 🔥 连接表格单击事件(规则2:单击选中行时置为黑色)
mission_panel.table.cellClicked.connect(self._onMissionRowClicked)
```
2. `_onMissionRowClicked` 方法(第117-126行)- 处理单击
```python
def _onMissionRowClicked(self, row, column):
"""任务行被点击(规则2:单击选中行时该行文本置为黑色)"""
if self.mission_text_status:
self.mission_text_status.setRowBlackOnSelect(row)
```
**触发时机**:用户单击任务面板的任意单元格
### ✅ 规则3:启动检测时状态列置为绿色
**位置**`_updateChannelColumnColor` 方法(第1912-1915行)
```python
# 🔥 规则3:使用文本状态管理器设置状态列为绿色
if has_detecting_channels and all_channels_detecting:
if self.mission_text_status:
self.mission_text_status.setStatusColumnGreenOnDetection(task_folder_name)
```
**触发时机**
- 启动检测线程时(通过 `thread_manager.py` 调用)
- 停止检测线程时(通过 `thread_manager.py` 调用)
### ✅ 规则4:新建任务时初始化为灰色
**位置**`_handleTaskConfirmed` 方法(第190-193行)
```python
# 🔥 规则4:新建任务时该行文本初始为灰色
if self.mission_text_status:
row_index = self.mission_panel.table.rowCount() - 1
self.mission_text_status.initializeNewTaskRowGray(row_index)
```
**触发时机**:用户确认新建任务后
## 集成点总结
### 1. 初始化(`__init__`)
```python
self.mission_text_status = None # 🔥 文本状态管理器
```
### 2. 创建管理器(`connectMissionPanel`)
```python
# 🔥 创建文本状态管理器
self.mission_text_status = MissionTextStatus(mission_panel)
```
### 3. 连接信号(`connectMissionPanel`)
```python
# 🔥 连接表格单击事件(规则2:单击选中行时置为黑色)
mission_panel.table.cellClicked.connect(self._onMissionRowClicked)
```
### 4. 处理单击(新增方法)
```python
def _onMissionRowClicked(self, row, column):
"""任务行被点击(规则2:单击选中行时该行文本置为黑色)"""
if self.mission_text_status:
self.mission_text_status.setRowBlackOnSelect(row)
```
### 5. 加载任务后初始化(`_loadAllMissions`)
```python
# 🔥 第四步:初始化所有行为灰色(规则1)
if self.mission_text_status:
self.mission_text_status.initializeAllRowsGray()
```
### 6. 新建任务后初始化(`_handleTaskConfirmed`)
```python
# 🔥 规则4:新建任务时该行文本初始为灰色
if self.mission_text_status:
row_index = self.mission_panel.table.rowCount() - 1
self.mission_text_status.initializeNewTaskRowGray(row_index)
```
### 7. 检测状态变化时更新(`_updateChannelColumnColor`)
```python
# 🔥 规则3:使用文本状态管理器设置状态列为绿色
if has_detecting_channels and all_channels_detecting:
if self.mission_text_status:
self.mission_text_status.setStatusColumnGreenOnDetection(task_folder_name)
```
## 颜色规则
| 状态 | 颜色 | RGB | 触发条件 |
|------|------|-----|----------|
| 默认/未启动 | 灰色 | (128, 128, 128) | 初始化、加载任务、新建任务 |
| 已选中 | 黑色 | (0, 0, 0) | 单击任务行 |
| 检测中 | 绿色 | (0, 128, 0) | 启动检测线程且所有通道都在检测 |
## 特殊处理
### 状态列优先级
状态列(索引2)的颜色由检测状态决定,不受选中行影响:
- 选中行时:其他列置为黑色,状态列保持原有颜色
- 取消选中时:其他列恢复为灰色,状态列保持原有颜色
### 曲线按钮列
自动跳过曲线按钮列,不修改其颜色
### 选中状态记忆
管理器会记住当前选中的行,切换选中时自动恢复之前行的颜色
## 测试建议
1. **初始化测试**:启动程序,检查所有任务行是否为灰色
2. **选中测试**:单击任务行,检查该行是否变为黑色
3. **切换选中测试**:单击另一行,检查之前的行是否恢复为灰色
4. **检测状态测试**:启动检测线程,检查状态列是否变为绿色
5. **新建任务测试**:新建任务,检查新行是否为灰色
6. **状态列优先级测试**:选中检测中的任务行,检查状态列是否保持绿色
## 注意事项
1. 所有方法都包含 `if self.mission_text_status:` 检查,确保管理器已初始化
2. 所有方法都包含异常处理,确保不会因为单个操作失败而影响整体功能
3. 管理器在 `connectMissionPanel` 中创建,确保在使用前已初始化
4. 颜色设置通过 `QTableWidgetItem.setForeground()` 实现,与Qt的标准方式一致
## 文件修改记录
- **修改文件**`d:\restructure\liquid_level_line_detection_system\handlers\videopage\missionpanel_handler.py`
- **新增类**`MissionTextStatus`(第1992-2175行)
- **修改方法**
- `__init__`:添加 `mission_text_status` 属性
- `connectMissionPanel`:创建管理器并连接信号
- `_onMissionRowClicked`:新增方法处理单击事件
- `_handleTaskConfirmed`:添加新任务初始化逻辑
- `_loadAllMissions`:添加所有行初始化逻辑
- `_updateChannelColumnColor`:使用管理器设置绿色状态
# MissionTextStatus 使用说明
## 概述
`MissionTextStatus` 类用于统一管理任务面板中所有文本的颜色状态,实现以下逻辑:
1. **初始化**:所有任务文本默认为灰色
2. **选中行**:单击选中行时该行文本置为黑色
3. **检测中**:启动检测线程时对应任务的状态列置为绿色
4. **新建任务**:新建任务时文本初始为灰色
## 颜色规则
- **灰色 (128, 128, 128)**:未启动任务/默认状态
- **黑色 (0, 0, 0)**:已选中的任务行
- **绿色 (0, 128, 0)**:检测中的任务状态列
## 集成步骤
### 1. 在 MissionPanelHandler 中初始化
```python
class MissionPanelHandler:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.mission_panel = None
self.mission_text_status = None # 添加文本状态管理器
def connectMissionPanel(self, mission_panel):
"""连接任务面板信号"""
self.mission_panel = mission_panel
# 🔥 创建文本状态管理器
self.mission_text_status = MissionTextStatus(mission_panel)
# 🔥 初始化所有行为灰色
self.mission_text_status.initializeAllRowsGray()
# 连接信号...
```
### 2. 在任务面板加载时初始化
在加载任务列表后调用:
```python
def _loadMissionList(self):
"""加载任务列表"""
# ... 加载任务数据到表格 ...
# 🔥 加载完成后,初始化所有行为灰色
if self.mission_text_status:
self.mission_text_status.initializeAllRowsGray()
```
### 3. 在选中行时置为黑色
连接表格的 `itemClicked``cellClicked` 信号:
```python
def connectMissionPanel(self, mission_panel):
# ... 其他初始化代码 ...
# 🔥 连接单击事件
mission_panel.table.cellClicked.connect(self._onMissionRowClicked)
def _onMissionRowClicked(self, row, column):
"""任务行被点击"""
if self.mission_text_status:
self.mission_text_status.setRowBlackOnSelect(row)
```
### 4. 在启动检测时置状态列为绿色
修改 `_updateChannelColumnColor` 方法:
```python
def _updateChannelColumnColor(self):
"""根据通道检测状态更新任务面板中状态列"""
try:
# ... 收集正在执行的任务 ...
for task_folder_name in active_tasks:
# 检查该任务的所有通道是否都在检测
if all_channels_detecting:
# 🔥 使用文本状态管理器设置绿色
if self.mission_text_status:
self.mission_text_status.setStatusColumnGreenOnDetection(task_folder_name)
except Exception as e:
print(f"❌ [状态列更新] 失败: {e}")
```
### 5. 在停止检测时恢复状态列颜色
```python
def _onStopDetection(self, task_folder_name):
"""停止检测"""
# ... 停止检测线程 ...
# 🔥 恢复状态列颜色
if self.mission_text_status:
self.mission_text_status.resetStatusColumnOnStopDetection(task_folder_name)
```
### 6. 在新建任务时初始化为灰色
```python
def _handleTaskConfirmed(self, task_data):
"""处理任务确认"""
# ... 添加任务到表格 ...
row_index = self.mission_panel.table.rowCount() - 1 # 新添加的行
# 🔥 初始化新任务行为灰色
if self.mission_text_status:
self.mission_text_status.initializeNewTaskRowGray(row_index)
```
## API 参考
### initializeAllRowsGray()
初始化所有任务行文本为灰色
### setRowBlackOnSelect(row_index)
单击选中行时该行文本置为黑色
- **参数**: `row_index` - 选中的行索引
### setStatusColumnGreenOnDetection(task_folder_name)
启动检测线程时对应任务的状态列置为绿色
- **参数**: `task_folder_name` - 任务文件夹名称(如 "1_1")
### resetStatusColumnOnStopDetection(task_folder_name)
停止检测线程时恢复状态列颜色
- **参数**: `task_folder_name` - 任务文件夹名称(如 "1_1")
### initializeNewTaskRowGray(row_index)
新建任务时该行文本初始为灰色
- **参数**: `row_index` - 新建任务的行索引
## 注意事项
1. **状态列优先级**:状态列(索引2)的颜色由检测状态决定,不受选中行影响
2. **曲线按钮列**:自动跳过曲线按钮列,不修改其颜色
3. **线程安全**:所有方法都包含异常处理,确保不会因为单个操作失败而影响整体功能
4. **选中状态保持**:管理器会记住当前选中的行,切换选中时自动恢复之前行的颜色
## 示例:完整集成流程
```python
class MissionPanelHandler:
def connectMissionPanel(self, mission_panel):
self.mission_panel = mission_panel
# 1. 创建文本状态管理器
self.mission_text_status = MissionTextStatus(mission_panel)
# 2. 初始化所有行为灰色
self.mission_text_status.initializeAllRowsGray()
# 3. 连接单击事件
mission_panel.table.cellClicked.connect(self._onMissionRowClicked)
# 4. 连接其他信号...
def _onMissionRowClicked(self, row, column):
"""任务行被点击"""
if self.mission_text_status:
self.mission_text_status.setRowBlackOnSelect(row)
def _updateChannelColumnColor(self):
"""更新状态列颜色"""
# 获取正在检测的任务
for task_folder_name in detecting_tasks:
if self.mission_text_status:
self.mission_text_status.setStatusColumnGreenOnDetection(task_folder_name)
def _handleTaskConfirmed(self, task_data):
"""新建任务"""
# 添加到表格...
row_index = self.mission_panel.table.rowCount() - 1
# 初始化为灰色
if self.mission_text_status:
self.mission_text_status.initializeNewTaskRowGray(row_index)
```
......@@ -709,11 +709,16 @@ class CurvePanelHandler:
# 构建完整路径
mission_folder_path = os.path.join(project_root, 'database', 'mission_result', mission_name)
print(f"🔍 [路径构建] 任务名称: {mission_name}")
print(f"🔍 [路径构建] 项目根目录: {project_root}")
print(f"🔍 [路径构建] 完整路径: {mission_folder_path}")
print(f"🔍 [路径构建] 路径是否存在: {os.path.exists(mission_folder_path)}")
# 检查路径是否存在
if os.path.exists(mission_folder_path):
return mission_folder_path
else:
print(f"❌ [路径构建] 路径不存在: {mission_folder_path}")
return None
except Exception as e:
......@@ -779,8 +784,12 @@ class CurvePanelHandler:
# 构建 mission_result 目录路径
mission_result_dir = os.path.join(project_root, 'database', 'mission_result')
print(f"🔍 [任务列表] 项目根目录: {project_root}")
print(f"🔍 [任务列表] 任务目录: {mission_result_dir}")
print(f"🔍 [任务列表] 目录是否存在: {os.path.exists(mission_result_dir)}")
if not os.path.exists(mission_result_dir):
print(f"❌ [任务列表] 目录不存在: {mission_result_dir}")
# 通知UI显示空列表
if self.curve_panel:
self.curve_panel.updateMissionFolderList([])
......@@ -829,16 +838,25 @@ class CurvePanelHandler:
if not data_directory or not os.path.exists(data_directory):
return False
# 🔥 切换到历史模式(不限制数据点数量)
# 切换到历史模式(不限制数据点数量)
self.setCurveLoadMode('history')
# 查找所有CSV文件
print(f"🔍 [曲线加载] 扫描目录: {data_directory}")
print(f"🔍 [曲线加载] 目录是否存在: {os.path.exists(data_directory)}")
if not os.path.exists(data_directory):
print(f"❌ [曲线加载] 目录不存在: {data_directory}")
return False
csv_files = [f for f in os.listdir(data_directory) if f.endswith('.csv')]
print(f"🔍 [曲线加载] 找到 {len(csv_files)} 个CSV文件: {csv_files}")
if not csv_files:
print(f"⚠️ [曲线加载] 未找到CSV文件")
return False
# 🔥 检查是否需要显示进度条
# 检查是否需要显示进度条
# 触发条件:CSV文件数量 > 1 或 单个CSV文件大小 > 8MB
show_progress = False
......
......@@ -1717,6 +1717,28 @@ class MissionTextStatus:
import traceback
traceback.print_exc()
def setStatusColumnBlackOnStarted(self, task_folder_name):
"""
设置状态列为黑色"已启动"
当任务的所有通道都停止检测,但任务仍被分配时调用
Args:
task_folder_name: 任务文件夹名称(如 "1_1")
"""
try:
row_index = self._findTaskRow(task_folder_name)
if row_index >= 0:
status_item = self.table.item(row_index, 2)
if status_item:
status_item.setText("已启动")
status_item.setForeground(self.COLOR_BLACK)
print(f"✅ [文本状态] 任务 {task_folder_name} 状态列已切换为黑色(已启动)")
except Exception as e:
print(f"❌ [文本状态] 设置状态列为已启动失败: {e}")
import traceback
traceback.print_exc()
def setChannelColumnGreenOnDetection(self, task_folder_name, channel_num):
"""
启动检测线程时对应任务的对应通道列置为绿色
......@@ -1844,28 +1866,38 @@ class MissionTextStatus:
# 🔥 只处理正在执行的任务(更新状态列)
if task_folder_name in active_tasks:
# 检查该任务使用的所有通道是否都在检测
all_channels_detecting = True
has_detecting_channels = False
# 只统计分配给该任务的通道
assigned_channels_count = 0 # 分配给该任务的通道数
detecting_channels_count = 0 # 正在检测的通道数
for channel_num in task_channels:
channel_id = f'channel{channel_num}'
# 检查该通道是否正在执行这个任务
if channel_task_map.get(channel_id) == task_folder_name:
assigned_channels_count += 1
# 检查该通道的检测状态
detect_var_name = f'{channel_id}detect'
if hasattr(main_window, detect_var_name):
is_detecting = getattr(main_window, detect_var_name)
if is_detecting:
has_detecting_channels = True
else:
all_channels_detecting = False
else:
all_channels_detecting = False
detecting_channels_count += 1
# 🔥 规则3:设置状态列为绿色
if has_detecting_channels and all_channels_detecting:
# 🔥 规则:根据检测状态设置状态列颜色
# 只有当分配给该任务的所有通道都在检测时,才设置为绿色"检测中"
if assigned_channels_count > 0 and detecting_channels_count == assigned_channels_count:
# 所有分配的通道都在检测中 -> 绿色"检测中"
self.setStatusColumnGreenOnDetection(task_folder_name)
print(f" ✅ 任务{task_folder_name}: {detecting_channels_count}/{assigned_channels_count}通道检测中 -> 绿色")
elif detecting_channels_count == 0:
# 所有通道都未检测,但任务已分配 -> 黑色"已启动"
self.setStatusColumnBlackOnStarted(task_folder_name)
print(f" ✅ 任务{task_folder_name}: 0/{assigned_channels_count}通道检测中 -> 黑色已启动")
else:
# 部分通道在检测 -> 黑色"已启动"(不是所有通道都在检测)
self.setStatusColumnBlackOnStarted(task_folder_name)
print(f" ⚠️ 任务{task_folder_name}: {detecting_channels_count}/{assigned_channels_count}通道检测中 -> 黑色已启动")
except Exception as e:
print(f"❌ [文本状态] 更新通道列和状态列失败: {e}")
......
# DebugLog 调试日志模块使用说明
## 功能概述
`debuglog.py` 提供了一个基于 `logging` 模块的调试日志系统,用于替代 `print()` 进行调试输出。
## 核心特性
-**单例模式**: 全局统一的日志管理
-**双重输出**: 同时输出到控制台和文件
-**按日期分文件**: 每天自动创建新的日志文件
-**多级别日志**: DEBUG, INFO, WARNING, ERROR, CRITICAL
-**详细信息**: 文件日志包含时间、模块、文件名、行号等
-**自动清理**: 支持清理旧日志文件
-**UTF-8编码**: 支持中文日志
## 日志文件位置
```
D:\restructure\liquid_level_line_detection_system\database\log\debuglog\
```
## 快速开始
### 1. 基本使用
```python
from handlers.debuglog import get_logger
# 创建logger(建议使用 __name__ 作为名称)
logger = get_logger(__name__)
# 记录不同级别的日志
logger.debug("调试信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("严重错误")
```
### 2. 在类中使用
```python
from handlers.debuglog import get_logger
class MyClass:
def __init__(self):
self.logger = get_logger(self.__class__.__name__)
def do_something(self):
self.logger.info("开始执行操作")
try:
# 你的代码
result = self.process()
self.logger.info(f"操作成功,结果: {result}")
except Exception as e:
self.logger.error(f"操作失败: {e}", exc_info=True)
```
### 3. 在函数中使用
```python
from handlers.debuglog import get_logger
logger = get_logger(__name__)
def my_function(param):
logger.debug(f"函数调用,参数: {param}")
# 你的代码
result = param * 2
logger.info(f"函数执行完成,返回: {result}")
return result
```
## 高级用法
### 1. 只输出到文件(不显示在控制台)
```python
from handlers.debuglog import get_logger
logger = get_logger(
"my_module",
console_output=False, # 不输出到控制台
file_output=True # 只输出到文件
)
logger.info("这条消息只会写入日志文件")
```
### 2. 设置日志级别
```python
from handlers.debuglog import get_logger, INFO
# 只记录 INFO 及以上级别的日志
logger = get_logger("my_module", level=INFO)
logger.debug("这条不会显示") # DEBUG < INFO
logger.info("这条会显示") # INFO >= INFO
logger.warning("这条会显示") # WARNING > INFO
```
日志级别(从低到高):
- `DEBUG` (10) - 详细的调试信息
- `INFO` (20) - 一般信息
- `WARNING` (30) - 警告信息
- `ERROR` (40) - 错误信息
- `CRITICAL` (50) - 严重错误
### 3. 记录异常信息
```python
from handlers.debuglog import get_logger
logger = get_logger(__name__)
try:
result = 1 / 0
except Exception as e:
# exc_info=True 会记录完整的堆栈跟踪
logger.error(f"发生异常: {e}", exc_info=True)
```
### 4. 清理旧日志
```python
from handlers.debuglog import clear_old_logs
# 清理7天前的日志文件
clear_old_logs(days=7)
# 清理30天前的日志文件
clear_old_logs(days=30)
```
## 日志格式
### 控制台输出(简洁格式)
```
2025-11-29 15:30:45 - INFO - 这是一条信息
2025-11-29 15:30:46 - WARNING - 这是一条警告
2025-11-29 15:30:47 - ERROR - 这是一条错误
```
### 文件输出(详细格式)
```
2025-11-29 15:30:45 - my_module - INFO - [main.py:123] - 这是一条信息
2025-11-29 15:30:46 - my_module - WARNING - [main.py:124] - 这是一条警告
2025-11-29 15:30:47 - my_module - ERROR - [main.py:125] - 这是一条错误
```
## 实际应用示例
### 示例1: 在 auto_dot.py 中使用
```python
from handlers.debuglog import get_logger
class AutoAnnotationDetector:
def __init__(self, model_path: str = None, device: str = 'cuda'):
self.logger = get_logger(self.__class__.__name__)
self.model = None
self.model_path = model_path
self.device = self._validate_device(device)
if model_path:
self.load_model(model_path)
def load_model(self, model_path: str) -> bool:
try:
self.logger.info(f"开始加载模型: {model_path}")
if not os.path.exists(model_path):
self.logger.error(f"模型文件不存在: {model_path}")
return False
# 加载模型...
self.logger.info(f"模型加载成功: {os.path.basename(model_path)}")
return True
except Exception as e:
self.logger.error(f"模型加载失败: {e}", exc_info=True)
return False
def detect(self, image, conf_threshold=0.5, min_area=100):
self.logger.debug(f"开始检测 - 置信度阈值: {conf_threshold}, 最小面积: {min_area}")
try:
# 执行检测...
self.logger.info(f"检测完成,共 {len(valid_masks)} 个有效mask")
return result
except Exception as e:
self.logger.error(f"检测失败: {e}", exc_info=True)
return {'success': False, 'error': str(e)}
```
### 示例2: 替代现有的 print 语句
**之前(使用 print):**
```python
print(f"🔄 正在加载模型: {model_path}")
print(f"✅ 模型加载成功")
print(f"❌ 模型加载失败: {e}")
```
**之后(使用 logger):**
```python
logger.info(f"正在加载模型: {model_path}")
logger.info(f"模型加载成功")
logger.error(f"模型加载失败: {e}", exc_info=True)
```
### 示例3: 在测试函数中使用
```python
from handlers.debuglog import get_logger
def test_auto_annotation():
logger = get_logger("test_auto_annotation")
logger.info("="*80)
logger.info("自动标注功能测试")
logger.info("="*80)
# 配置参数
model_path = r"D:\...\best.dat"
logger.debug(f"模型路径: {model_path}")
# 检查文件
if not os.path.exists(model_path):
logger.error(f"模型文件不存在: {model_path}")
return
# 创建检测器
logger.info("初始化自动标注检测器...")
detector = AutoAnnotationDetector(model_path=model_path, device='cuda')
# 执行检测
logger.info("开始执行检测...")
detection_result = detector.detect(image, conf_threshold=0.5, min_area=100)
if detection_result.get('success'):
logger.info("检测成功")
else:
logger.error(f"检测失败: {detection_result.get('error')}")
```
## 最佳实践
1. **使用 `__name__` 作为 logger 名称**
```python
logger = get_logger(__name__)
```
2. **在类中创建实例变量**
```python
def __init__(self):
self.logger = get_logger(self.__class__.__name__)
```
3. **记录异常时使用 `exc_info=True`**
```python
except Exception as e:
logger.error(f"错误: {e}", exc_info=True)
```
4. **根据重要性选择合适的日志级别**
- `DEBUG`: 详细的调试信息(开发时使用)
- `INFO`: 正常的操作信息
- `WARNING`: 警告但不影响运行
- `ERROR`: 错误但程序可以继续
- `CRITICAL`: 严重错误,程序可能无法继续
5. **定期清理旧日志**
```python
# 在程序启动时清理旧日志
from handlers.debuglog import clear_old_logs
clear_old_logs(days=7)
```
## 测试
运行测试代码:
```bash
python handlers/debuglog.py
```
这会执行5个测试用例,展示各种使用方式。
## 注意事项
1. 日志文件按日期命名,格式为:`{logger_name}_{YYYYMMDD}.log`
2. 日志文件使用 UTF-8 编码,支持中文
3. 同一个 logger 名称会复用已创建的 logger 实例
4. 文件日志会追加写入,不会覆盖
5. 建议在生产环境中将日志级别设置为 `INFO` 或更高
1曲线模式索引0布局,只显示根据curvemission筛选使用的通道面板失效了
1曲线模式索引0布局,只显示根据curvemission筛选使用的通道面板失效了
......@@ -16,13 +16,20 @@
保存标注结果用于持久显示
self._last_annotation_pixmap
任务面板任务信息文本状态切换逻辑 class missiontexe_status,channel_detect_status
1任务面板信息文本显示初始默认都为灰色
2单击选中行时文本该行文本置为黑色
3启动检测线程时对应任务的对应通道列置为绿色
4新建任务信息文本显示初始默认都为灰色
5单击任务行后该任务mission_status为true时才置黑该任务行
6mission_status判断逻辑,只要任意channelmission值为此任务,则此任务mission_status=true
任务面板任务信息文本状态切换逻辑 class MissionTextStatus,channel_detect_status
1. 任务面板信息文本显示初始默认都为灰色
2. 单击选中行时文本该行文本置为黑色
3. 启动检测线程时对应任务的对应通道列置为绿色
4. 新建任务信息文本显示初始默认都为灰色
5. 单击任务行后该任务mission_status为true时才置黑该任务行
6. mission_status判断逻辑,只要任意channelmission值为此任务,则此任务mission_status=true
7. 状态列切换逻辑:
- 分配给任务的所有通道都在检测中 → 绿色"检测中"
- 所有通道都停止检测,但任务仍被分配 → 黑色"已启动"
- 部分通道在检测(不是全部) → 黑色"已启动"
- 任务未被分配 → 灰色"未启动"
判断规则:只有当分配给该任务的所有通道都在检测时,状态列才显示绿色"检测中"
class ModelLoadingProgressDialog(QDialog):
"""模型加载进度条对话框"""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment