diff --git a/assets/images/36.png b/assets/images/36.png index fb8d07a..2e0366c 100644 Binary files a/assets/images/36.png and b/assets/images/36.png differ diff --git a/assets/images/37.png b/assets/images/37.png index 2e0366c..60ac5a8 100644 Binary files a/assets/images/37.png and b/assets/images/37.png differ diff --git a/assets/images/38.png b/assets/images/38.png index 4974c21..5018cca 100644 Binary files a/assets/images/38.png and b/assets/images/38.png differ diff --git a/assets/images/39.png b/assets/images/39.png index 9096b95..dc91ce9 100644 Binary files a/assets/images/39.png and b/assets/images/39.png differ diff --git a/assets/images/40.png b/assets/images/40.png index 05332ca..40a0c8e 100644 Binary files a/assets/images/40.png and b/assets/images/40.png differ diff --git a/assets/images/41.png b/assets/images/41.png index 7f84e06..7bcdcde 100644 Binary files a/assets/images/41.png and b/assets/images/41.png differ diff --git a/assets/images/42.png b/assets/images/42.png index bbddf9d..d55def6 100644 Binary files a/assets/images/42.png and b/assets/images/42.png differ diff --git a/assets/images/43.png b/assets/images/43.png index 7173b42..4df1b67 100644 Binary files a/assets/images/43.png and b/assets/images/43.png differ diff --git a/assets/images/44.png b/assets/images/44.png index b0d9112..9e469e0 100644 Binary files a/assets/images/44.png and b/assets/images/44.png differ diff --git a/assets/images/45.png b/assets/images/45.png index 3d9360f..809d962 100644 Binary files a/assets/images/45.png and b/assets/images/45.png differ diff --git a/assets/images/46.png b/assets/images/46.png index b3ea6ea..b42827e 100644 Binary files a/assets/images/46.png and b/assets/images/46.png differ diff --git a/assets/images/47.png b/assets/images/47.png index 2bfa999..17bf8b7 100644 Binary files a/assets/images/47.png and b/assets/images/47.png differ diff --git a/assets/images/48.png b/assets/images/48.png index 4c93894..ff0c7f9 100644 Binary files a/assets/images/48.png and b/assets/images/48.png differ diff --git a/assets/images/49.png b/assets/images/49.png index 623414f..eeba375 100644 Binary files a/assets/images/49.png and b/assets/images/49.png differ diff --git a/assets/images/50.png b/assets/images/50.png index fa74035..1a03b8f 100644 Binary files a/assets/images/50.png and b/assets/images/50.png differ diff --git a/assets/images/51.png b/assets/images/51.png index 822822c..02ed5f9 100644 Binary files a/assets/images/51.png and b/assets/images/51.png differ diff --git a/assets/images/52.png b/assets/images/52.png index 30b140a..4d29879 100644 Binary files a/assets/images/52.png and b/assets/images/52.png differ diff --git a/assets/images/53.png b/assets/images/53.png index 60ac5a8..2807e0a 100644 Binary files a/assets/images/53.png and b/assets/images/53.png differ diff --git a/assets/images/54.png b/assets/images/54.png index 5018cca..0020cb2 100644 Binary files a/assets/images/54.png and b/assets/images/54.png differ diff --git a/assets/images/55.png b/assets/images/55.png index dc91ce9..5c89361 100644 Binary files a/assets/images/55.png and b/assets/images/55.png differ diff --git a/assets/images/56.png b/assets/images/56.png index 40a0c8e..5249b11 100644 Binary files a/assets/images/56.png and b/assets/images/56.png differ diff --git a/assets/images/57.png b/assets/images/57.png index 7bcdcde..6366ea6 100644 Binary files a/assets/images/57.png and b/assets/images/57.png differ diff --git a/assets/images/58.png b/assets/images/58.png index d55def6..b5f0b52 100644 Binary files a/assets/images/58.png and b/assets/images/58.png differ diff --git a/assets/images/59.png b/assets/images/59.png index 4df1b67..f92997b 100644 Binary files a/assets/images/59.png and b/assets/images/59.png differ diff --git a/assets/images/60.png b/assets/images/60.png index 9e469e0..5b42847 100644 Binary files a/assets/images/60.png and b/assets/images/60.png differ diff --git a/assets/images/61.png b/assets/images/61.png index 809d962..d0156ab 100644 Binary files a/assets/images/61.png and b/assets/images/61.png differ diff --git a/assets/images/62.png b/assets/images/62.png index b42827e..6956687 100644 Binary files a/assets/images/62.png and b/assets/images/62.png differ diff --git a/assets/images/63.png b/assets/images/63.png index 17bf8b7..919a8fa 100644 Binary files a/assets/images/63.png and b/assets/images/63.png differ diff --git a/assets/images/64.png b/assets/images/64.png deleted file mode 100644 index ff0c7f9..0000000 Binary files a/assets/images/64.png and /dev/null differ diff --git a/assets/images/65.png b/assets/images/65.png deleted file mode 100644 index eeba375..0000000 Binary files a/assets/images/65.png and /dev/null differ diff --git a/assets/images/66.png b/assets/images/66.png deleted file mode 100644 index 1a03b8f..0000000 Binary files a/assets/images/66.png and /dev/null differ diff --git a/assets/images/67.png b/assets/images/67.png deleted file mode 100644 index 02ed5f9..0000000 Binary files a/assets/images/67.png and /dev/null differ diff --git a/assets/images/68.png b/assets/images/68.png deleted file mode 100644 index 4d29879..0000000 Binary files a/assets/images/68.png and /dev/null differ diff --git a/assets/images/69.png b/assets/images/69.png deleted file mode 100644 index 2807e0a..0000000 Binary files a/assets/images/69.png and /dev/null differ diff --git a/assets/images/70.png b/assets/images/70.png deleted file mode 100644 index 0020cb2..0000000 Binary files a/assets/images/70.png and /dev/null differ diff --git a/assets/images/71.png b/assets/images/71.png deleted file mode 100644 index 5c89361..0000000 Binary files a/assets/images/71.png and /dev/null differ diff --git a/assets/images/72.png b/assets/images/72.png deleted file mode 100644 index 5249b11..0000000 Binary files a/assets/images/72.png and /dev/null differ diff --git a/assets/images/73.png b/assets/images/73.png deleted file mode 100644 index 6366ea6..0000000 Binary files a/assets/images/73.png and /dev/null differ diff --git a/assets/images/74.png b/assets/images/74.png deleted file mode 100644 index b5f0b52..0000000 Binary files a/assets/images/74.png and /dev/null differ diff --git a/assets/images/75.png b/assets/images/75.png deleted file mode 100644 index f92997b..0000000 Binary files a/assets/images/75.png and /dev/null differ diff --git a/assets/images/76.png b/assets/images/76.png deleted file mode 100644 index 5b42847..0000000 Binary files a/assets/images/76.png and /dev/null differ diff --git a/assets/images/77.png b/assets/images/77.png deleted file mode 100644 index d0156ab..0000000 Binary files a/assets/images/77.png and /dev/null differ diff --git a/assets/images/78.png b/assets/images/78.png deleted file mode 100644 index 6956687..0000000 Binary files a/assets/images/78.png and /dev/null differ diff --git a/assets/result.json b/assets/result.json index 4665401..ffd4c33 100644 --- a/assets/result.json +++ b/assets/result.json @@ -383,96 +383,6 @@ "height": 2160, "id": 63, "file_name": "images/63.png" - }, - { - "width": 3840, - "height": 2160, - "id": 64, - "file_name": "images/64.png" - }, - { - "width": 3840, - "height": 2160, - "id": 65, - "file_name": "images/65.png" - }, - { - "width": 3840, - "height": 2160, - "id": 66, - "file_name": "images/66.png" - }, - { - "width": 3840, - "height": 2160, - "id": 67, - "file_name": "images/67.png" - }, - { - "width": 3840, - "height": 2160, - "id": 68, - "file_name": "images/68.png" - }, - { - "width": 3840, - "height": 2160, - "id": 69, - "file_name": "images/69.png" - }, - { - "width": 3840, - "height": 2160, - "id": 70, - "file_name": "images/70.png" - }, - { - "width": 3840, - "height": 2160, - "id": 71, - "file_name": "images/71.png" - }, - { - "width": 3840, - "height": 2160, - "id": 72, - "file_name": "images/72.png" - }, - { - "width": 3840, - "height": 2160, - "id": 73, - "file_name": "images/73.png" - }, - { - "width": 3840, - "height": 2160, - "id": 74, - "file_name": "images/74.png" - }, - { - "width": 3840, - "height": 2160, - "id": 75, - "file_name": "images/75.png" - }, - { - "width": 3840, - "height": 2160, - "id": 76, - "file_name": "images/76.png" - }, - { - "width": 3840, - "height": 2160, - "id": 77, - "file_name": "images/77.png" - }, - { - "width": 3840, - "height": 2160, - "id": 78, - "file_name": "images/78.png" } ], "categories": [ @@ -490,678 +400,686 @@ }, { "id": 3, - "name": "big_map_star" + "name": "big_map_diamond" }, { "id": 4, - "name": "boss_proceed" + "name": "big_map_skull" }, { "id": 5, - "name": "box_arrow" + "name": "big_map_star" }, { "id": 6, - "name": "box_char1_switch_wave" + "name": "boss_proceed" }, { "id": 7, - "name": "box_char2_switch_wave" + "name": "box_arrow" }, { "id": 8, - "name": "box_char3_switch_wave" + "name": "box_char1_switch_wave" }, { "id": 9, - "name": "box_char_1" + "name": "box_char2_switch_wave" }, { "id": 10, - "name": "box_char_2" + "name": "box_char3_switch_wave" }, { "id": 11, - "name": "box_char_3" + "name": "box_char_1" }, { "id": 12, - "name": "box_concerto_last_dot" + "name": "box_char_2" }, { "id": 13, - "name": "box_data_merge_add_clear" + "name": "box_char_3" }, { "id": 14, - "name": "box_echo" + "name": "box_concerto_last_dot" }, { "id": 15, - "name": "box_echo_cost" + "name": "box_data_merge_add_clear" }, { "id": 16, - "name": "box_echo_discard" + "name": "box_echo" }, { "id": 17, - "name": "box_echo_lock_merge" + "name": "box_echo_cost" }, { "id": 18, - "name": "box_echo_main_stat_merge" + "name": "box_echo_discard" }, { "id": 19, - "name": "box_echo_rarity" + "name": "box_echo_lock_merge" }, { "id": 20, - "name": "box_echo_stat" + "name": "box_echo_main_stat_merge" }, { "id": 21, - "name": "box_forte_1" + "name": "box_echo_rarity" }, { "id": 22, - "name": "box_forte_2" + "name": "box_echo_stat" }, { "id": 23, - "name": "box_forte_3" + "name": "box_forte_1" }, { "id": 24, - "name": "box_liberation" + "name": "box_forte_2" }, { "id": 25, - "name": "box_map_my_location" + "name": "box_forte_3" }, { "id": 26, - "name": "box_minimap" + "name": "box_liberation" }, { "id": 27, - "name": "box_resonance" + "name": "box_map_my_location" }, { "id": 28, - "name": "box_set_merge" + "name": "box_minimap" }, { "id": 29, - "name": "box_set_name" + "name": "box_resonance" }, { "id": 30, - "name": "box_target_enemy" + "name": "box_set_merge" }, { "id": 31, - "name": "box_target_enemy_inner" + "name": "box_set_name" }, { "id": 32, - "name": "box_target_enemy_long" + "name": "box_target_enemy" }, { "id": 33, - "name": "box_target_enemy_long_inner" + "name": "box_target_enemy_inner" }, { "id": 34, - "name": "box_target_mouse" + "name": "box_target_enemy_long" }, { "id": 35, - "name": "btn_auto_play_dialog" + "name": "box_target_enemy_long_inner" }, { "id": 36, - "name": "btn_dialog_3dots" + "name": "box_target_mouse" }, { "id": 37, - "name": "btn_dialog_arrow" + "name": "btn_auto_play_dialog" }, { "id": 38, - "name": "btn_dialog_close" + "name": "btn_dialog_3dots" }, { "id": 39, - "name": "btn_dialog_eye" + "name": "btn_dialog_arrow" }, { "id": 40, - "name": "button_echo_merge" + "name": "btn_dialog_close" }, { "id": 41, - "name": "camellya_budding" + "name": "btn_dialog_eye" }, { "id": 42, - "name": "cancel_button_hcenter_vcenter" + "name": "button_echo_merge" }, { "id": 43, - "name": "chang_changli" + "name": "camellya_budding" }, { "id": 44, - "name": "char_1_lib_check_mark" + "name": "cancel_button_hcenter_vcenter" }, { "id": 45, - "name": "char_1_text" + "name": "chang_changli" }, { "id": 46, - "name": "char_2_lib_check_mark" + "name": "char_1_lib_check_mark" }, { "id": 47, - "name": "char_2_text" + "name": "char_1_text" }, { "id": 48, - "name": "char_3_lib_check_mark" + "name": "char_2_lib_check_mark" }, { "id": 49, - "name": "char_3_text" + "name": "char_2_text" }, { "id": 50, - "name": "char_baizhi" + "name": "char_3_lib_check_mark" }, { "id": 51, - "name": "char_brant" + "name": "char_3_text" }, { "id": 52, - "name": "char_calcharo" + "name": "char_baizhi" }, { "id": 53, - "name": "char_camellya" + "name": "char_brant" }, { "id": 54, - "name": "char_cantarella" + "name": "char_calcharo" }, { "id": 55, - "name": "char_carlotta" + "name": "char_camellya" }, { "id": 56, - "name": "char_chixia" + "name": "char_cantarella" }, { "id": 57, - "name": "char_danjin" + "name": "char_carlotta" }, { "id": 58, - "name": "char_encore" + "name": "char_chixia" }, { "id": 59, - "name": "char_jianxin" + "name": "char_danjin" }, { "id": 60, - "name": "char_jinhsi" + "name": "char_encore" }, { "id": 61, - "name": "char_jinhsi2" + "name": "char_jianxin" }, { "id": 62, - "name": "char_jiyan" + "name": "char_jinhsi" }, { "id": 63, - "name": "char_mortefi" + "name": "char_jinhsi2" }, { "id": 64, - "name": "char_phoebe" + "name": "char_jiyan" }, { "id": 65, - "name": "char_roccia" + "name": "char_mortefi" }, { "id": 66, - "name": "char_rover" + "name": "char_phoebe" }, { "id": 67, - "name": "char_rover_male" + "name": "char_roccia" }, { "id": 68, - "name": "char_sanhua" + "name": "char_rover" }, { "id": 69, - "name": "char_sanhua2" + "name": "char_rover_male" }, { "id": 70, - "name": "char_shorekeeper" + "name": "char_sanhua" }, { "id": 71, - "name": "char_taoqi" + "name": "char_sanhua2" }, { "id": 72, - "name": "char_verina" + "name": "char_shorekeeper" }, { "id": 73, - "name": "char_xiangliyao" + "name": "char_taoqi" }, { "id": 74, - "name": "char_yinlin" + "name": "char_verina" }, { "id": 75, - "name": "char_youhu" + "name": "char_xiangliyao" }, { "id": 76, - "name": "char_yuanwu" + "name": "char_yinlin" }, { "id": 77, - "name": "char_zhezhi" + "name": "char_youhu" }, { "id": 78, - "name": "claim_cancel_button_hcenter_vcenter" + "name": "char_yuanwu" }, { "id": 79, - "name": "confirm_btn_hcenter_vcenter" + "name": "char_zhezhi" }, { "id": 80, - "name": "confirm_btn_highlight_hcenter_vcenter" + "name": "claim_cancel_button_hcenter_vcenter" }, { "id": 81, - "name": "custom_teleport_hcenter_vcenter" + "name": "confirm_btn_hcenter_vcenter" }, { "id": 82, - "name": "data_merge_confirm_hcenter_vcenter" + "name": "confirm_btn_highlight_hcenter_vcenter" }, { "id": 83, - "name": "data_merge_first_add_slot" + "name": "custom_teleport_hcenter_vcenter" }, { "id": 84, - "name": "data_merge_hcenter" + "name": "data_merge_confirm_hcenter_vcenter" }, { "id": 85, - "name": "data_merge_hcenter_vcenter" + "name": "data_merge_first_add_slot" }, { "id": 86, - "name": "data_merge_last_add_slot" + "name": "data_merge_hcenter" }, { "id": 87, - "name": "data_merge_selection" + "name": "data_merge_hcenter_vcenter" }, { "id": 88, - "name": "dialog_3_dots" + "name": "data_merge_last_add_slot" }, { "id": 89, - "name": "echo_discard" + "name": "data_merge_selection" }, { "id": 90, - "name": "echo_discarded" + "name": "dialog_3_dots" }, { "id": 91, - "name": "echo_enhance_btn" + "name": "echo_discard" }, { "id": 92, - "name": "echo_enhance_confirm" + "name": "echo_discarded" }, { "id": 93, - "name": "echo_enhance_success" + "name": "echo_enhance_btn" }, { "id": 94, - "name": "echo_enhance_to" + "name": "echo_enhance_confirm" }, { "id": 95, - "name": "echo_locked" + "name": "echo_enhance_success" }, { "id": 96, - "name": "echo_merge" + "name": "echo_enhance_to" }, { "id": 97, - "name": "echo_rarity_blue" + "name": "echo_locked" }, { "id": 98, - "name": "echo_rarity_gold" + "name": "echo_merge" }, { "id": 99, - "name": "echo_rarity_green" + "name": "echo_rarity_blue" }, { "id": 100, - "name": "echo_rarity_purple" + "name": "echo_rarity_gold" }, { "id": 101, - "name": "echo_sort_asc" + "name": "echo_rarity_green" }, { "id": 102, - "name": "echo_sort_desc" + "name": "echo_rarity_purple" }, { "id": 103, - "name": "echo_stats_aero_dmg" + "name": "echo_sort_asc" }, { "id": 104, - "name": "echo_stats_atk" + "name": "echo_sort_desc" }, { "id": 105, - "name": "echo_stats_crit" + "name": "echo_stats_aero_dmg" }, { "id": 106, - "name": "echo_stats_crit_dmg" + "name": "echo_stats_atk" }, { "id": 107, - "name": "echo_stats_def" + "name": "echo_stats_crit" }, { "id": 108, - "name": "echo_stats_electro_dmg" + "name": "echo_stats_crit_dmg" }, { "id": 109, - "name": "echo_stats_energy_regen" + "name": "echo_stats_def" }, { "id": 110, - "name": "echo_stats_fusion_dmg" + "name": "echo_stats_electro_dmg" }, { "id": 111, - "name": "echo_stats_glacio_dmg" + "name": "echo_stats_energy_regen" }, { "id": 112, - "name": "echo_stats_havoc_dmg" + "name": "echo_stats_fusion_dmg" }, { "id": 113, - "name": "echo_stats_healing" + "name": "echo_stats_glacio_dmg" }, { "id": 114, - "name": "echo_stats_hp" + "name": "echo_stats_havoc_dmg" }, { "id": 115, - "name": "echo_stats_spectro_dmg" + "name": "echo_stats_healing" }, { "id": 116, - "name": "echo_unlocked" + "name": "echo_stats_hp" }, { "id": 117, - "name": "edge_levitator" + "name": "echo_stats_spectro_dmg" }, { "id": 118, - "name": "fast_travel_confirm" + "name": "echo_unlocked" }, { "id": 119, - "name": "fast_travel_custom" + "name": "edge_levitator" }, { "id": 120, - "name": "gray_book_all_monsters" + "name": "fast_travel_confirm" }, { "id": 121, - "name": "gray_book_boss" + "name": "fast_travel_custom" }, { "id": 122, - "name": "gray_book_boss_highlight" + "name": "gray_book_all_monsters" }, { "id": 123, - "name": "gray_book_quest" + "name": "gray_book_boss" }, { "id": 124, - "name": "gray_button_challenge" + "name": "gray_book_boss_highlight" }, { "id": 125, - "name": "gray_combat_count_down" + "name": "gray_book_quest" }, { "id": 126, - "name": "gray_confirm_exit_button" + "name": "gray_button_challenge" }, { "id": 127, - "name": "gray_crownless_battle" + "name": "gray_combat_count_down" }, { "id": 128, - "name": "gray_custom_way_point" + "name": "gray_confirm_exit_button" }, { "id": 129, - "name": "gray_start_battle" + "name": "gray_crownless_battle" }, { "id": 130, - "name": "gray_teleport" + "name": "gray_custom_way_point" }, { "id": 131, - "name": "illusive_realm_exit" + "name": "gray_start_battle" }, { "id": 132, - "name": "illusive_realm_menu" + "name": "gray_teleport" }, { "id": 133, - "name": "login_account" + "name": "illusive_realm_exit" }, { "id": 134, - "name": "map_my_location" + "name": "illusive_realm_menu" }, { "id": 135, - "name": "map_way_point" + "name": "login_account" }, { "id": 136, - "name": "map_way_point_big" + "name": "map_my_location" }, { "id": 137, - "name": "map_way_point_pop_up_box" + "name": "map_way_point" }, { "id": 138, - "name": "monthly_card" + "name": "map_way_point_big" }, { "id": 139, - "name": "multiplayer_world_mark" + "name": "map_way_point_pop_up_box" }, { "id": 140, - "name": "pick_up_f_hcenter_vcenter" + "name": "monthly_card" }, { "id": 141, - "name": "purple_target_distance_icon" + "name": "multiplayer_world_mark" }, { "id": 142, - "name": "red_dot" + "name": "pick_up_f_hcenter_vcenter" }, { "id": 143, - "name": "remove_custom" + "name": "purple_target_distance_icon" }, { "id": 144, - "name": "revive_confirm_hcenter_vcenter" + "name": "red_dot" }, { "id": 145, - "name": "set_name_0" + "name": "remove_custom" }, { "id": 146, - "name": "set_name_1" + "name": "revive_confirm_hcenter_vcenter" }, { "id": 147, - "name": "set_name_10" + "name": "set_name_0" }, { "id": 148, - "name": "set_name_11" + "name": "set_name_1" }, { "id": 149, - "name": "set_name_12" + "name": "set_name_10" }, { "id": 150, - "name": "set_name_13" + "name": "set_name_11" }, { "id": 151, - "name": "set_name_14" + "name": "set_name_12" }, { "id": 152, - "name": "set_name_15" + "name": "set_name_13" }, { "id": 153, - "name": "set_name_16" + "name": "set_name_14" }, { "id": 154, - "name": "set_name_17" + "name": "set_name_15" }, { "id": 155, - "name": "set_name_18" + "name": "set_name_16" }, { "id": 156, - "name": "set_name_19" + "name": "set_name_17" }, { "id": 157, - "name": "set_name_2" + "name": "set_name_18" }, { "id": 158, - "name": "set_name_20" + "name": "set_name_19" }, { "id": 159, - "name": "set_name_3" + "name": "set_name_2" }, { "id": 160, - "name": "set_name_4" + "name": "set_name_20" }, { "id": 161, - "name": "set_name_5" + "name": "set_name_3" }, { "id": 162, - "name": "set_name_6" + "name": "set_name_4" }, { "id": 163, - "name": "set_name_7" + "name": "set_name_5" }, { "id": 164, - "name": "set_name_8" + "name": "set_name_6" }, { "id": 165, - "name": "set_name_9" + "name": "set_name_7" }, { "id": 166, - "name": "skip_quest_confirm" + "name": "set_name_8" }, { "id": 167, - "name": "star" + "name": "set_name_9" }, { "id": 168, - "name": "target_enemy_white" + "name": "skip_quest_confirm" }, { "id": 169, - "name": "teleport_port" + "name": "star" }, { "id": 170, - "name": "treasure_icon" + "name": "target_enemy_white" }, { "id": 171, + "name": "teleport_port" + }, + { + "id": 172, + "name": "treasure_icon" + }, + { + "id": 173, "name": "ww" } ], @@ -1169,7 +1087,7 @@ { "id": 0, "image_id": 0, - "category_id": 127, + "category_id": 129, "segmentation": [], "bbox": [ 272.0, @@ -1184,7 +1102,7 @@ { "id": 1, "image_id": 1, - "category_id": 47, + "category_id": 49, "segmentation": [], "bbox": [ 3473.0, @@ -1199,7 +1117,7 @@ { "id": 2, "image_id": 1, - "category_id": 49, + "category_id": 51, "segmentation": [], "bbox": [ 3474.0, @@ -1214,7 +1132,7 @@ { "id": 3, "image_id": 1, - "category_id": 48, + "category_id": 50, "segmentation": [], "bbox": [ 3649.0, @@ -1229,7 +1147,7 @@ { "id": 4, "image_id": 2, - "category_id": 77, + "category_id": 79, "segmentation": [], "bbox": [ 3542.0, @@ -1244,7 +1162,7 @@ { "id": 5, "image_id": 2, - "category_id": 67, + "category_id": 69, "segmentation": [], "bbox": [ 3552.0, @@ -1259,7 +1177,7 @@ { "id": 6, "image_id": 2, - "category_id": 30, + "category_id": 32, "segmentation": [], "bbox": [ 2744.791804769704, @@ -1274,7 +1192,7 @@ { "id": 7, "image_id": 2, - "category_id": 34, + "category_id": 36, "segmentation": [], "bbox": [ 2755.836051726779, @@ -1289,7 +1207,7 @@ { "id": 8, "image_id": 2, - "category_id": 31, + "category_id": 33, "segmentation": [], "bbox": [ 2765.6488317792705, @@ -1304,7 +1222,7 @@ { "id": 9, "image_id": 3, - "category_id": 59, + "category_id": 61, "segmentation": [], "bbox": [ 3554.0, @@ -1319,7 +1237,7 @@ { "id": 10, "image_id": 3, - "category_id": 68, + "category_id": 70, "segmentation": [], "bbox": [ 3534.0, @@ -1334,7 +1252,7 @@ { "id": 11, "image_id": 3, - "category_id": 58, + "category_id": 60, "segmentation": [], "bbox": [ 3541.0, @@ -1349,7 +1267,7 @@ { "id": 12, "image_id": 4, - "category_id": 85, + "category_id": 87, "segmentation": [], "bbox": [ 1978.0000000000002, @@ -1364,7 +1282,7 @@ { "id": 13, "image_id": 5, - "category_id": 117, + "category_id": 119, "segmentation": [], "bbox": [ 2937.0, @@ -1379,7 +1297,7 @@ { "id": 14, "image_id": 6, - "category_id": 129, + "category_id": 131, "segmentation": [], "bbox": [ 3579.0, @@ -1394,7 +1312,7 @@ { "id": 15, "image_id": 7, - "category_id": 14, + "category_id": 16, "segmentation": [], "bbox": [ 3345.0, @@ -1409,7 +1327,7 @@ { "id": 16, "image_id": 7, - "category_id": 11, + "category_id": 13, "segmentation": [], "bbox": [ 3512.0, @@ -1424,7 +1342,7 @@ { "id": 17, "image_id": 7, - "category_id": 9, + "category_id": 11, "segmentation": [], "bbox": [ 3511.0, @@ -1439,7 +1357,7 @@ { "id": 18, "image_id": 7, - "category_id": 10, + "category_id": 12, "segmentation": [], "bbox": [ 3511.0, @@ -1454,7 +1372,7 @@ { "id": 19, "image_id": 7, - "category_id": 66, + "category_id": 68, "segmentation": [], "bbox": [ 3541.0, @@ -1469,7 +1387,7 @@ { "id": 20, "image_id": 7, - "category_id": 24, + "category_id": 26, "segmentation": [], "bbox": [ 3566.0, @@ -1484,7 +1402,7 @@ { "id": 21, "image_id": 7, - "category_id": 7, + "category_id": 9, "segmentation": [], "bbox": [ 3347.0, @@ -1499,7 +1417,7 @@ { "id": 22, "image_id": 7, - "category_id": 76, + "category_id": 78, "segmentation": [], "bbox": [ 3544.0, @@ -1514,7 +1432,7 @@ { "id": 23, "image_id": 7, - "category_id": 8, + "category_id": 10, "segmentation": [], "bbox": [ 3348.0, @@ -1529,7 +1447,7 @@ { "id": 24, "image_id": 7, - "category_id": 6, + "category_id": 8, "segmentation": [], "bbox": [ 3346.0, @@ -1544,7 +1462,7 @@ { "id": 25, "image_id": 8, - "category_id": 144, + "category_id": 146, "segmentation": [], "bbox": [ 2887.0, @@ -1559,7 +1477,7 @@ { "id": 26, "image_id": 9, - "category_id": 124, + "category_id": 126, "segmentation": [], "bbox": [ 2413.0000000000005, @@ -1574,7 +1492,7 @@ { "id": 27, "image_id": 10, - "category_id": 126, + "category_id": 128, "segmentation": [], "bbox": [ 2805.0, @@ -1589,7 +1507,7 @@ { "id": 28, "image_id": 10, - "category_id": 42, + "category_id": 44, "segmentation": [], "bbox": [ 890.0000000000001, @@ -1604,7 +1522,7 @@ { "id": 29, "image_id": 11, - "category_id": 130, + "category_id": 132, "segmentation": [], "bbox": [ 2589.0, @@ -1634,7 +1552,7 @@ { "id": 31, "image_id": 13, - "category_id": 36, + "category_id": 38, "segmentation": [], "bbox": [ 2523.0, @@ -1649,7 +1567,7 @@ { "id": 32, "image_id": 13, - "category_id": 37, + "category_id": 39, "segmentation": [], "bbox": [ 2525.0000000000005, @@ -1664,7 +1582,7 @@ { "id": 33, "image_id": 13, - "category_id": 35, + "category_id": 37, "segmentation": [], "bbox": [ 3381.0, @@ -1679,7 +1597,7 @@ { "id": 34, "image_id": 13, - "category_id": 39, + "category_id": 41, "segmentation": [], "bbox": [ 3564.9999999999995, @@ -1694,7 +1612,7 @@ { "id": 35, "image_id": 14, - "category_id": 43, + "category_id": 45, "segmentation": [], "bbox": [ 3537.0, @@ -1709,7 +1627,7 @@ { "id": 36, "image_id": 15, - "category_id": 45, + "category_id": 47, "segmentation": [], "bbox": [ 3474.0, @@ -1724,7 +1642,7 @@ { "id": 37, "image_id": 15, - "category_id": 12, + "category_id": 14, "segmentation": [], "bbox": [ 2169.0, @@ -1739,7 +1657,7 @@ { "id": 38, "image_id": 15, - "category_id": 72, + "category_id": 74, "segmentation": [], "bbox": [ 3534.0, @@ -1754,7 +1672,7 @@ { "id": 39, "image_id": 15, - "category_id": 74, + "category_id": 76, "segmentation": [], "bbox": [ 3541.0, @@ -1769,7 +1687,7 @@ { "id": 40, "image_id": 15, - "category_id": 71, + "category_id": 73, "segmentation": [], "bbox": [ 3541.0, @@ -1784,7 +1702,7 @@ { "id": 41, "image_id": 15, - "category_id": 27, + "category_id": 29, "segmentation": [], "bbox": [ 3138.0, @@ -1799,7 +1717,7 @@ { "id": 42, "image_id": 16, - "category_id": 121, + "category_id": 123, "segmentation": [], "bbox": [ 77.00000000000001, @@ -1814,7 +1732,7 @@ { "id": 43, "image_id": 16, - "category_id": 120, + "category_id": 122, "segmentation": [], "bbox": [ 79.64601769911505, @@ -1829,7 +1747,7 @@ { "id": 44, "image_id": 16, - "category_id": 123, + "category_id": 125, "segmentation": [], "bbox": [ 76.12334801762114, @@ -1859,7 +1777,7 @@ { "id": 46, "image_id": 18, - "category_id": 73, + "category_id": 75, "segmentation": [], "bbox": [ 3548.0, @@ -1874,7 +1792,7 @@ { "id": 47, "image_id": 19, - "category_id": 38, + "category_id": 40, "segmentation": [], "bbox": [ 3560.0000000000005, @@ -1889,7 +1807,7 @@ { "id": 48, "image_id": 20, - "category_id": 46, + "category_id": 48, "segmentation": [], "bbox": [ 3649.0, @@ -1904,7 +1822,7 @@ { "id": 49, "image_id": 20, - "category_id": 44, + "category_id": 46, "segmentation": [], "bbox": [ 3650.0000000000005, @@ -1919,7 +1837,7 @@ { "id": 50, "image_id": 21, - "category_id": 119, + "category_id": 121, "segmentation": [], "bbox": [ 3219.9999999999973, @@ -1934,7 +1852,7 @@ { "id": 51, "image_id": 21, - "category_id": 143, + "category_id": 145, "segmentation": [], "bbox": [ 3083.8938053097336, @@ -1949,7 +1867,7 @@ { "id": 52, "image_id": 22, - "category_id": 50, + "category_id": 52, "segmentation": [], "bbox": [ 3557.0, @@ -1964,7 +1882,7 @@ { "id": 53, "image_id": 22, - "category_id": 52, + "category_id": 54, "segmentation": [], "bbox": [ 3549.9999999999995, @@ -1979,7 +1897,7 @@ { "id": 54, "image_id": 22, - "category_id": 62, + "category_id": 64, "segmentation": [], "bbox": [ 3538.0, @@ -1994,7 +1912,7 @@ { "id": 55, "image_id": 23, - "category_id": 81, + "category_id": 83, "segmentation": [], "bbox": [ 1909.0, @@ -2009,7 +1927,7 @@ { "id": 56, "image_id": 24, - "category_id": 141, + "category_id": 143, "segmentation": [], "bbox": [ 2090.0, @@ -2024,7 +1942,7 @@ { "id": 57, "image_id": 24, - "category_id": 131, + "category_id": 133, "segmentation": [], "bbox": [ 29.0, @@ -2039,7 +1957,7 @@ { "id": 58, "image_id": 24, - "category_id": 132, + "category_id": 134, "segmentation": [], "bbox": [ 217.0, @@ -2054,7 +1972,7 @@ { "id": 59, "image_id": 25, - "category_id": 4, + "category_id": 6, "segmentation": [], "bbox": [ 1819.9999999999998, @@ -2069,7 +1987,7 @@ { "id": 60, "image_id": 25, - "category_id": 122, + "category_id": 124, "segmentation": [], "bbox": [ 36.0, @@ -2084,7 +2002,7 @@ { "id": 61, "image_id": 26, - "category_id": 78, + "category_id": 80, "segmentation": [], "bbox": [ 867.0, @@ -2099,7 +2017,7 @@ { "id": 62, "image_id": 27, - "category_id": 57, + "category_id": 59, "segmentation": [], "bbox": [ 3549.0, @@ -2114,7 +2032,7 @@ { "id": 63, "image_id": 27, - "category_id": 63, + "category_id": 65, "segmentation": [], "bbox": [ 3549.9999999999995, @@ -2129,7 +2047,7 @@ { "id": 64, "image_id": 27, - "category_id": 56, + "category_id": 58, "segmentation": [], "bbox": [ 3554.0, @@ -2144,7 +2062,7 @@ { "id": 65, "image_id": 28, - "category_id": 138, + "category_id": 140, "segmentation": [], "bbox": [ 1555.0000000000002, @@ -2159,7 +2077,7 @@ { "id": 66, "image_id": 29, - "category_id": 128, + "category_id": 130, "segmentation": [], "bbox": [ 2512.9999999999995, @@ -2174,7 +2092,7 @@ { "id": 67, "image_id": 30, - "category_id": 140, + "category_id": 142, "segmentation": [], "bbox": [ 2440.9999999999995, @@ -2189,7 +2107,7 @@ { "id": 68, "image_id": 30, - "category_id": 88, + "category_id": 90, "segmentation": [], "bbox": [ 2600.0000000000005, @@ -2204,7 +2122,7 @@ { "id": 69, "image_id": 31, - "category_id": 60, + "category_id": 62, "segmentation": [], "bbox": [ 3543.0, @@ -2219,7 +2137,7 @@ { "id": 70, "image_id": 32, - "category_id": 125, + "category_id": 127, "segmentation": [], "bbox": [ 1747.0, @@ -2234,7 +2152,7 @@ { "id": 71, "image_id": 33, - "category_id": 168, + "category_id": 170, "segmentation": [], "bbox": [ 1688.0, @@ -2249,7 +2167,7 @@ { "id": 72, "image_id": 34, - "category_id": 70, + "category_id": 72, "segmentation": [], "bbox": [ 3543.2132363735222, @@ -2264,7 +2182,7 @@ { "id": 73, "image_id": 34, - "category_id": 139, + "category_id": 141, "segmentation": [], "bbox": [ 76.77271661865221, @@ -2279,7 +2197,7 @@ { "id": 74, "image_id": 35, - "category_id": 166, + "category_id": 168, "segmentation": [], "bbox": [ 2296.991150442478, @@ -2294,502 +2212,37 @@ { "id": 75, "image_id": 36, - "category_id": 40, + "category_id": 81, "segmentation": [], "bbox": [ - 3313.274336283186, - 1886.0176991150445, - 172.03539823008833, - 159.29203539822998 + 2806.725663716814, + 1236.1061946902657, + 111.50442477875986, + 219.82300884955745 ], "ignore": 0, "iscrowd": 0, - "area": 27403.868744615822 + "area": 24511.23815490614 }, { "id": 76, - "image_id": 36, - "category_id": 15, + "image_id": 37, + "category_id": 82, "segmentation": [], "bbox": [ - 2940.5309734513266, - 254.86725663716823, - 254.86725663716888, - 175.2212389380531 + 2806.725663716814, + 1236.1061946902657, + 111.50442477875986, + 219.82300884955745 ], "ignore": 0, "iscrowd": 0, - "area": 44658.156472707466 + "area": 24511.23815490614 }, { "id": 77, - "image_id": 36, - "category_id": 18, - "segmentation": [], - "bbox": [ - 2341.5929203539818, - 630.7964601769912, - 82.83185840708036, - 76.4601769911504 - ], - "ignore": 0, - "iscrowd": 0, - "area": 6333.3385543112745 - }, - { - "id": 78, - "image_id": 36, - "category_id": 28, - "segmentation": [], - "bbox": [ - 2545.486725663717, - 458.7610619469027, - 47.78761061946898, - 54.15929203539817 - ], - "ignore": 0, - "iscrowd": 0, - "area": 2588.143159213715 - }, - { - "id": 79, - "image_id": 36, - "category_id": 17, - "segmentation": [], - "bbox": [ - 3103.008849557523, - 455.5752212389381, - 70.0884955752208, - 79.64601769911499 - ], - "ignore": 0, - "iscrowd": 0, - "area": 5582.269559088379 - }, - { - "id": 80, - "image_id": 37, - "category_id": 79, - "segmentation": [], - "bbox": [ - 2806.725663716814, - 1236.1061946902657, - 111.50442477875986, - 219.82300884955745 - ], - "ignore": 0, - "iscrowd": 0, - "area": 24511.23815490614 - }, - { - "id": 81, "image_id": 38, - "category_id": 13, - "segmentation": [], - "bbox": [ - 2937.3451327433636, - 1401.7699115044247, - 175.22123893805255, - 50.97345132743366 - ], - "ignore": 0, - "iscrowd": 0, - "area": 8931.631294541445 - }, - { - "id": 82, - "image_id": 38, - "category_id": 83, - "segmentation": [], - "bbox": [ - 2981.9469026548677, - 375.929203539823, - 73.27433628318559, - 95.57522123893807 - ], - "ignore": 0, - "iscrowd": 0, - "area": 7003.21090140181 - }, - { - "id": 83, - "image_id": 38, - "category_id": 86, - "segmentation": [], - "bbox": [ - 2653.8053097345137, - 602.1238938053098, - 79.64601769911515, - 95.575221238938 - ], - "ignore": 0, - "iscrowd": 0, - "area": 7612.185762393302 - }, - { - "id": 84, - "image_id": 39, - "category_id": 114, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 85, - "image_id": 39, - "category_id": 145, - "segmentation": [], - "bbox": [ - 2010.731069247442, - 1012.8854856281846, - 25.16794288943101, - 26.006874319078324 - ], - "ignore": 0, - "iscrowd": 0, - "area": 654.5395275951732 - }, - { - "id": 86, - "image_id": 39, - "category_id": 157, - "segmentation": [], - "bbox": [ - 2010.138498421424, - 1325.226003402284, - 25.265709441447207, - 25.265709441447516 - ], - "ignore": 0, - "iscrowd": 0, - "area": 638.3560735796424 - }, - { - "id": 87, - "image_id": 39, - "category_id": 159, - "segmentation": [], - "bbox": [ - 1475.0999455437145, - 698.0419219734117, - 25.265709441447235, - 26.75192764388557 - ], - "ignore": 0, - "iscrowd": 0, - "area": 675.906430849033 - }, - { - "id": 88, - "image_id": 39, - "category_id": 164, - "segmentation": [], - "bbox": [ - 1742.61922198257, - 1010.1477444854099, - 26.751927643885757, - 29.724364048761828 - ], - "ignore": 0, - "iscrowd": 0, - "area": 795.1840362929955 - }, - { - "id": 89, - "image_id": 39, - "category_id": 163, - "segmentation": [], - "bbox": [ - 1207.5806691048583, - 1011.633962687848, - 25.265709441447644, - 28.238145846323697 - ], - "ignore": 0, - "iscrowd": 0, - "area": 713.4567881184362 - }, - { - "id": 90, - "image_id": 39, - "category_id": 161, - "segmentation": [], - "bbox": [ - 134.87430187125648, - 698.7553067105815, - 30.571508424151453, - 26.97486037425145 - ], - "ignore": 0, - "iscrowd": 0, - "area": 824.6621711717374 - }, - { - "id": 91, - "image_id": 39, - "category_id": 160, - "segmentation": [], - "bbox": [ - 402.8245815888193, - 698.7553067105815, - 28.773184399201476, - 26.97486037425145 - ], - "ignore": 0, - "iscrowd": 0, - "area": 776.1526316910499 - }, - { - "id": 92, - "image_id": 39, - "category_id": 146, - "segmentation": [], - "bbox": [ - 2010.2654867256613, - 698.9719289435975, - 25.70012996680612, - 27.613156775419785 - ], - "ignore": 0, - "iscrowd": 0, - "area": 709.6617179220815 - }, - { - "id": 93, - "image_id": 40, - "category_id": 104, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 94, - "image_id": 41, - "category_id": 107, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 95, - "image_id": 42, - "category_id": 112, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 96, - "image_id": 43, - "category_id": 110, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 97, - "image_id": 44, - "category_id": 103, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 98, - "image_id": 45, - "category_id": 108, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 99, - "image_id": 46, - "category_id": 109, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 100, - "image_id": 47, - "category_id": 111, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 101, - "image_id": 48, - "category_id": 106, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 102, - "image_id": 49, - "category_id": 105, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 103, - "image_id": 50, - "category_id": 113, - "segmentation": [], - "bbox": [ - 2351.1504424778764, - 646.7256637168142, - 57.34513274336331, - 57.345132743362754 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3288.464249353927 - }, - { - "id": 104, - "image_id": 50, - "category_id": 162, - "segmentation": [], - "bbox": [ - 1742.61922198257, - 990.8269078537149, - 28.238145846323732, - 28.238145846323548 - ], - "ignore": 0, - "iscrowd": 0, - "area": 797.392880838245 - }, - { - "id": 105, - "image_id": 51, - "category_id": 115, - "segmentation": [], - "bbox": [ - 2354.336283185841, - 646.7256637168142, - 54.15929203539826, - 57.34513274336268 - ], - "ignore": 0, - "iscrowd": 0, - "area": 3105.7717910564584 - }, - { - "id": 106, - "image_id": 52, - "category_id": 84, - "segmentation": [], - "bbox": [ - 2351.1504424778764, - 1870.0884955752213, - 149.73451327433676, - 187.96460176991147 - ], - "ignore": 0, - "iscrowd": 0, - "area": 28144.788158822234 - }, - { - "id": 107, - "image_id": 53, - "category_id": 80, - "segmentation": [], - "bbox": [ - 2806.725663716814, - 1236.1061946902657, - 111.50442477875986, - 219.82300884955745 - ], - "ignore": 0, - "iscrowd": 0, - "area": 24511.23815490614 - }, - { - "id": 108, - "image_id": 54, - "category_id": 133, + "category_id": 135, "segmentation": [], "bbox": [ 3567.136929460579, @@ -2802,9 +2255,9 @@ "area": 13394.893338613647 }, { - "id": 109, - "image_id": 55, - "category_id": 53, + "id": 78, + "image_id": 39, + "category_id": 55, "segmentation": [], "bbox": [ 3536.2831858407085, @@ -2817,9 +2270,9 @@ "area": 7551.288276294153 }, { - "id": 110, - "image_id": 56, - "category_id": 41, + "id": 79, + "image_id": 40, + "category_id": 43, "segmentation": [], "bbox": [ 1588.8735043267982, @@ -2832,9 +2285,9 @@ "area": 804.2687198217866 }, { - "id": 111, - "image_id": 57, - "category_id": 32, + "id": 80, + "image_id": 41, + "category_id": 34, "segmentation": [], "bbox": [ 2530.0467184804324, @@ -2847,9 +2300,9 @@ "area": 5902.625944625885 }, { - "id": 112, - "image_id": 57, - "category_id": 75, + "id": 81, + "image_id": 41, + "category_id": 77, "segmentation": [], "bbox": [ 3545.840707964602, @@ -2862,9 +2315,9 @@ "area": 5328.530033675316 }, { - "id": 113, - "image_id": 57, - "category_id": 33, + "id": 82, + "image_id": 41, + "category_id": 35, "segmentation": [], "bbox": [ 2552.092199921346, @@ -2877,9 +2330,9 @@ "area": 710.3185966090597 }, { - "id": 114, - "image_id": 58, - "category_id": 55, + "id": 83, + "image_id": 42, + "category_id": 57, "segmentation": [], "bbox": [ 3550.518934081346, @@ -2892,9 +2345,9 @@ "area": 6965.787449667456 }, { - "id": 115, - "image_id": 59, - "category_id": 61, + "id": 84, + "image_id": 43, + "category_id": 63, "segmentation": [], "bbox": [ 3540.784990986001, @@ -2907,9 +2360,9 @@ "area": 6396.492351863999 }, { - "id": 116, - "image_id": 60, - "category_id": 65, + "id": 85, + "image_id": 44, + "category_id": 67, "segmentation": [], "bbox": [ 3549.026548672567, @@ -2922,9 +2375,9 @@ "area": 8525.64805388047 }, { - "id": 117, - "image_id": 61, - "category_id": 165, + "id": 86, + "image_id": 45, + "category_id": 167, "segmentation": [], "bbox": [ 933.8808903432171, @@ -2937,9 +2390,9 @@ "area": 1532.4477567755046 }, { - "id": 118, - "image_id": 61, - "category_id": 147, + "id": 87, + "image_id": 45, + "category_id": 149, "segmentation": [], "bbox": [ 398.2300884955743, @@ -2952,9 +2405,9 @@ "area": 1656.9674014027582 }, { - "id": 119, - "image_id": 61, - "category_id": 148, + "id": 88, + "image_id": 45, + "category_id": 150, "segmentation": [], "bbox": [ 665.840707964601, @@ -2967,9 +2420,9 @@ "area": 1640.0207729398467 }, { - "id": 120, - "image_id": 61, - "category_id": 149, + "id": 89, + "image_id": 45, + "category_id": 151, "segmentation": [], "bbox": [ 1201.0619469026528, @@ -2982,9 +2435,9 @@ "area": 1600.453425754984 }, { - "id": 121, - "image_id": 62, - "category_id": 150, + "id": 90, + "image_id": 46, + "category_id": 152, "segmentation": [], "bbox": [ 1466.8757841136517, @@ -2997,9 +2450,9 @@ "area": 1796.544819635208 }, { - "id": 122, - "image_id": 63, - "category_id": 21, + "id": 91, + "image_id": 47, + "category_id": 23, "segmentation": [], "bbox": [ 1692.8838081544984, @@ -3012,9 +2465,9 @@ "area": 1041.811162655949 }, { - "id": 123, - "image_id": 63, - "category_id": 22, + "id": 92, + "image_id": 47, + "category_id": 24, "segmentation": [], "bbox": [ 1887.9364003528733, @@ -3027,9 +2480,9 @@ "area": 1000.9558229439486 }, { - "id": 124, - "image_id": 63, - "category_id": 23, + "id": 93, + "image_id": 47, + "category_id": 25, "segmentation": [], "bbox": [ 2071.872005431134, @@ -3042,9 +2495,9 @@ "area": 1139.8639779647378 }, { - "id": 125, - "image_id": 64, - "category_id": 64, + "id": 94, + "image_id": 48, + "category_id": 66, "segmentation": [], "bbox": [ 3542.9074889867848, @@ -3057,9 +2510,9 @@ "area": 7605.6278988530785 }, { - "id": 126, - "image_id": 65, - "category_id": 170, + "id": 95, + "image_id": 49, + "category_id": 172, "segmentation": [], "bbox": [ 2926.7772973706797, @@ -3072,9 +2525,9 @@ "area": 2548.7084352504107 }, { - "id": 127, - "image_id": 66, - "category_id": 69, + "id": 96, + "image_id": 50, + "category_id": 71, "segmentation": [], "bbox": [ 3534.614939067795, @@ -3087,9 +2540,9 @@ "area": 5435.663064574062 }, { - "id": 128, - "image_id": 67, - "category_id": 51, + "id": 97, + "image_id": 51, + "category_id": 53, "segmentation": [], "bbox": [ 3539.7356828193833, @@ -3102,9 +2555,9 @@ "area": 5835.005530866154 }, { - "id": 129, - "image_id": 68, - "category_id": 94, + "id": 98, + "image_id": 52, + "category_id": 96, "segmentation": [], "bbox": [ 450.3964757709253, @@ -3117,9 +2570,9 @@ "area": 3249.4944594306126 }, { - "id": 130, - "image_id": 69, - "category_id": 91, + "id": 99, + "image_id": 53, + "category_id": 93, "segmentation": [], "bbox": [ 380.6167400881057, @@ -3132,9 +2585,9 @@ "area": 21579.460109841053 }, { - "id": 131, - "image_id": 69, - "category_id": 142, + "id": 100, + "image_id": 53, + "category_id": 144, "segmentation": [], "bbox": [ 220.59609475776048, @@ -3147,9 +2600,9 @@ "area": 1009.0656914399814 }, { - "id": 132, - "image_id": 70, - "category_id": 93, + "id": 101, + "image_id": 54, + "category_id": 95, "segmentation": [], "bbox": [ 2274.1850220264337, @@ -3162,9 +2615,9 @@ "area": 44768.57691785222 }, { - "id": 133, - "image_id": 71, - "category_id": 92, + "id": 102, + "image_id": 55, + "category_id": 94, "segmentation": [], "bbox": [ 2321.762114537443, @@ -3177,9 +2630,9 @@ "area": 37665.966737177914 }, { - "id": 134, - "image_id": 72, - "category_id": 96, + "id": 103, + "image_id": 56, + "category_id": 98, "segmentation": [], "bbox": [ 149.07488986784142, @@ -3192,9 +2645,9 @@ "area": 3822.9346581536565 }, { - "id": 135, - "image_id": 73, - "category_id": 54, + "id": 104, + "image_id": 57, + "category_id": 56, "segmentation": [], "bbox": [ 3545.3967890609224, @@ -3207,9 +2660,9 @@ "area": 7080.929496788455 }, { - "id": 136, - "image_id": 74, - "category_id": 135, + "id": 105, + "image_id": 58, + "category_id": 137, "segmentation": [], "bbox": [ 1711.0741461263794, @@ -3222,9 +2675,9 @@ "area": 1806.1786272737133 }, { - "id": 137, - "image_id": 74, - "category_id": 136, + "id": 106, + "image_id": 58, + "category_id": 138, "segmentation": [], "bbox": [ 1315.813028390932, @@ -3237,9 +2690,9 @@ "area": 2559.1327383876064 }, { - "id": 138, - "image_id": 74, - "category_id": 137, + "id": 107, + "image_id": 58, + "category_id": 139, "segmentation": [], "bbox": [ 2439.1189427312806, @@ -3252,8 +2705,8 @@ "area": 108380.1975586559 }, { - "id": 139, - "image_id": 75, + "id": 108, + "image_id": 59, "category_id": 2, "segmentation": [], "bbox": [ @@ -3267,9 +2720,9 @@ "area": 12735.271822092382 }, { - "id": 140, - "image_id": 76, - "category_id": 167, + "id": 109, + "image_id": 60, + "category_id": 169, "segmentation": [], "bbox": [ 138.72446539368624, @@ -3282,9 +2735,9 @@ "area": 3767.3769627240054 }, { - "id": 141, - "image_id": 76, - "category_id": 26, + "id": 110, + "image_id": 60, + "category_id": 28, "segmentation": [], "bbox": [ 72.39245176718806, @@ -3297,9 +2750,9 @@ "area": 137781.19482604417 }, { - "id": 142, - "image_id": 76, - "category_id": 5, + "id": 111, + "image_id": 60, + "category_id": 7, "segmentation": [], "bbox": [ 177.62114537444944, @@ -3312,9 +2765,9 @@ "area": 30422.511595412434 }, { - "id": 143, - "image_id": 77, - "category_id": 134, + "id": 112, + "image_id": 61, + "category_id": 136, "segmentation": [], "bbox": [ 3580.969162995593, @@ -3327,9 +2780,9 @@ "area": 4446.676628694679 }, { - "id": 144, - "image_id": 78, - "category_id": 169, + "id": 113, + "image_id": 62, + "category_id": 171, "segmentation": [], "bbox": [ 1826.9603524229085, @@ -3342,9 +2795,9 @@ "area": 4346.0730850589225 }, { - "id": 145, - "image_id": 78, - "category_id": 3, + "id": 114, + "image_id": 62, + "category_id": 5, "segmentation": [], "bbox": [ 764.4155706156082, @@ -3355,6 +2808,36 @@ "ignore": 0, "iscrowd": 0, "area": 3360.991462371266 + }, + { + "id": 115, + "image_id": 63, + "category_id": 4, + "segmentation": [], + "bbox": [ + 1915.7709251101323, + 900.5131503634728, + 96.16482021476455, + 75.53241459244707 + ], + "ignore": 0, + "iscrowd": 0, + "area": 7263.56106966973 + }, + { + "id": 116, + "image_id": 63, + "category_id": 3, + "segmentation": [], + "bbox": [ + 1877.5285810006787, + 1046.1437210432755, + 83.8827209972261, + 71.8402802031445 + ], + "ignore": 0, + "iscrowd": 0, + "area": 6026.158180642916 } ], "info": { @@ -3363,6 +2846,6 @@ "description": "", "contributor": "Label Studio", "url": "", - "date_created": "2025-04-07 19:37:11.354886" + "date_created": "2025-04-08 22:08:50.440599" } } \ No newline at end of file diff --git a/i18n/zh_CN/LC_MESSAGES/ok.mo b/i18n/zh_CN/LC_MESSAGES/ok.mo index 466df09..2e9d52d 100644 Binary files a/i18n/zh_CN/LC_MESSAGES/ok.mo and b/i18n/zh_CN/LC_MESSAGES/ok.mo differ diff --git a/i18n/zh_CN/LC_MESSAGES/ok.po b/i18n/zh_CN/LC_MESSAGES/ok.po index 28bda94..abdee99 100644 --- a/i18n/zh_CN/LC_MESSAGES/ok.po +++ b/i18n/zh_CN/LC_MESSAGES/ok.po @@ -501,8 +501,14 @@ msgstr "战斗后自动拾取声骸" msgid "Farm Map with Star Path" msgstr "标记寻路刷大地图" -msgid "Farm world map with a marked path of stars, start in the map screen" -msgstr "刷用星星标记的路径, 传送到起点后, 在大地图界面开始" +msgid "Farm world map with a marked path of stars (diamond as the starting point), start in the map screen" +msgstr "刷用星星标记的路径, 钻石作为起点, 在大地图界面开始, 工具使用钩锁." msgid "Stars" msgstr "星星标记" + +msgid "Need be in the map screen and have a diamond as the starting point!" +msgstr "需要在大地图界面并且标记一个钻石为起点!" + +msgid "Need be in the map screen and have a path of at least 3 stars!" +msgstr "需要在大地图界面并且至少有3个星星标记为路径!" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e09a907..4ee4026 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,7 +56,7 @@ numpy==2.2.4 # shapely rapidocr==2.0.6 # via -r .\requirements.in -ok-script==0.0.524 +ok-script==0.0.525 # via -r .\requirements.in omegaconf==2.3.0 # via ok-rapidocr-dml diff --git a/src/combat/CombatCheck.py b/src/combat/CombatCheck.py index b1b74c5..46b6785 100644 --- a/src/combat/CombatCheck.py +++ b/src/combat/CombatCheck.py @@ -28,7 +28,6 @@ class CombatCheck(BaseWWTask): self.last_in_realm_not_combat = 0 self._last_liberation = 0 self.target_enemy_time_out = 3 - self.check_pick_echo = False @property def in_liberation(self): @@ -40,6 +39,9 @@ class CombatCheck(BaseWWTask): if value: self._last_liberation = time.time() + def on_combat_check(self): + return True + def reset_to_false(self, recheck=False, reason=""): if self.should_check_monthly_card() and self.handle_monthly_card(): return True @@ -111,8 +113,9 @@ class CombatCheck(BaseWWTask): now = time.time() if now - self.last_combat_check > self.combat_check_interval: self.last_combat_check = now - if self.check_pick_echo: - self.incr_drop(self.pick_f()) + if not self.on_combat_check(): + self.log_info('on_combat_check failed') + return False if self.has_target(): self.last_in_realm_not_combat = 0 return True diff --git a/src/task/BaseWWTask.py b/src/task/BaseWWTask.py index 09e6405..2622fb0 100644 --- a/src/task/BaseWWTask.py +++ b/src/task/BaseWWTask.py @@ -139,12 +139,15 @@ class BaseWWTask(BaseTask): return None return f - def walk_to_box(self, find_function, time_out=30, end_condition=None, y_offset=0.05): + def walk_to_box(self, find_function, time_out=30, end_condition=None, y_offset=0.05, v_move_fix_time=0): if not find_function: self.log_info('find_function not found, break') return False last_direction = None + v_fix_count = 0 + original_y_offset = y_offset start = time.time() + last_v_move = start ended = False while time.time() - start < time_out: self.next_frame() @@ -158,17 +161,27 @@ class BaseWWTask(BaseTask): treasure_icon = treasure_icon[0] else: treasure_icon = None - if not treasure_icon: + next_direction = None + if treasure_icon is None: if not end_condition: self.log_info('find_function not found, break') - break + break + if 0 < v_move_fix_time < time.time() - last_v_move: + if v_fix_count > 3: + v_fix_count += 1 + y_offset = original_y_offset + 0.05 * v_fix_count else: - self.next_frame() - continue - x, y = treasure_icon.center() + v_fix_count += 1 + y_offset = original_y_offset - 0.05 * (v_fix_count - 4) + + if next_direction is None: + x, y = treasure_icon.center() + y = max(0, y - self.height_of_screen(y_offset)) + next_direction = self.get_direction(x, y, self.width, self.height) + + if next_direction == 'w' or next_direction == 's': + last_v_move = time.time() - y = max(0, y - self.height_of_screen(y_offset)) - next_direction = self.get_direction(x, y, self.width, self.height) if next_direction != last_direction: if last_direction: self.send_key_up(last_direction) @@ -184,6 +197,18 @@ class BaseWWTask(BaseTask): else: return ended + def opposite_direction(self, direction): + if direction == 'w': + return 's' + elif direction == 's': + return 'w' + elif direction == 'a': + return 'd' + elif direction == 'd': + return 'a' + else: + return 'w' + def get_direction(self, location_x, location_y, screen_width, screen_height): """ Determines the location (w, a, s, d) based on diagonals @@ -413,7 +438,11 @@ class BaseWWTask(BaseTask): """ # Load the ONNX model boxes = og.my_app.yolo_detect(self.frame, threshold=threshold, label=12) + ret = sorted(boxes, key=lambda detection: detection.x, reverse=True) + for box in ret: + box.y += box.height - 1 + box.height = 1 return ret def yolo_find_all(self, threshold=0.3): @@ -464,7 +493,7 @@ class BaseWWTask(BaseTask): self.log_debug(f'max_echo_count {max_echo_count}') if echos: self.log_info(f'yolo found echo {echos}') - return self.walk_to_box(self.find_echo, time_out=15, end_condition=self.pick_echo, y_offset=0.2), max_echo_count > 1 + return self.walk_to_box(self.find_echo, time_out=15, end_condition=self.pick_echo, v_move_fix_time=5), max_echo_count > 1 if use_color: color_percent = self.calculate_color_percentage(echo_color, front_box) self.log_debug(f'pick_echo color_percent:{color_percent}') @@ -660,33 +689,22 @@ class BaseWWTask(BaseTask): raise Exception("can't find gray_book_boss, make sure f2 is the hotkey for book") return gray_book_boss - def click_traval_button(self, use_custom=False): - if feature := self.find_one(['fast_travel_custom', 'remove_custom', 'gray_teleport'], threshold=0.6): - if feature.name == 'gray_teleport': - if use_custom: - # if not self.wait_click_feature('custom_teleport_hcenter_vcenter', raise_if_not_found=False, time_out=3): - self.click_relative(0.5, 0.5, after_sleep=1) - # if self.wait_click_feature('gray_custom_way_point', raise_if_not_found=False, time_out=4): - # self.sleep(1) - self.click_relative(0.68, 0.6, after_sleep=1) - self.click_relative(0.74, 0.92, after_sleep=1) - return True - else: - self.click_relative(0.74, 0.92, after_sleep=1) + def click_traval_button(self): + if feature := self.find_first_match_in_box('bottom_right', ['fast_travel_custom', 'gray_teleport', 'remove_custom'], threshold=0.8): + self.click(feature, after_sleep=1) + if feature.name == 'fast_travel_custom': if self.wait_click_feature(['confirm_btn_hcenter_vcenter', 'confirm_btn_highlight_hcenter_vcenter'], - relative_x=-1, raise_if_not_found=True, - threshold=0.6, - time_out=4): + relative_x=-1, raise_if_not_found=False, + threshold=0.6, + time_out=2): self.wait_click_feature(['confirm_btn_hcenter_vcenter', 'confirm_btn_highlight_hcenter_vcenter'], - relative_x=-1, raise_if_not_found=False, - threshold=0.6, - time_out=1) - return True - elif btn := self.find_one('gray_teleport', threshold=0.7): - return self.click_box(btn, relative_x=1) + relative_x=-1, raise_if_not_found=False, + threshold=0.6, + time_out=1) + return True - def wait_click_travel(self, use_custom=False): - self.wait_until(lambda: self.click_traval_button(use_custom=use_custom), raise_if_not_found=True, time_out=10, + def wait_click_travel(self): + self.wait_until(self.click_traval_button, raise_if_not_found=True, time_out=10, settle_time=1) def wait_book(self, feature="gray_book_all_monsters"): diff --git a/src/task/FarmMapTask.py b/src/task/FarmMapTask.py index e3df60b..ed96d68 100644 --- a/src/task/FarmMapTask.py +++ b/src/task/FarmMapTask.py @@ -18,38 +18,43 @@ class BigMap(WWOneTimeTask, BaseCombatTask): super().__init__(*args, **kwargs) self.big_map_frame = None self.stars = None - self.bounding_box = None - self.sorted = False self.my_box = None + self.diamond = None def reset(self): self.big_map_frame = None self.stars = None - self.bounding_box = None - self.sorted = False self.my_box = None + self.diamond = None - def load_stars(self): + def load_stars(self, wait_world=True): self.reset() self.click_relative(0.94, 556 / 1080, after_sleep=1) self.big_map_frame = self.frame + self.diamond = self.find_one('big_map_diamond', threshold=0.7, frame=self.big_map_frame, box=Box(0,0,self.big_map_frame.shape[1],self.big_map_frame.shape[0])) + if not self.diamond: + raise Exception('Need be in the map screen and have a diamond as the starting point!') self.stars = self.find_feature('big_map_star', threshold=0.7, frame=self.big_map_frame, box=Box(0,0,self.big_map_frame.shape[1],self.big_map_frame.shape[0])) all_star_len = len(self.stars) - self.stars = group_boxes_by_center_distance(self.stars, self.height_of_screen(0.2)) + self.stars = sort_stars(self.stars, self.diamond, self.height_of_screen(0.2)) + self.stars.insert(0, self.diamond) + mini_map_box = self.get_box_by_name('box_minimap') + self.my_box = self.diamond.scale(mini_map_box.width/self.diamond.width * 2) + # if self.debug: + # init_my_box = self.my_box.crop_frame(self.frame) + # self.screenshot('init_my_box', frame=init_my_box) if len(self.stars) <= 2: raise Exception('Need be in the map screen and have a path of at least 3 stars!') - self.log_info(f'Loaded {len(self.stars)} from {all_star_len} Stars', notify=True) - self.bounding_box = get_bounding_box(self.stars) - mini_map_box = self.get_box_by_name('box_minimap') - self.bounding_box.width += mini_map_box.width * 2 - self.bounding_box.height += mini_map_box.height * 2 - self.bounding_box.x -= mini_map_box.width - self.bounding_box.y -= mini_map_box.height + self.log_info(f'Loaded {len(self.stars)} from {all_star_len + 1} Stars', notify=True) + + # self.click(self.diamond, after_sleep=1) + # self.wait_click_travel() + self.send_key('esc') self.info_set('Stars', len(self.stars)) - self.send_key('esc', after_sleep=1) - + if wait_world: + self.wait_in_team_and_world() def get_angle_between(self, my_angle, angle): if my_angle > angle: @@ -63,9 +68,9 @@ class BigMap(WWOneTimeTask, BaseCombatTask): return to_turn def get_my_angle(self): - return self.rotate_arrow_and_find('box_arrow')[0] + return self.rotate_arrow_and_find()[0] - def rotate_arrow_and_find(self, box): + def rotate_arrow_and_find(self): arrow_template = self.get_feature_by_name('arrow') original_mat = arrow_template.mat max_conf = 0 @@ -75,7 +80,7 @@ class BigMap(WWOneTimeTask, BaseCombatTask): (h, w) = arrow_template.mat.shape[:2] # self.log_debug(f'turn_east h:{h} w:{w}') center = (w // 2, h // 2) - target_box = self.get_box_by_name(box) if isinstance(box, str) else box + target_box = self.get_box_by_name('arrow') # if self.debug: # self.screenshot('arrow_original', original_ mat) for angle in range(0, 360): @@ -112,36 +117,11 @@ class BigMap(WWOneTimeTask, BaseCombatTask): min_star = star return min_star - def sort_stars(self, my_box): - if self.sorted: - return - remaining_boxes = self.stars[:] # Make a copy - sorted_boxes = [] - # Start with the first box in the original list - current_box = self.find_closest(my_box) - remaining_boxes.remove(current_box) - sorted_boxes.append(current_box) - while remaining_boxes: - min_dist = float('inf') - best_idx = -1 - # Find the box in remaining_boxes closest to the current_box - for i, box in enumerate(remaining_boxes): - dist = current_box.center_distance(box) - if dist < min_dist: - min_dist = dist - best_idx = i - # Add the closest box to the sorted list and remove from remaining - next_box = remaining_boxes.pop(best_idx) - sorted_boxes.append(next_box) - current_box = next_box # Update the reference point - self.stars = sorted_boxes - self.sorted = True - def find_direction_angle(self, screenshot=False): if len(self.stars) == 0: return None, 0, 0 my_box = self.find_my_location(screenshot=screenshot) - self.sort_stars(my_box) + sort_stars(self.stars, my_box,0) min_star = self.stars[0] min_distance = my_box.center_distance(min_star) self.draw_boxes('star', min_star, color='green') @@ -160,37 +140,26 @@ class BigMap(WWOneTimeTask, BaseCombatTask): def find_my_location(self, screenshot=False): frame = self.big_map_frame mat = self.get_box_by_name('box_minimap').crop_frame(self.frame) - mat = keep_circle(mat) - # in_big_map = self.find_one(frame=frame, template=mat, threshold=0.01, match_method=cv2.TM_SQDIFF_NORMED, box=self.bounding_box, mask_function=create_circle_mask_with_hole, screenshot=screenshot, canny_lower=50, canny_higher=150) - in_big_map = self.find_one(frame=frame, template=mat, threshold=0.01, - box=self.my_box.scale(1.3) if self.my_box is not None else self.bounding_box, mask_function=create_circle_mask_with_hole, + # mask = create_circle_mask_with_hole(mat) + # mat = cv2.bitwise_and(mat, mat, mask=mask) + + in_big_map = self.find_one(frame=frame, template=mat, threshold=0.2, + box=self.my_box, mask_function=create_circle_mask_with_hole, screenshot=screenshot) # in_big_maps = self.find_feature(frame=frame, template=mat, threshold=0.01, box=self.bounding_box) if not in_big_map: raise RuntimeError('can not find my cords on big map!') - self.log_debug(f'found big map: {in_big_map}') + self.log_debug(f'found in_big_map: {in_big_map}') if self.debug and in_big_map: self.draw_boxes('stars', self.stars) - self.draw_boxes('search_map', self.bounding_box) + self.draw_boxes('my_box', self.my_box, color='green') self.draw_boxes('in_big_map', in_big_map, color='yellow') self.draw_boxes('me', in_big_map.scale(0.1), color='blue') # self.screenshot('box_minimap', frame=frame, show_box=True) - self.my_box = in_big_map + # self.screenshot('template_minimap', frame=mat) + self.my_box = in_big_map.scale(1.25) return in_big_map -def keep_circle(img): - height, width = img.shape[:2] - # Create a black mask with the same dimensions - mask = np.zeros((height, width), dtype=np.uint8) - # Define circle parameters (center and radius) - center_x, center_y = width // 2, height // 2 - radius = min(center_x, center_y) # Fit circle within image bounds - # Draw a filled white circle on the mask - cv2.circle(mask, (center_x, center_y), radius, (255), thickness=-1) - # Apply the mask to the original image using bitwise AND - result = cv2.bitwise_and(img, img, mask=mask) - return result - def create_circle_mask_with_hole(image): """ Creates a binary circular mask with a rectangular hole in the center. @@ -226,17 +195,16 @@ class FarmMapTask(BigMap): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.icon = FluentIcon.GLOBE - self.description = "Farm world map with a marked path of stars, start in the map screen" + self.description = "Farm world map with a marked path of stars (diamond as the starting point), start in the map screen" self.name = "Farm Map with Star Path" self.max_star_distance = 1000 - self.stuck_keys = [['space', 0.2], ['a',2], ['d',2]] + self.stuck_keys = [['space', 0.02], ['a',2], ['d',2], ['t', 0.02]] self.stuck_index = 0 self.last_distance = 0 - self.check_pick_echo = True @property def star_move_distance_threshold(self): - return self.height_of_screen(0.025) + return self.height_of_screen(0.03) def run(self): self.stuck_index = 0 @@ -244,6 +212,11 @@ class FarmMapTask(BigMap): self.load_stars() self.go_to_star() + def on_combat_check(self): + self.incr_drop(self.pick_f()) + self.find_my_location() + return True + def go_to_star(self): current_direction = None self.center_camera() @@ -253,17 +226,22 @@ class FarmMapTask(BigMap): self.sleep(0.01) self.middle_click(interval=1, after_sleep=0.2) if self.in_combat(): + self.sleep(2) if current_direction is not None: self.mouse_up(key='right') self.send_key_up(current_direction) current_direction = None + start = time.time() self.combat_once() - while True: - dropped, has_more = self.yolo_find_echo(use_color=False, walk=False) - self.incr_drop(dropped) - self.sleep(0.5) - if not dropped or not has_more: - break + duration = time.time() - start + if duration > 8: + self.my_box = self.my_box.scale(1.1) + while True: + dropped, has_more = self.yolo_find_echo(use_color=False, walk=False) + self.incr_drop(dropped) + self.sleep(0.5) + if not dropped or not has_more: + break star, distance, angle = self.find_direction_angle() # self.draw_boxes('next_star', star, color='green') if not star: @@ -284,17 +262,17 @@ class FarmMapTask(BigMap): else: continue elif distance == self.last_distance: - logger.info(f'might be stuck, try {[self.stuck_index % 3]}') - self.send_key(self.stuck_keys[self.stuck_index % 3][0], down_time=self.stuck_keys[self.stuck_index % 3][1], after_sleep=0.5) + logger.info(f'might be stuck, try {[self.stuck_index % 4]}') + self.send_key(self.stuck_keys[self.stuck_index % 4][0], down_time=self.stuck_keys[self.stuck_index % 4][1], after_sleep=0.5) self.stuck_index += 1 continue self.last_distance = distance if current_direction == 'w': - if 15 <= angle <= 75: + if 10 <= angle <= 80: minor_adjust = 'd' - elif -75 <= angle <= -15: + elif -80 <= angle <= -10: minor_adjust = 'a' else: minor_adjust = None @@ -305,7 +283,7 @@ class FarmMapTask(BigMap): self.sleep(0.1) self.middle_click(down_time=0.1) self.send_key_up(minor_adjust) - self.sleep(0.2) + self.sleep(0.01) continue if current_adjust: self.send_key_up(current_adjust) @@ -320,9 +298,8 @@ class FarmMapTask(BigMap): new_direction = 's' if current_direction != new_direction: self.log_info(f'changed direction {angle} {current_direction} -> {new_direction}') - if self.debug: - self.screenshot(f'{current_direction}_{new_direction}_{angle}') if current_direction: + self.mouse_up(key='right') self.send_key_up(current_direction) self.sleep(0.2) self.turn_direction(new_direction) @@ -359,38 +336,36 @@ star_color = { 'b': (190, 220) # Blue range } -def group_boxes_by_center_distance(boxes: List[Box], distance_threshold: float) -> List[Box]: + +def sort_stars(points, start_point, max_distance = 0): """ - Groups boxes where any box is close (center_distance < threshold) - to any other box in the group (connected components). - Returns the largest group. + BUILDS A PATH using Nearest Neighbor heuristic starting from 'start_point'. + Filters steps where distance < 'min_distance'. Prepends start_point. + NOTE: This is a HEURISTIC, likely NOT the absolute shortest total path. """ - if not boxes: + unvisited = points[:] # Copy the list of points to visit + if not unvisited: # Handle empty input list return [] - n = len(boxes) - visited = [False] * n - all_groups = [] - # Find connected components using DFS - for i in range(n): - if not visited[i]: - current_group = [] - stack = [i] - visited[i] = True - while stack: - current_idx = stack.pop() - current_group.append(boxes[current_idx]) - for j in range(n): - if not visited[j]: - # Use center_distance as requested - dist = boxes[current_idx].center_distance(boxes[j]) - if dist < distance_threshold: - visited[j] = True - stack.append(j) - all_groups.append(current_group) - # Return the largest group found - if not all_groups: - return [] # Should not happen if boxes is not empty, but safe check - return max(all_groups, key=len) + + path_result = [] # Initialize empty list for the results (excluding start) + current_point = start_point # Start the calculation from start_point + while unvisited: + # Find points reachable according to min_distance + # If min_distance is 0, distance(..) >= 0 is always true for distinct points. + reachable_points = [p for p in unvisited if max_distance == 0 or current_point.center_distance(p) <= max_distance] + if not reachable_points: + # Stop if no remaining points meet the criteria (or if unvisited is empty) + # print(f"Stopping: No remaining points meet criteria from {current_point}.") # Optional debug + break + # Find the closest point among the reachable ones + next_point = min(reachable_points, key=lambda p: current_point.center_distance(p)) + + path_result.append(next_point) # Add the chosen point to the result list + unvisited.remove(next_point) # Mark as visited + current_point = next_point # Update the current point for the next iteration + return path_result + + def mask_star(image): # return image diff --git a/tests/TestMap.py b/tests/TestMap.py index 31ef2c9..865cac9 100644 --- a/tests/TestMap.py +++ b/tests/TestMap.py @@ -13,20 +13,20 @@ class TestTacet(TaskTestCase): def test_find_treasure_icon(self): self.set_image('tests/images/angle_130.png') - angle, box = self.task.get_angle() + angle, box = self.task.get_my_angle() self.logger.info(f'test_find_treasure_icon {angle, box}') self.assertTrue(100 <= angle <= 200) def test_find_path(self): self.set_image('tests/images/path.png') - self.task.load_stars() + self.task.load_stars(wait_world=False) self.set_image('tests/images/mini_map.png') - self.task.my_box = self.task.box_of_screen(0.45, 0.17, 0.62, 0.54) + # self.task.my_box = self.task.box_of_screen(0.45, 0.17, 0.62, 0.54) star, distance, angle = self.task.find_direction_angle(screenshot=True) time.sleep(5) self.logger.info(f'test_find_path {star, distance, angle}') - self.assertTrue(1 <= distance <= 20) + self.assertTrue(1 <= distance <= 50) if __name__ == '__main__': diff --git a/tests/images/mini_map.png b/tests/images/mini_map.png index a5546ef..9d3416b 100644 Binary files a/tests/images/mini_map.png and b/tests/images/mini_map.png differ diff --git a/tests/images/path.png b/tests/images/path.png index dde52c4..94adb19 100644 Binary files a/tests/images/path.png and b/tests/images/path.png differ