Wendy
commited on
Upload 12 files
Browse files- Ipynb/aitw_to_coco.ipynb +295 -0
- Ipynb/aitw_to_coco_v2.ipynb +919 -0
- Ipynb/aitw_to_imgh.ipynb +744 -0
- Ipynb/aitw_to_multi.ipynb +176 -0
- Ipynb/aitw_to_swift.ipynb +479 -0
- Ipynb/built_imgh.ipynb +737 -0
- Ipynb/coco_to_aitw.ipynb +0 -0
- Ipynb/coco_to_swift.ipynb +237 -0
- Ipynb/deal_symbol.ipynb +0 -0
- Ipynb/deal_transfer_symbol.ipynb +0 -0
- Ipynb/phi35_to_aitw.ipynb +155 -0
- Ipynb/phi3_to_llava.ipynb +0 -0
Ipynb/aitw_to_coco.ipynb
ADDED
@@ -0,0 +1,295 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import json\n",
|
10 |
+
"\n",
|
11 |
+
"def read_json(file_path): \n",
|
12 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
13 |
+
" data = json.load(file)\n",
|
14 |
+
" return data\n",
|
15 |
+
"\n",
|
16 |
+
"def write_json(file_path, data):\n",
|
17 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
18 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
19 |
+
]
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": 20,
|
24 |
+
"metadata": {},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"# path = '/code/LLaVA/data/json/general_blip_train_llava.json'\n",
|
28 |
+
"# path = '/code/LLaVA/data/json/general_blip_test_llava.json'\n",
|
29 |
+
"# path = '/code/LLaVA/data/json/all_blip_train_llava.json'\n",
|
30 |
+
"# path = '/code/LLaVA/data/json/single_blip_test_llava.json'\n",
|
31 |
+
"# path = '/code/LLaVA/data/json/install_blip_test_llava.json'\n",
|
32 |
+
"# path = '/code/LLaVA/data/json/google_apps_blip_test_llava.json'\n",
|
33 |
+
"# path = '/code/LLaVA/data/json/web_shopping_blip_test_llava.json'\n"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "code",
|
38 |
+
"execution_count": 21,
|
39 |
+
"metadata": {},
|
40 |
+
"outputs": [],
|
41 |
+
"source": [
|
42 |
+
"data = read_json(path)"
|
43 |
+
]
|
44 |
+
},
|
45 |
+
{
|
46 |
+
"cell_type": "code",
|
47 |
+
"execution_count": 22,
|
48 |
+
"metadata": {},
|
49 |
+
"outputs": [],
|
50 |
+
"source": [
|
51 |
+
"data[1]\n",
|
52 |
+
"\n",
|
53 |
+
"\n",
|
54 |
+
"import re\n",
|
55 |
+
"for i in data:\n",
|
56 |
+
" temp = i['conversations'][1]['value']\n",
|
57 |
+
" match = re.search(r'\"action_type\":\\s*\"([^\"]+)\"', temp)\n",
|
58 |
+
" action_type = match.group(1)\n",
|
59 |
+
" # print(action_type)\n",
|
60 |
+
" i['action_type'] = '#' + action_type + '#'"
|
61 |
+
]
|
62 |
+
},
|
63 |
+
{
|
64 |
+
"cell_type": "code",
|
65 |
+
"execution_count": 23,
|
66 |
+
"metadata": {},
|
67 |
+
"outputs": [
|
68 |
+
{
|
69 |
+
"data": {
|
70 |
+
"text/plain": [
|
71 |
+
"{'id': 'general_blip_30',\n",
|
72 |
+
" 'image': 'blip/general_texts_splits/37_4.png',\n",
|
73 |
+
" 'conversations': [{'from': 'human',\n",
|
74 |
+
" 'value': '<image>\\nPrevious Actions: \"action_type\": \"PRESS_HOME\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.4655, 0.2199]\", \"lift_point\": \"[0.4655, 0.2199]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.3918, 0.9312]\", \"lift_point\": \"[0.3918, 0.9312]\", \"typed_text\": \"\" Goal: Search for the best pizza restaurants on Maps'},\n",
|
75 |
+
" {'from': 'gpt',\n",
|
76 |
+
" 'value': 'Action Plan: [STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"STATUS_TASK_COMPLETE\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\"'}],\n",
|
77 |
+
" 'action_type': '#STATUS_TASK_COMPLETE#'}"
|
78 |
+
]
|
79 |
+
},
|
80 |
+
"execution_count": 23,
|
81 |
+
"metadata": {},
|
82 |
+
"output_type": "execute_result"
|
83 |
+
}
|
84 |
+
],
|
85 |
+
"source": [
|
86 |
+
"data[30]"
|
87 |
+
]
|
88 |
+
},
|
89 |
+
{
|
90 |
+
"cell_type": "code",
|
91 |
+
"execution_count": 24,
|
92 |
+
"metadata": {},
|
93 |
+
"outputs": [],
|
94 |
+
"source": [
|
95 |
+
"for i in data:\n",
|
96 |
+
" if i['action_type'] == '#DUAL_POINT#':\n",
|
97 |
+
" # print(i['conversations'][1]['value'])\n",
|
98 |
+
" temp = i['conversations'][1]['value']\n",
|
99 |
+
" match = re.search(r'\"touch_point\":\\s*\"\\[([^,]+),\\s*([^]]+)\\]\"', temp)\n",
|
100 |
+
" x1 = float(match.group(1))\n",
|
101 |
+
" y1 = float(match.group(2))\n",
|
102 |
+
" match = re.search(r'\"lift_point\":\\s*\"\\[([^,]+),\\s*([^]]+)\\]\"', temp)\n",
|
103 |
+
" x2 = float(match.group(1))\n",
|
104 |
+
" y2 = float(match.group(2))\n",
|
105 |
+
"\n",
|
106 |
+
" \n",
|
107 |
+
" if x1 == 0.8 and y1 == 0.5 and x2 == 0.2 and y2 == 0.5:\n",
|
108 |
+
" i['action_type'] = \"#Scrolling Up#\"\n",
|
109 |
+
" elif x1 == 0.2 and y1 == 0.5 and x2 == 0.8 and y2 == 0.5:\n",
|
110 |
+
" i['action_type'] = \"#Scrolling Down#\"\n",
|
111 |
+
" elif x1 == 0.5 and y1 == 0.8 and x2 == 0.5 and y2 == 0.2:\n",
|
112 |
+
" i['action_type'] = \"#Scrolling Left#\"\n",
|
113 |
+
" elif x1 == 0.5 and y1 == 0.2 and x2 == 0.5 and y2 == 0.8:\n",
|
114 |
+
" i['action_type'] = \"#Scrolling Right#\"\n",
|
115 |
+
" else:\n",
|
116 |
+
" i['click_loc'] = 'touch_point: ' + str(x1) + ', ' + str(y1) + ', ' + 'lift_point: ' + str(x2) + ', ' + str(y2) \n",
|
117 |
+
" \n",
|
118 |
+
" if i['action_type'] == '#TYPE#':\n",
|
119 |
+
" # print(i['conversations'][1]['value'])\n",
|
120 |
+
" temp = i['conversations'][1]['value'].split('typed_text')[1]\n",
|
121 |
+
" content = '\\\"typed_text' + temp\n",
|
122 |
+
" i['action_type'] = i['action_type'] + '; And the content is : ' + content\n",
|
123 |
+
" # print(i['action_type'])\n",
|
124 |
+
" # break"
|
125 |
+
]
|
126 |
+
},
|
127 |
+
{
|
128 |
+
"cell_type": "code",
|
129 |
+
"execution_count": 25,
|
130 |
+
"metadata": {},
|
131 |
+
"outputs": [],
|
132 |
+
"source": [
|
133 |
+
"data[7]\n",
|
134 |
+
"\n",
|
135 |
+
"for i in data:\n",
|
136 |
+
" if i['action_type'] == '#DUAL_POINT#':\n",
|
137 |
+
" new_answer = 'The action is ' + i['action_type'] + '; ' + i['click_loc']\n",
|
138 |
+
" else:\n",
|
139 |
+
" new_answer = 'The action is ' + i['action_type']\n",
|
140 |
+
"\n",
|
141 |
+
" i['new_answer'] = new_answer"
|
142 |
+
]
|
143 |
+
},
|
144 |
+
{
|
145 |
+
"cell_type": "code",
|
146 |
+
"execution_count": 26,
|
147 |
+
"metadata": {},
|
148 |
+
"outputs": [],
|
149 |
+
"source": [
|
150 |
+
"data[0]\n",
|
151 |
+
"\n",
|
152 |
+
"temp = data[0]['conversations'][0]['value']\n",
|
153 |
+
"group_id_first = data[0]['image'].split('/')[2].split('_')[0]\n",
|
154 |
+
"for i in data:\n",
|
155 |
+
" group_id = i['image'].split('/')[2].split('_')[0]\n",
|
156 |
+
" if group_id == group_id_first:\n",
|
157 |
+
" # print(i['image'])\n",
|
158 |
+
" # print(group_id,group_id_first)\n",
|
159 |
+
" # print(temp)\n",
|
160 |
+
" \n",
|
161 |
+
" i['new_history'] = temp\n",
|
162 |
+
" temp = temp + '; ' + i['new_answer'] \n",
|
163 |
+
"\n",
|
164 |
+
" else:\n",
|
165 |
+
" # print(group_id,group_id_first)\n",
|
166 |
+
" group_id_first = i['image'].split('/')[2].split('_')[0]\n",
|
167 |
+
" i['new_history'] = i['conversations'][0]['value']\n",
|
168 |
+
" temp = i['new_history'] + '; ' + i['new_answer']\n",
|
169 |
+
" "
|
170 |
+
]
|
171 |
+
},
|
172 |
+
{
|
173 |
+
"cell_type": "code",
|
174 |
+
"execution_count": 27,
|
175 |
+
"metadata": {},
|
176 |
+
"outputs": [],
|
177 |
+
"source": [
|
178 |
+
"# image_list = []\n",
|
179 |
+
"# for i in data:\n",
|
180 |
+
"# image_list.append(i['image'])\n",
|
181 |
+
"\n",
|
182 |
+
"for i in data:\n",
|
183 |
+
" i['ori_question'] = i['conversations'][0]['value']\n",
|
184 |
+
" i['ori_answer'] = i['conversations'][1]['value']\n",
|
185 |
+
" i['conversations'][0]['value'] = i['new_history']\n",
|
186 |
+
" i['conversations'][1]['value'] = i['new_answer']\n"
|
187 |
+
]
|
188 |
+
},
|
189 |
+
{
|
190 |
+
"cell_type": "code",
|
191 |
+
"execution_count": 28,
|
192 |
+
"metadata": {},
|
193 |
+
"outputs": [],
|
194 |
+
"source": [
|
195 |
+
"# write_json('/code/Data/new_json/general_blip_train_llava_coco.json', data)\n",
|
196 |
+
"# write_json('/code/Data/new_json/general_blip_test_llava_coco.json', data)\n",
|
197 |
+
"write_json('/code/Data/new_json/all_blip_train_llava_coco.json', data)\n",
|
198 |
+
"# write_json('/code/Data/new_json/single_blip_test_llava_coco.json', data)\n",
|
199 |
+
"# write_json('/code/Data/new_json/install_blip_test_llava_coco.json', data)\n",
|
200 |
+
"# write_json('/code/Data/new_json/google_apps_blip_test_llava_coco.json', data)\n",
|
201 |
+
"# write_json('/code/Data/new_json/web_shopping_blip_test_llava_coco.json', data)\n",
|
202 |
+
"\n",
|
203 |
+
"\n"
|
204 |
+
]
|
205 |
+
},
|
206 |
+
{
|
207 |
+
"cell_type": "code",
|
208 |
+
"execution_count": 11,
|
209 |
+
"metadata": {},
|
210 |
+
"outputs": [
|
211 |
+
{
|
212 |
+
"data": {
|
213 |
+
"text/plain": [
|
214 |
+
"1028854"
|
215 |
+
]
|
216 |
+
},
|
217 |
+
"execution_count": 11,
|
218 |
+
"metadata": {},
|
219 |
+
"output_type": "execute_result"
|
220 |
+
}
|
221 |
+
],
|
222 |
+
"source": [
|
223 |
+
"len(data)"
|
224 |
+
]
|
225 |
+
},
|
226 |
+
{
|
227 |
+
"cell_type": "code",
|
228 |
+
"execution_count": 21,
|
229 |
+
"metadata": {},
|
230 |
+
"outputs": [
|
231 |
+
{
|
232 |
+
"name": "stdout",
|
233 |
+
"output_type": "stream",
|
234 |
+
"text": [
|
235 |
+
"454910\n"
|
236 |
+
]
|
237 |
+
},
|
238 |
+
{
|
239 |
+
"data": {
|
240 |
+
"text/plain": [
|
241 |
+
"{'id': 'google_apps_blip_387111',\n",
|
242 |
+
" 'image': 'blip/google_apps_texts_splits/484287_1.png',\n",
|
243 |
+
" 'conversations': [{'from': 'human',\n",
|
244 |
+
" 'value': '<image>\\nPrevious Actions: Goal: Open wifi settings'},\n",
|
245 |
+
" {'from': 'gpt', 'value': 'The action is #Scrolling Up#'}],\n",
|
246 |
+
" 'action_type': '#Scrolling Up#',\n",
|
247 |
+
" 'new_answer': 'The action is #Scrolling Up#',\n",
|
248 |
+
" 'new_history': '<image>\\nPrevious Actions: Goal: Open wifi settings',\n",
|
249 |
+
" 'ori_question': '<image>\\nPrevious Actions: Goal: Open wifi settings',\n",
|
250 |
+
" 'ori_answer': 'Action Plan: [DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\"'}"
|
251 |
+
]
|
252 |
+
},
|
253 |
+
"execution_count": 21,
|
254 |
+
"metadata": {},
|
255 |
+
"output_type": "execute_result"
|
256 |
+
}
|
257 |
+
],
|
258 |
+
"source": [
|
259 |
+
"import random\n",
|
260 |
+
"random_number = random.randint(0, 1028854)\n",
|
261 |
+
"\n",
|
262 |
+
"print(random_number)\n",
|
263 |
+
"data[random_number]"
|
264 |
+
]
|
265 |
+
},
|
266 |
+
{
|
267 |
+
"cell_type": "code",
|
268 |
+
"execution_count": null,
|
269 |
+
"metadata": {},
|
270 |
+
"outputs": [],
|
271 |
+
"source": []
|
272 |
+
}
|
273 |
+
],
|
274 |
+
"metadata": {
|
275 |
+
"kernelspec": {
|
276 |
+
"display_name": "llava",
|
277 |
+
"language": "python",
|
278 |
+
"name": "python3"
|
279 |
+
},
|
280 |
+
"language_info": {
|
281 |
+
"codemirror_mode": {
|
282 |
+
"name": "ipython",
|
283 |
+
"version": 3
|
284 |
+
},
|
285 |
+
"file_extension": ".py",
|
286 |
+
"mimetype": "text/x-python",
|
287 |
+
"name": "python",
|
288 |
+
"nbconvert_exporter": "python",
|
289 |
+
"pygments_lexer": "ipython3",
|
290 |
+
"version": "3.10.14"
|
291 |
+
}
|
292 |
+
},
|
293 |
+
"nbformat": 4,
|
294 |
+
"nbformat_minor": 2
|
295 |
+
}
|
Ipynb/aitw_to_coco_v2.ipynb
ADDED
@@ -0,0 +1,919 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import json\n",
|
10 |
+
"\n",
|
11 |
+
"def read_json(file_path): \n",
|
12 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
13 |
+
" data = json.load(file)\n",
|
14 |
+
" return data\n",
|
15 |
+
"\n",
|
16 |
+
"def write_json(file_path, data):\n",
|
17 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
18 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
19 |
+
]
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": 31,
|
24 |
+
"metadata": {},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"# path = '/code/LLaVA/data/json/general_blip_train_llava.json'\n",
|
28 |
+
"# path = '/code/LLaVA/data/json/general_blip_test_llava.json'\n",
|
29 |
+
"path = '/code/LLaVA/data/json/all_blip_train_llava.json'\n",
|
30 |
+
"# path = '/code/LLaVA/data/json/single_blip_test_llava.json'\n",
|
31 |
+
"# path = '/code/LLaVA/data/json/install_blip_test_llava.json'\n",
|
32 |
+
"# path = '/code/LLaVA/data/json/google_apps_blip_test_llava.json'\n",
|
33 |
+
"# path = '/code/LLaVA/data/json/web_shopping_blip_test_llava.json'\n"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "code",
|
38 |
+
"execution_count": 32,
|
39 |
+
"metadata": {},
|
40 |
+
"outputs": [],
|
41 |
+
"source": [
|
42 |
+
"data = read_json(path)"
|
43 |
+
]
|
44 |
+
},
|
45 |
+
{
|
46 |
+
"cell_type": "code",
|
47 |
+
"execution_count": 33,
|
48 |
+
"metadata": {},
|
49 |
+
"outputs": [],
|
50 |
+
"source": [
|
51 |
+
"data[1]\n",
|
52 |
+
"\n",
|
53 |
+
"\n",
|
54 |
+
"import re\n",
|
55 |
+
"for i in data:\n",
|
56 |
+
" temp = i['conversations'][1]['value']\n",
|
57 |
+
" match = re.search(r'\"action_type\":\\s*\"([^\"]+)\"', temp)\n",
|
58 |
+
" action_type = match.group(1)\n",
|
59 |
+
" # print(action_type)\n",
|
60 |
+
" i['action_type'] = '#' + action_type + '#'"
|
61 |
+
]
|
62 |
+
},
|
63 |
+
{
|
64 |
+
"cell_type": "code",
|
65 |
+
"execution_count": 34,
|
66 |
+
"metadata": {},
|
67 |
+
"outputs": [
|
68 |
+
{
|
69 |
+
"data": {
|
70 |
+
"text/plain": [
|
71 |
+
"{'id': 'general_blip_30',\n",
|
72 |
+
" 'image': 'blip/general_texts_splits/37_4.png',\n",
|
73 |
+
" 'conversations': [{'from': 'human',\n",
|
74 |
+
" 'value': '<image>\\nPrevious Actions: \"action_type\": \"PRESS_HOME\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.4655, 0.2199]\", \"lift_point\": \"[0.4655, 0.2199]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.3918, 0.9312]\", \"lift_point\": \"[0.3918, 0.9312]\", \"typed_text\": \"\" Goal: Search for the best pizza restaurants on Maps'},\n",
|
75 |
+
" {'from': 'gpt',\n",
|
76 |
+
" 'value': 'Action Plan: [STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"STATUS_TASK_COMPLETE\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\"'}],\n",
|
77 |
+
" 'action_type': '#STATUS_TASK_COMPLETE#'}"
|
78 |
+
]
|
79 |
+
},
|
80 |
+
"execution_count": 34,
|
81 |
+
"metadata": {},
|
82 |
+
"output_type": "execute_result"
|
83 |
+
}
|
84 |
+
],
|
85 |
+
"source": [
|
86 |
+
"data[30]"
|
87 |
+
]
|
88 |
+
},
|
89 |
+
{
|
90 |
+
"cell_type": "code",
|
91 |
+
"execution_count": 35,
|
92 |
+
"metadata": {},
|
93 |
+
"outputs": [],
|
94 |
+
"source": [
|
95 |
+
"for i in data:\n",
|
96 |
+
" if i['action_type'] == '#DUAL_POINT#':\n",
|
97 |
+
" # print(i['conversations'][1]['value'])\n",
|
98 |
+
" temp = i['conversations'][1]['value']\n",
|
99 |
+
" match = re.search(r'\"touch_point\":\\s*\"\\[([^,]+),\\s*([^]]+)\\]\"', temp)\n",
|
100 |
+
" x1 = float(match.group(1))\n",
|
101 |
+
" y1 = float(match.group(2))\n",
|
102 |
+
" match = re.search(r'\"lift_point\":\\s*\"\\[([^,]+),\\s*([^]]+)\\]\"', temp)\n",
|
103 |
+
" x2 = float(match.group(1))\n",
|
104 |
+
" y2 = float(match.group(2))\n",
|
105 |
+
"\n",
|
106 |
+
" \n",
|
107 |
+
" if x1 == 0.8 and y1 == 0.5 and x2 == 0.2 and y2 == 0.5:\n",
|
108 |
+
" i['action_type'] = \"#Scrolling Up#\"\n",
|
109 |
+
" elif x1 == 0.2 and y1 == 0.5 and x2 == 0.8 and y2 == 0.5:\n",
|
110 |
+
" i['action_type'] = \"#Scrolling Down#\"\n",
|
111 |
+
" elif x1 == 0.5 and y1 == 0.8 and x2 == 0.5 and y2 == 0.2:\n",
|
112 |
+
" i['action_type'] = \"#Scrolling Left#\"\n",
|
113 |
+
" elif x1 == 0.5 and y1 == 0.2 and x2 == 0.5 and y2 == 0.8:\n",
|
114 |
+
" i['action_type'] = \"#Scrolling Right#\"\n",
|
115 |
+
" else:\n",
|
116 |
+
" i['click_loc'] = 'touch_point: ' + str(x1) + ', ' + str(y1) + ', ' + 'lift_point: ' + str(x2) + ', ' + str(y2) \n",
|
117 |
+
" \n",
|
118 |
+
" if i['action_type'] == '#TYPE#':\n",
|
119 |
+
" # print(i['conversations'][1]['value'])\n",
|
120 |
+
" temp = i['conversations'][1]['value'].split('typed_text')[1]\n",
|
121 |
+
" content = '\\\"typed_text' + temp\n",
|
122 |
+
" i['action_type'] = i['action_type'] + '; And the content is : ' + content\n",
|
123 |
+
" # print(i['action_type'])\n",
|
124 |
+
" # break"
|
125 |
+
]
|
126 |
+
},
|
127 |
+
{
|
128 |
+
"cell_type": "code",
|
129 |
+
"execution_count": 36,
|
130 |
+
"metadata": {},
|
131 |
+
"outputs": [
|
132 |
+
{
|
133 |
+
"name": "stdout",
|
134 |
+
"output_type": "stream",
|
135 |
+
"text": [
|
136 |
+
"#DUAL_POINT#\n",
|
137 |
+
"#DUAL_POINT#\n",
|
138 |
+
"#DUAL_POINT#\n",
|
139 |
+
"#DUAL_POINT#\n",
|
140 |
+
"#DUAL_POINT#\n",
|
141 |
+
"#DUAL_POINT#\n",
|
142 |
+
"#DUAL_POINT#\n",
|
143 |
+
"#DUAL_POINT#\n",
|
144 |
+
"#STATUS_TASK_COMPLETE#\n",
|
145 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
146 |
+
"#DUAL_POINT#\n",
|
147 |
+
"#STATUS_TASK_COMPLETE#\n",
|
148 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
149 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
150 |
+
"#DUAL_POINT#\n",
|
151 |
+
"#TYPE#; And the content is : \"typed_text\": \"How much does a 2x4x8 board cost at Lowes?\"\n",
|
152 |
+
"#DUAL_POINT#\n",
|
153 |
+
"#STATUS_TASK_COMPLETE#\n",
|
154 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
155 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
156 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
157 |
+
"#DUAL_POINT#\n",
|
158 |
+
"#TYPE#; And the content is : \"typed_text\": \"Google the capital of Mexico\"\n",
|
159 |
+
"#DUAL_POINT#\n",
|
160 |
+
"#STATUS_TASK_COMPLETE#\n",
|
161 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
162 |
+
"#STATUS_TASK_COMPLETE#\n",
|
163 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
164 |
+
"#DUAL_POINT#\n",
|
165 |
+
"#DUAL_POINT#\n",
|
166 |
+
"#STATUS_TASK_COMPLETE#\n",
|
167 |
+
"#DUAL_POINT#\n",
|
168 |
+
"#TYPE#; And the content is : \"typed_text\": \"What time is it in Berlin?\"\n",
|
169 |
+
"#TYPE#; And the content is : \"typed_text\": \"\"\n",
|
170 |
+
"#DUAL_POINT#\n",
|
171 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
172 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
173 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
174 |
+
"#DUAL_POINT#\n",
|
175 |
+
"#DUAL_POINT#\n",
|
176 |
+
"#DUAL_POINT#\n",
|
177 |
+
"#DUAL_POINT#\n",
|
178 |
+
"#DUAL_POINT#\n",
|
179 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
180 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
181 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
182 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
183 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
184 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
185 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
186 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
187 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
188 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
189 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
190 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
191 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
192 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
193 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
194 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
195 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
196 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
197 |
+
"if the action is PRESS; if the target is BACK; #PRESS_BACK#\n",
|
198 |
+
"if the action is Scrolling; if the target is Down; #Scrolling Down#\n",
|
199 |
+
"#DUAL_POINT#\n",
|
200 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
201 |
+
"#DUAL_POINT#\n",
|
202 |
+
"#STATUS_TASK_COMPLETE#\n",
|
203 |
+
"#DUAL_POINT#\n",
|
204 |
+
"#DUAL_POINT#\n",
|
205 |
+
"if the action is PRESS; if the target is HOME; #PRESS_HOME#\n",
|
206 |
+
"#DUAL_POINT#\n",
|
207 |
+
"#TYPE#; And the content is : \"typed_text\": \"Play the latest video from the Wall Street Journal\"\n",
|
208 |
+
"#TYPE#; And the content is : \"typed_text\": \"\"\n",
|
209 |
+
"if the action is PRESS; if the target is ENTER; #PRESS_ENTER#\n",
|
210 |
+
"#DUAL_POINT#\n",
|
211 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
212 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
213 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
214 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
215 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
216 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
217 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
218 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
219 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
220 |
+
"#DUAL_POINT#\n",
|
221 |
+
"#DUAL_POINT#\n",
|
222 |
+
"#DUAL_POINT#\n",
|
223 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
224 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
225 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
226 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
227 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
228 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
229 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
230 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
231 |
+
"if the action is PRESS; if the target is BACK; #PRESS_BACK#\n",
|
232 |
+
"#DUAL_POINT#\n",
|
233 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
234 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n",
|
235 |
+
"if the action is Scrolling; if the target is Up; #Scrolling Up#\n"
|
236 |
+
]
|
237 |
+
}
|
238 |
+
],
|
239 |
+
"source": [
|
240 |
+
"for i in data[:100]:\n",
|
241 |
+
" if 'PRESS' in i['action_type']: \n",
|
242 |
+
" temp = i['action_type'].split('#')[1].split('_')\n",
|
243 |
+
" new_temp = 'if the action is ' + temp[0] + '; ' + 'if the target is ' + temp[1] + '; '\n",
|
244 |
+
" i['action_type'] = new_temp + ' ' + i['action_type']\n",
|
245 |
+
" \n",
|
246 |
+
" if 'Scrolling' in i['action_type']: \n",
|
247 |
+
" temp = i['action_type'].split('#')[1].split(' ')\n",
|
248 |
+
" new_temp = 'if the action is ' + temp[0] + '; ' + 'if the target is ' + temp[1] + '; '\n",
|
249 |
+
" \n",
|
250 |
+
" i['action_type'] = new_temp + ' ' + i['action_type']\n",
|
251 |
+
"\n",
|
252 |
+
" print(i['action_type'] )"
|
253 |
+
]
|
254 |
+
},
|
255 |
+
{
|
256 |
+
"cell_type": "code",
|
257 |
+
"execution_count": 37,
|
258 |
+
"metadata": {},
|
259 |
+
"outputs": [],
|
260 |
+
"source": [
|
261 |
+
"data[7]\n",
|
262 |
+
"\n",
|
263 |
+
"for i in data:\n",
|
264 |
+
" if i['action_type'] == '#DUAL_POINT#':\n",
|
265 |
+
" new_answer = 'The action is ' + i['action_type'] + '; ' + i['click_loc']\n",
|
266 |
+
"\n",
|
267 |
+
" ####################### 文字定位 #######################\n",
|
268 |
+
" import re\n",
|
269 |
+
" pattern = r'(\\d+\\.\\d+)'\n",
|
270 |
+
" numbers = re.findall(pattern, new_answer)\n",
|
271 |
+
" numbers = [float(num) for num in numbers]\n",
|
272 |
+
" # print(numbers)\n",
|
273 |
+
" y = numbers[0]\n",
|
274 |
+
" x = numbers[1]\n",
|
275 |
+
" loc_description = ' '.join(loc_word(y,x))\n",
|
276 |
+
" #####################################################################\n",
|
277 |
+
"\n",
|
278 |
+
"\n",
|
279 |
+
" else:\n",
|
280 |
+
" new_answer = 'The action is ' + i['action_type']\n",
|
281 |
+
" loc_description = ''\n",
|
282 |
+
"\n",
|
283 |
+
"\n",
|
284 |
+
" # i['new_answer'] = new_answer\n",
|
285 |
+
" i['new_answer'] = loc_description + ';' + new_answer"
|
286 |
+
]
|
287 |
+
},
|
288 |
+
{
|
289 |
+
"cell_type": "code",
|
290 |
+
"execution_count": 38,
|
291 |
+
"metadata": {},
|
292 |
+
"outputs": [],
|
293 |
+
"source": [
|
294 |
+
"data[0]\n",
|
295 |
+
"\n",
|
296 |
+
"temp = data[0]['conversations'][0]['value']\n",
|
297 |
+
"group_id_first = data[0]['image'].split('/')[2].split('_')[0]\n",
|
298 |
+
"\n",
|
299 |
+
"\n",
|
300 |
+
"for i in data:\n",
|
301 |
+
" group_id = i['image'].split('/')[2].split('_')[0]\n",
|
302 |
+
" if group_id == group_id_first:\n",
|
303 |
+
" # print(i['image'])\n",
|
304 |
+
" # print(group_id,group_id_first)\n",
|
305 |
+
" # print(temp)\n",
|
306 |
+
" \n",
|
307 |
+
" i['new_history'] = temp\n",
|
308 |
+
" temp = temp + '; ' + i['new_answer'] \n",
|
309 |
+
"\n",
|
310 |
+
" else:\n",
|
311 |
+
" # print(group_id,group_id_first)\n",
|
312 |
+
" group_id_first = i['image'].split('/')[2].split('_')[0]\n",
|
313 |
+
" i['new_history'] = i['conversations'][0]['value']\n",
|
314 |
+
" temp = i['new_history'] + '; ' + i['new_answer']\n",
|
315 |
+
" "
|
316 |
+
]
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"cell_type": "code",
|
320 |
+
"execution_count": 39,
|
321 |
+
"metadata": {},
|
322 |
+
"outputs": [
|
323 |
+
{
|
324 |
+
"name": "stdout",
|
325 |
+
"output_type": "stream",
|
326 |
+
"text": [
|
327 |
+
"{'action_type': '#Scrolling Up#',\n",
|
328 |
+
" 'conversations': [{'from': 'human',\n",
|
329 |
+
" 'value': '<image>\\n'\n",
|
330 |
+
" 'Previous Actions: \"action_type\": \"DUAL_POINT\", '\n",
|
331 |
+
" '\"touch_point\": \"[0.3379, 0.614]\", \"lift_point\": '\n",
|
332 |
+
" '\"[0.3379, 0.614]\", \"typed_text\": \"\" '\n",
|
333 |
+
" '\"action_type\": \"TYPE\", \"touch_point\": \"[-1.0, '\n",
|
334 |
+
" '-1.0]\", \"lift_point\": \"[-1.0, -1.0]\", '\n",
|
335 |
+
" '\"typed_text\": \"Whats the news this weekend?\" '\n",
|
336 |
+
" '\"action_type\": \"TYPE\", \"touch_point\": \"[-1.0, '\n",
|
337 |
+
" '-1.0]\", \"lift_point\": \"[-1.0, -1.0]\", '\n",
|
338 |
+
" '\"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", '\n",
|
339 |
+
" '\"touch_point\": \"[0.1473, 0.5421]\", \"lift_point\": '\n",
|
340 |
+
" '\"[0.1473, 0.5421]\", \"typed_text\": \"\" '\n",
|
341 |
+
" '\"action_type\": \"DUAL_POINT\", \"touch_point\": '\n",
|
342 |
+
" '\"[0.3755, 0.3255]\", \"lift_point\": \"[0.3755, '\n",
|
343 |
+
" '0.3255]\", \"typed_text\": \"\" Goal: What\\'s the '\n",
|
344 |
+
" 'news this weekend?'},\n",
|
345 |
+
" {'from': 'gpt',\n",
|
346 |
+
" 'value': 'Action Plan: '\n",
|
347 |
+
" '[DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,PRESS_BACK,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT]\\n'\n",
|
348 |
+
" '; Action Decision: \"action_type\": \"DUAL_POINT\", '\n",
|
349 |
+
" '\"touch_point\": \"[0.8, 0.5]\", \"lift_point\": '\n",
|
350 |
+
" '\"[0.2, 0.5]\", \"typed_text\": \"\"'}],\n",
|
351 |
+
" 'id': 'general_blip_108',\n",
|
352 |
+
" 'image': 'blip/general_texts_splits/176_6.png',\n",
|
353 |
+
" 'new_answer': ';The action is #Scrolling Up#',\n",
|
354 |
+
" 'new_history': '<image>\\n'\n",
|
355 |
+
" \"Previous Actions: Goal: What's the news this weekend?; if the \"\n",
|
356 |
+
" 'point up the half page height; if the point right the half '\n",
|
357 |
+
" 'page width; if the point down the quarter page height; if the '\n",
|
358 |
+
" 'point left the three quarter page width; if the point up the '\n",
|
359 |
+
" 'final subset;;The action is #DUAL_POINT#; touch_point: '\n",
|
360 |
+
" '0.3379, 0.614, lift_point: 0.3379, 0.614; ;The action is '\n",
|
361 |
+
" '#TYPE#; And the content is : \"typed_text\": \"Whats the news '\n",
|
362 |
+
" 'this weekend?\"; ;The action is #TYPE#; And the content is : '\n",
|
363 |
+
" '\"typed_text\": \"\"; if the point up the half page height; if '\n",
|
364 |
+
" 'the point right the half page width; if the point up the '\n",
|
365 |
+
" 'quarter page height; if the point left the three quarter page '\n",
|
366 |
+
" 'width; if the point down the final subset;;The action is '\n",
|
367 |
+
" '#DUAL_POINT#; touch_point: 0.1473, 0.5421, lift_point: '\n",
|
368 |
+
" '0.1473, 0.5421; if the point up the half page height; if the '\n",
|
369 |
+
" 'point down the quarter page height; if the point right the '\n",
|
370 |
+
" 'quarter page width; if the point down the final subset;;The '\n",
|
371 |
+
" 'action is #DUAL_POINT#; touch_point: 0.3755, 0.3255, '\n",
|
372 |
+
" 'lift_point: 0.3755, 0.3255'}\n"
|
373 |
+
]
|
374 |
+
}
|
375 |
+
],
|
376 |
+
"source": [
|
377 |
+
"import pprint\n",
|
378 |
+
"\n",
|
379 |
+
"pprint.pprint(data[108])"
|
380 |
+
]
|
381 |
+
},
|
382 |
+
{
|
383 |
+
"cell_type": "markdown",
|
384 |
+
"metadata": {},
|
385 |
+
"source": [
|
386 |
+
"#### 下次先执行这个 再执行上面的"
|
387 |
+
]
|
388 |
+
},
|
389 |
+
{
|
390 |
+
"cell_type": "code",
|
391 |
+
"execution_count": 40,
|
392 |
+
"metadata": {},
|
393 |
+
"outputs": [
|
394 |
+
{
|
395 |
+
"name": "stdout",
|
396 |
+
"output_type": "stream",
|
397 |
+
"text": [
|
398 |
+
"[0.8433, 0.9176, 0.8433, 0.9176]\n"
|
399 |
+
]
|
400 |
+
}
|
401 |
+
],
|
402 |
+
"source": [
|
403 |
+
"data[101]['click_loc']\n",
|
404 |
+
"\n",
|
405 |
+
"\n",
|
406 |
+
"import re\n",
|
407 |
+
"text = 'touch_point: 0.8433, 0.9176, lift_point: 0.8433, 0.9176'\n",
|
408 |
+
"pattern = r'(\\d+\\.\\d+)'\n",
|
409 |
+
"numbers = re.findall(pattern, text)\n",
|
410 |
+
"numbers = [float(num) for num in numbers]\n",
|
411 |
+
"\n",
|
412 |
+
"print(numbers) \n",
|
413 |
+
"y = numbers[0]\n",
|
414 |
+
"x = numbers[1]\n",
|
415 |
+
"\n",
|
416 |
+
"\n",
|
417 |
+
"\n",
|
418 |
+
"def loc_word(y,x):\n",
|
419 |
+
"\n",
|
420 |
+
" loc = []\n",
|
421 |
+
" loc_des = []\n",
|
422 |
+
" if y > 0.5 :\n",
|
423 |
+
" loc.append('down')\n",
|
424 |
+
" loc_des.append('if the point down the half page height;')\n",
|
425 |
+
"\n",
|
426 |
+
"\n",
|
427 |
+
" if x > 0.5 :\n",
|
428 |
+
" loc.append('right')\n",
|
429 |
+
" loc_des.append('if the point right the half page width;')\n",
|
430 |
+
"\n",
|
431 |
+
"\n",
|
432 |
+
" if y > 0.75 : \n",
|
433 |
+
" loc.append('down')\n",
|
434 |
+
" loc_des.append('if the point down the three quarter page height;')\n",
|
435 |
+
"\n",
|
436 |
+
"\n",
|
437 |
+
" if x > 0.75 :\n",
|
438 |
+
" loc.append('right')\n",
|
439 |
+
" loc_des.append('if the point right the three quarter page width;')\n",
|
440 |
+
"\n",
|
441 |
+
" if y > 0.875:\n",
|
442 |
+
" loc.append('down')\n",
|
443 |
+
" loc_des.append('if the point down the final subset;')\n",
|
444 |
+
"\n",
|
445 |
+
" else:\n",
|
446 |
+
" loc.append('up')\n",
|
447 |
+
" loc_des.append('if the point up the final subset;')\n",
|
448 |
+
"\n",
|
449 |
+
"\n",
|
450 |
+
" else:\n",
|
451 |
+
" loc.append('left') \n",
|
452 |
+
" loc_des.append('if the point left the three quarter page width;')\n",
|
453 |
+
"\n",
|
454 |
+
" if y > 0.875:\n",
|
455 |
+
" loc.append('down')\n",
|
456 |
+
" loc_des.append('if the point down the final subset;')\n",
|
457 |
+
"\n",
|
458 |
+
" else:\n",
|
459 |
+
" loc.append('up')\n",
|
460 |
+
" loc_des.append('if the point up the final subset;')\n",
|
461 |
+
"\n",
|
462 |
+
"\n",
|
463 |
+
"\n",
|
464 |
+
" else:\n",
|
465 |
+
" loc.append('up') \n",
|
466 |
+
" loc_des.append('if the point up the three quarter page height;')\n",
|
467 |
+
"\n",
|
468 |
+
" if x > 0.75 :\n",
|
469 |
+
" loc.append('right')\n",
|
470 |
+
" loc_des.append('if the point right the three quarter page width;')\n",
|
471 |
+
"\n",
|
472 |
+
" if y > 0.625:\n",
|
473 |
+
" loc.append('down')\n",
|
474 |
+
" loc_des.append('if the point down the final subset;')\n",
|
475 |
+
" else:\n",
|
476 |
+
" loc.append('up')\n",
|
477 |
+
" loc_des.append('if the point up the final subset;')\n",
|
478 |
+
" else:\n",
|
479 |
+
" loc.append('left') \n",
|
480 |
+
" loc_des.append('if the point left the three quarter page width;')\n",
|
481 |
+
"\n",
|
482 |
+
"\n",
|
483 |
+
" if y > 0.625:\n",
|
484 |
+
" loc.append('down')\n",
|
485 |
+
" loc_des.append('if the point down the final subset;')\n",
|
486 |
+
" else:\n",
|
487 |
+
" loc.append('up')\n",
|
488 |
+
" loc_des.append('if the point up the final subset;')\n",
|
489 |
+
"\n",
|
490 |
+
"\n",
|
491 |
+
" else:\n",
|
492 |
+
" loc.append('left') \n",
|
493 |
+
" loc_des.append('if the point left the half page width;')\n",
|
494 |
+
"\n",
|
495 |
+
" if y > 0.75 : \n",
|
496 |
+
" loc.append('down')\n",
|
497 |
+
" loc_des.append('if the point down the three quarter page height;')\n",
|
498 |
+
"\n",
|
499 |
+
"\n",
|
500 |
+
" if x > 0.25 :\n",
|
501 |
+
" loc.append('right')\n",
|
502 |
+
" loc_des.append('if the point right the quarter page width;')\n",
|
503 |
+
"\n",
|
504 |
+
" if y > 0.875:\n",
|
505 |
+
" loc.append('down')\n",
|
506 |
+
" loc_des.append('if the point down the final subset;')\n",
|
507 |
+
" else:\n",
|
508 |
+
" loc.append('up')\n",
|
509 |
+
" loc_des.append('if the point up the final subset;')\n",
|
510 |
+
"\n",
|
511 |
+
" else:\n",
|
512 |
+
" loc.append('left') \n",
|
513 |
+
" loc_des.append('if the point left the quarter page width;')\n",
|
514 |
+
"\n",
|
515 |
+
" if y > 0.875:\n",
|
516 |
+
" loc.append('down')\n",
|
517 |
+
" loc_des.append('if the point down the final subset;')\n",
|
518 |
+
" else:\n",
|
519 |
+
" loc.append('up')\n",
|
520 |
+
" loc_des.append('if the point up the final subset;') \n",
|
521 |
+
" else:\n",
|
522 |
+
" loc.append('up') \n",
|
523 |
+
" loc_des.append('if the up the three quarter page height;')\n",
|
524 |
+
"\n",
|
525 |
+
"\n",
|
526 |
+
"\n",
|
527 |
+
" if x > 0.25 :\n",
|
528 |
+
" loc.append('right')\n",
|
529 |
+
" loc_des.append('if the point right the quarter page width;')\n",
|
530 |
+
"\n",
|
531 |
+
" if y > 0.625:\n",
|
532 |
+
" loc.append('down')\n",
|
533 |
+
" loc_des.append('if the point down the final subset;')\n",
|
534 |
+
" else:\n",
|
535 |
+
" loc.append('up')\n",
|
536 |
+
" loc_des.append('if the point up the final subset;')\n",
|
537 |
+
"\n",
|
538 |
+
" else:\n",
|
539 |
+
" loc.append('left') \n",
|
540 |
+
" loc_des.append('if the point left the quarter page width;')\n",
|
541 |
+
"\n",
|
542 |
+
" if y > 0.625:\n",
|
543 |
+
" loc.append('down')\n",
|
544 |
+
" loc_des.append('if the point down the final subset;')\n",
|
545 |
+
" else:\n",
|
546 |
+
" loc.append('up')\n",
|
547 |
+
" loc_des.append('if the point up the final subset;')\n",
|
548 |
+
"\n",
|
549 |
+
"\n",
|
550 |
+
" else:\n",
|
551 |
+
" loc.append('up')\n",
|
552 |
+
" loc_des.append('if the point up the half page height;')\n",
|
553 |
+
"\n",
|
554 |
+
"\n",
|
555 |
+
" if x > 0.5 :\n",
|
556 |
+
" loc.append('right')\n",
|
557 |
+
" loc_des.append('if the point right the half page width;')\n",
|
558 |
+
"\n",
|
559 |
+
"\n",
|
560 |
+
"\n",
|
561 |
+
" if y > 0.25 : \n",
|
562 |
+
" loc.append('down')\n",
|
563 |
+
" loc_des.append('if the point down the quarter page height;')\n",
|
564 |
+
"\n",
|
565 |
+
"\n",
|
566 |
+
"\n",
|
567 |
+
" if x > 0.75 :\n",
|
568 |
+
" loc.append('right')\n",
|
569 |
+
" loc_des.append('if the point right the three quarter page width;')\n",
|
570 |
+
"\n",
|
571 |
+
"\n",
|
572 |
+
" if y > 0.375:\n",
|
573 |
+
" loc.append('down')\n",
|
574 |
+
" loc_des.append('if the point down the final subset;')\n",
|
575 |
+
" else:\n",
|
576 |
+
" loc.append('up')\n",
|
577 |
+
" loc_des.append('if the point up the final subset;')\n",
|
578 |
+
"\n",
|
579 |
+
"\n",
|
580 |
+
" else:\n",
|
581 |
+
" loc.append('left') \n",
|
582 |
+
" loc_des.append('if the point left the three quarter page width;')\n",
|
583 |
+
"\n",
|
584 |
+
"\n",
|
585 |
+
" if y > 0.375:\n",
|
586 |
+
" loc.append('down')\n",
|
587 |
+
" loc_des.append('if the point down the final subset;')\n",
|
588 |
+
" \n",
|
589 |
+
" else:\n",
|
590 |
+
" loc.append('up') \n",
|
591 |
+
" loc_des.append('if the point up the final subset;')\n",
|
592 |
+
"\n",
|
593 |
+
"\n",
|
594 |
+
"\n",
|
595 |
+
" else:\n",
|
596 |
+
" loc.append('up') \n",
|
597 |
+
" loc_des.append('if the point up the quarter page height;')\n",
|
598 |
+
"\n",
|
599 |
+
"\n",
|
600 |
+
" if x > 0.75 :\n",
|
601 |
+
" loc.append('right')\n",
|
602 |
+
" loc_des.append('if the point right the three quarter page width;')\n",
|
603 |
+
"\n",
|
604 |
+
" if y > 0.125:\n",
|
605 |
+
" loc.append('down')\n",
|
606 |
+
" loc_des.append('if the point down the final subset;')\n",
|
607 |
+
" else:\n",
|
608 |
+
" loc.append('up')\n",
|
609 |
+
" loc_des.append('if the point up the final subset;')\n",
|
610 |
+
"\n",
|
611 |
+
"\n",
|
612 |
+
" else:\n",
|
613 |
+
" loc.append('left') \n",
|
614 |
+
" loc_des.append('if the point left the three quarter page width;')\n",
|
615 |
+
"\n",
|
616 |
+
" if y > 0.125:\n",
|
617 |
+
" loc.append('down')\n",
|
618 |
+
" loc_des.append('if the point down the final subset;')\n",
|
619 |
+
" \n",
|
620 |
+
" else:\n",
|
621 |
+
" loc.append('up') \n",
|
622 |
+
" loc_des.append('if the point up the final subset;')\n",
|
623 |
+
"\n",
|
624 |
+
"\n",
|
625 |
+
" else:\n",
|
626 |
+
" loc.append('left') \n",
|
627 |
+
" if y > 0.25 : \n",
|
628 |
+
" loc.append('down')\n",
|
629 |
+
" loc_des.append('if the point down the quarter page height;')\n",
|
630 |
+
"\n",
|
631 |
+
" if x > 0.25 :\n",
|
632 |
+
" loc.append('right')\n",
|
633 |
+
" loc_des.append('if the point right the quarter page width;')\n",
|
634 |
+
"\n",
|
635 |
+
" if y > 0.375:\n",
|
636 |
+
" loc.append('down')\n",
|
637 |
+
" loc_des.append('if the point down the final subset;')\n",
|
638 |
+
" else:\n",
|
639 |
+
" loc.append('up')\n",
|
640 |
+
" loc_des.append('if the point up the final subset;')\n",
|
641 |
+
"\n",
|
642 |
+
"\n",
|
643 |
+
" else:\n",
|
644 |
+
" loc.append('left') \n",
|
645 |
+
" loc_des.append('if the point left the quarter page width;')\n",
|
646 |
+
"\n",
|
647 |
+
"\n",
|
648 |
+
" if y > 0.375:\n",
|
649 |
+
" loc.append('down')\n",
|
650 |
+
" loc_des.append('if the point down the final subset;')\n",
|
651 |
+
" else:\n",
|
652 |
+
" loc.append('up') \n",
|
653 |
+
" loc_des.append('if the point up the final subset;') \n",
|
654 |
+
"\n",
|
655 |
+
" else:\n",
|
656 |
+
" loc.append('up') \n",
|
657 |
+
" loc_des.append('if the point up the quarter page height;')\n",
|
658 |
+
"\n",
|
659 |
+
"\n",
|
660 |
+
" if x > 0.25 :\n",
|
661 |
+
" loc.append('right')\n",
|
662 |
+
" loc_des.append('if the point right the quarter page width;')\n",
|
663 |
+
"\n",
|
664 |
+
"\n",
|
665 |
+
" if y > 0.125:\n",
|
666 |
+
" loc.append('down')\n",
|
667 |
+
" loc_des.append('if the point down the final subset;') \n",
|
668 |
+
"\n",
|
669 |
+
" else:\n",
|
670 |
+
" loc.append('up')\n",
|
671 |
+
" loc_des.append('if the point up the final subset;')\n",
|
672 |
+
"\n",
|
673 |
+
" else:\n",
|
674 |
+
" loc.append('left') \n",
|
675 |
+
" loc_des.append('if the point left the quarter page width;')\n",
|
676 |
+
"\n",
|
677 |
+
"\n",
|
678 |
+
"\n",
|
679 |
+
" if y > 0.125:\n",
|
680 |
+
" loc.append('down')\n",
|
681 |
+
" loc_des.append('if the point down the final subset;') \n",
|
682 |
+
"\n",
|
683 |
+
" else:\n",
|
684 |
+
" loc.append('up') \n",
|
685 |
+
" loc_des.append('if the point up the final subset;') \n",
|
686 |
+
"\n",
|
687 |
+
" # return loc \n",
|
688 |
+
" return loc_des \n",
|
689 |
+
" \n"
|
690 |
+
]
|
691 |
+
},
|
692 |
+
{
|
693 |
+
"cell_type": "code",
|
694 |
+
"execution_count": null,
|
695 |
+
"metadata": {},
|
696 |
+
"outputs": [],
|
697 |
+
"source": []
|
698 |
+
},
|
699 |
+
{
|
700 |
+
"cell_type": "code",
|
701 |
+
"execution_count": null,
|
702 |
+
"metadata": {},
|
703 |
+
"outputs": [],
|
704 |
+
"source": []
|
705 |
+
},
|
706 |
+
{
|
707 |
+
"cell_type": "code",
|
708 |
+
"execution_count": 41,
|
709 |
+
"metadata": {},
|
710 |
+
"outputs": [],
|
711 |
+
"source": [
|
712 |
+
"# image_list = []\n",
|
713 |
+
"# for i in data:\n",
|
714 |
+
"# image_list.append(i['image'])\n",
|
715 |
+
"\n",
|
716 |
+
"for i in data:\n",
|
717 |
+
" i['ori_question'] = i['conversations'][0]['value']\n",
|
718 |
+
" i['ori_answer'] = i['conversations'][1]['value']\n",
|
719 |
+
" i['conversations'][0]['value'] = i['new_history']\n",
|
720 |
+
" i['conversations'][1]['value'] = i['new_answer']\n"
|
721 |
+
]
|
722 |
+
},
|
723 |
+
{
|
724 |
+
"cell_type": "code",
|
725 |
+
"execution_count": 42,
|
726 |
+
"metadata": {},
|
727 |
+
"outputs": [
|
728 |
+
{
|
729 |
+
"name": "stdout",
|
730 |
+
"output_type": "stream",
|
731 |
+
"text": [
|
732 |
+
"{'action_type': '#Scrolling Up#',\n",
|
733 |
+
" 'conversations': [{'from': 'human',\n",
|
734 |
+
" 'value': '<image>\\n'\n",
|
735 |
+
" \"Previous Actions: Goal: What's the news this \"\n",
|
736 |
+
" 'weekend?; if the point up the half page height; '\n",
|
737 |
+
" 'if the point right the half page width; if the '\n",
|
738 |
+
" 'point down the quarter page height; if the point '\n",
|
739 |
+
" 'left the three quarter page width; if the point '\n",
|
740 |
+
" 'up the final subset;;The action is #DUAL_POINT#; '\n",
|
741 |
+
" 'touch_point: 0.3379, 0.614, lift_point: 0.3379, '\n",
|
742 |
+
" '0.614; ;The action is #TYPE#; And the content is '\n",
|
743 |
+
" ': \"typed_text\": \"Whats the news this weekend?\"; '\n",
|
744 |
+
" ';The action is #TYPE#; And the content is : '\n",
|
745 |
+
" '\"typed_text\": \"\"; if the point up the half page '\n",
|
746 |
+
" 'height; if the point right the half page width; '\n",
|
747 |
+
" 'if the point up the quarter page height; if the '\n",
|
748 |
+
" 'point left the three quarter page width; if the '\n",
|
749 |
+
" 'point down the final subset;;The action is '\n",
|
750 |
+
" '#DUAL_POINT#; touch_point: 0.1473, 0.5421, '\n",
|
751 |
+
" 'lift_point: 0.1473, 0.5421; if the point up the '\n",
|
752 |
+
" 'half page height; if the point down the quarter '\n",
|
753 |
+
" 'page height; if the point right the quarter page '\n",
|
754 |
+
" 'width; if the point down the final subset;;The '\n",
|
755 |
+
" 'action is #DUAL_POINT#; touch_point: 0.3755, '\n",
|
756 |
+
" '0.3255, lift_point: 0.3755, 0.3255'},\n",
|
757 |
+
" {'from': 'gpt', 'value': ';The action is #Scrolling Up#'}],\n",
|
758 |
+
" 'id': 'general_blip_108',\n",
|
759 |
+
" 'image': 'blip/general_texts_splits/176_6.png',\n",
|
760 |
+
" 'new_answer': ';The action is #Scrolling Up#',\n",
|
761 |
+
" 'new_history': '<image>\\n'\n",
|
762 |
+
" \"Previous Actions: Goal: What's the news this weekend?; if the \"\n",
|
763 |
+
" 'point up the half page height; if the point right the half '\n",
|
764 |
+
" 'page width; if the point down the quarter page height; if the '\n",
|
765 |
+
" 'point left the three quarter page width; if the point up the '\n",
|
766 |
+
" 'final subset;;The action is #DUAL_POINT#; touch_point: '\n",
|
767 |
+
" '0.3379, 0.614, lift_point: 0.3379, 0.614; ;The action is '\n",
|
768 |
+
" '#TYPE#; And the content is : \"typed_text\": \"Whats the news '\n",
|
769 |
+
" 'this weekend?\"; ;The action is #TYPE#; And the content is : '\n",
|
770 |
+
" '\"typed_text\": \"\"; if the point up the half page height; if '\n",
|
771 |
+
" 'the point right the half page width; if the point up the '\n",
|
772 |
+
" 'quarter page height; if the point left the three quarter page '\n",
|
773 |
+
" 'width; if the point down the final subset;;The action is '\n",
|
774 |
+
" '#DUAL_POINT#; touch_point: 0.1473, 0.5421, lift_point: '\n",
|
775 |
+
" '0.1473, 0.5421; if the point up the half page height; if the '\n",
|
776 |
+
" 'point down the quarter page height; if the point right the '\n",
|
777 |
+
" 'quarter page width; if the point down the final subset;;The '\n",
|
778 |
+
" 'action is #DUAL_POINT#; touch_point: 0.3755, 0.3255, '\n",
|
779 |
+
" 'lift_point: 0.3755, 0.3255',\n",
|
780 |
+
" 'ori_answer': 'Action Plan: '\n",
|
781 |
+
" '[DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,PRESS_BACK,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT]\\n'\n",
|
782 |
+
" '; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": '\n",
|
783 |
+
" '\"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\"',\n",
|
784 |
+
" 'ori_question': '<image>\\n'\n",
|
785 |
+
" 'Previous Actions: \"action_type\": \"DUAL_POINT\", '\n",
|
786 |
+
" '\"touch_point\": \"[0.3379, 0.614]\", \"lift_point\": \"[0.3379, '\n",
|
787 |
+
" '0.614]\", \"typed_text\": \"\" \"action_type\": \"TYPE\", '\n",
|
788 |
+
" '\"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", '\n",
|
789 |
+
" '\"typed_text\": \"Whats the news this weekend?\" \"action_type\": '\n",
|
790 |
+
" '\"TYPE\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, '\n",
|
791 |
+
" '-1.0]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", '\n",
|
792 |
+
" '\"touch_point\": \"[0.1473, 0.5421]\", \"lift_point\": \"[0.1473, '\n",
|
793 |
+
" '0.5421]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", '\n",
|
794 |
+
" '\"touch_point\": \"[0.3755, 0.3255]\", \"lift_point\": \"[0.3755, '\n",
|
795 |
+
" '0.3255]\", \"typed_text\": \"\" Goal: What\\'s the news this '\n",
|
796 |
+
" 'weekend?'}\n"
|
797 |
+
]
|
798 |
+
}
|
799 |
+
],
|
800 |
+
"source": [
|
801 |
+
"import pprint\n",
|
802 |
+
"\n",
|
803 |
+
"pprint.pprint(data[108])"
|
804 |
+
]
|
805 |
+
},
|
806 |
+
{
|
807 |
+
"cell_type": "code",
|
808 |
+
"execution_count": null,
|
809 |
+
"metadata": {},
|
810 |
+
"outputs": [],
|
811 |
+
"source": []
|
812 |
+
},
|
813 |
+
{
|
814 |
+
"cell_type": "code",
|
815 |
+
"execution_count": 43,
|
816 |
+
"metadata": {},
|
817 |
+
"outputs": [],
|
818 |
+
"source": [
|
819 |
+
"# write_json('/code/Data/new_json/general_blip_train_llava_coco_v2.json', data)\n",
|
820 |
+
"# write_json('/code/Data/new_json/general_blip_test_llava_coco_v2.json', data)\n",
|
821 |
+
"# write_json('/code/Data/new_json/all_blip_train_llava_coco_v2.json', data)\n",
|
822 |
+
"# write_json('/code/LLaVA/data/json/single_blip_test_llava_coco.json', data)\n",
|
823 |
+
"# write_json('/code/LLaVA/data/json/install_blip_test_llava_coco.json', data)\n",
|
824 |
+
"# write_json('/code/LLaVA/data/json/google_apps_blip_test_llava_coco.json', data)\n",
|
825 |
+
"# write_json('/code/LLaVA/data/json/web_shopping_blip_test_llava_coco.json', data)\n",
|
826 |
+
"\n",
|
827 |
+
"\n"
|
828 |
+
]
|
829 |
+
},
|
830 |
+
{
|
831 |
+
"cell_type": "code",
|
832 |
+
"execution_count": 11,
|
833 |
+
"metadata": {},
|
834 |
+
"outputs": [
|
835 |
+
{
|
836 |
+
"data": {
|
837 |
+
"text/plain": [
|
838 |
+
"1028854"
|
839 |
+
]
|
840 |
+
},
|
841 |
+
"execution_count": 11,
|
842 |
+
"metadata": {},
|
843 |
+
"output_type": "execute_result"
|
844 |
+
}
|
845 |
+
],
|
846 |
+
"source": [
|
847 |
+
"len(data)"
|
848 |
+
]
|
849 |
+
},
|
850 |
+
{
|
851 |
+
"cell_type": "code",
|
852 |
+
"execution_count": 21,
|
853 |
+
"metadata": {},
|
854 |
+
"outputs": [
|
855 |
+
{
|
856 |
+
"name": "stdout",
|
857 |
+
"output_type": "stream",
|
858 |
+
"text": [
|
859 |
+
"454910\n"
|
860 |
+
]
|
861 |
+
},
|
862 |
+
{
|
863 |
+
"data": {
|
864 |
+
"text/plain": [
|
865 |
+
"{'id': 'google_apps_blip_387111',\n",
|
866 |
+
" 'image': 'blip/google_apps_texts_splits/484287_1.png',\n",
|
867 |
+
" 'conversations': [{'from': 'human',\n",
|
868 |
+
" 'value': '<image>\\nPrevious Actions: Goal: Open wifi settings'},\n",
|
869 |
+
" {'from': 'gpt', 'value': 'The action is #Scrolling Up#'}],\n",
|
870 |
+
" 'action_type': '#Scrolling Up#',\n",
|
871 |
+
" 'new_answer': 'The action is #Scrolling Up#',\n",
|
872 |
+
" 'new_history': '<image>\\nPrevious Actions: Goal: Open wifi settings',\n",
|
873 |
+
" 'ori_question': '<image>\\nPrevious Actions: Goal: Open wifi settings',\n",
|
874 |
+
" 'ori_answer': 'Action Plan: [DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\"'}"
|
875 |
+
]
|
876 |
+
},
|
877 |
+
"execution_count": 21,
|
878 |
+
"metadata": {},
|
879 |
+
"output_type": "execute_result"
|
880 |
+
}
|
881 |
+
],
|
882 |
+
"source": [
|
883 |
+
"import random\n",
|
884 |
+
"random_number = random.randint(0, 1028854)\n",
|
885 |
+
"\n",
|
886 |
+
"print(random_number)\n",
|
887 |
+
"data[random_number]"
|
888 |
+
]
|
889 |
+
},
|
890 |
+
{
|
891 |
+
"cell_type": "code",
|
892 |
+
"execution_count": null,
|
893 |
+
"metadata": {},
|
894 |
+
"outputs": [],
|
895 |
+
"source": []
|
896 |
+
}
|
897 |
+
],
|
898 |
+
"metadata": {
|
899 |
+
"kernelspec": {
|
900 |
+
"display_name": "llava",
|
901 |
+
"language": "python",
|
902 |
+
"name": "python3"
|
903 |
+
},
|
904 |
+
"language_info": {
|
905 |
+
"codemirror_mode": {
|
906 |
+
"name": "ipython",
|
907 |
+
"version": 3
|
908 |
+
},
|
909 |
+
"file_extension": ".py",
|
910 |
+
"mimetype": "text/x-python",
|
911 |
+
"name": "python",
|
912 |
+
"nbconvert_exporter": "python",
|
913 |
+
"pygments_lexer": "ipython3",
|
914 |
+
"version": "3.10.14"
|
915 |
+
}
|
916 |
+
},
|
917 |
+
"nbformat": 4,
|
918 |
+
"nbformat_minor": 2
|
919 |
+
}
|
Ipynb/aitw_to_imgh.ipynb
ADDED
@@ -0,0 +1,744 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import os \n",
|
10 |
+
"import json\n",
|
11 |
+
"\n",
|
12 |
+
"def read_json(file_path): \n",
|
13 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
14 |
+
" data = json.load(file)\n",
|
15 |
+
" return data\n",
|
16 |
+
"\n",
|
17 |
+
"def write_json(file_path, data):\n",
|
18 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
19 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
20 |
+
]
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"cell_type": "code",
|
24 |
+
"execution_count": 2,
|
25 |
+
"metadata": {},
|
26 |
+
"outputs": [],
|
27 |
+
"source": [
|
28 |
+
"# data = read_json('/home/wb/BiaoWu/Data/general_blip_train_llava.json')\n",
|
29 |
+
"# data = read_json('/home/wb/BiaoWu/LLaVA/data/json/general_blip_test_llava.json')\n",
|
30 |
+
"data = read_json('/code/LLaVA/data/json/all_blip_train_llava.json')"
|
31 |
+
]
|
32 |
+
},
|
33 |
+
{
|
34 |
+
"cell_type": "code",
|
35 |
+
"execution_count": 3,
|
36 |
+
"metadata": {},
|
37 |
+
"outputs": [
|
38 |
+
{
|
39 |
+
"data": {
|
40 |
+
"text/plain": [
|
41 |
+
"{'id': 'general_blip_10',\n",
|
42 |
+
" 'image': 'blip/general_texts_splits/13_2.png',\n",
|
43 |
+
" 'conversations': [{'from': 'human',\n",
|
44 |
+
" 'value': '<image>\\nPrevious Actions: \"action_type\": \"PRESS_HOME\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\" Goal: Open a new Chrome window'},\n",
|
45 |
+
" {'from': 'gpt',\n",
|
46 |
+
" 'value': 'Action Plan: [DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.7649, 0.6773]\", \"lift_point\": \"[0.7649, 0.6773]\", \"typed_text\": \"\"'}]}"
|
47 |
+
]
|
48 |
+
},
|
49 |
+
"execution_count": 3,
|
50 |
+
"metadata": {},
|
51 |
+
"output_type": "execute_result"
|
52 |
+
}
|
53 |
+
],
|
54 |
+
"source": [
|
55 |
+
"data[10]"
|
56 |
+
]
|
57 |
+
},
|
58 |
+
{
|
59 |
+
"cell_type": "code",
|
60 |
+
"execution_count": 4,
|
61 |
+
"metadata": {},
|
62 |
+
"outputs": [
|
63 |
+
{
|
64 |
+
"data": {
|
65 |
+
"text/plain": [
|
66 |
+
"{'id': 'general_blip_11',\n",
|
67 |
+
" 'image': 'blip/general_texts_splits/13_3.png',\n",
|
68 |
+
" 'conversations': [{'from': 'human',\n",
|
69 |
+
" 'value': '<image>\\nPrevious Actions: \"action_type\": \"PRESS_HOME\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.7649, 0.6773]\", \"lift_point\": \"[0.7649, 0.6773]\", \"typed_text\": \"\" Goal: Open a new Chrome window'},\n",
|
70 |
+
" {'from': 'gpt',\n",
|
71 |
+
" 'value': 'Action Plan: [STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"STATUS_TASK_COMPLETE\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\"'}]}"
|
72 |
+
]
|
73 |
+
},
|
74 |
+
"execution_count": 4,
|
75 |
+
"metadata": {},
|
76 |
+
"output_type": "execute_result"
|
77 |
+
}
|
78 |
+
],
|
79 |
+
"source": [
|
80 |
+
"data[11]"
|
81 |
+
]
|
82 |
+
},
|
83 |
+
{
|
84 |
+
"cell_type": "code",
|
85 |
+
"execution_count": 5,
|
86 |
+
"metadata": {},
|
87 |
+
"outputs": [],
|
88 |
+
"source": [
|
89 |
+
"sum_all = []\n",
|
90 |
+
"\n",
|
91 |
+
"\n",
|
92 |
+
"for i in data: \n",
|
93 |
+
" title = i['image']\n",
|
94 |
+
" # print(title)\n",
|
95 |
+
" temp_index = title.split('_')[-1].split('.')[0]\n",
|
96 |
+
" temp_index = int(temp_index)\n",
|
97 |
+
" sum_all.append(temp_index)\n",
|
98 |
+
" \n",
|
99 |
+
" pre_title = '_'.join(title.split('_')[:-1])\n",
|
100 |
+
" after_title = title.split('_')[-1].split('.')[1]\n",
|
101 |
+
" \n",
|
102 |
+
" index_list = []\n",
|
103 |
+
" \n",
|
104 |
+
" for w in range(5):\n",
|
105 |
+
" temp_value = temp_index - w\n",
|
106 |
+
"\n",
|
107 |
+
" if temp_value < 1:\n",
|
108 |
+
" temp_value = 1\n",
|
109 |
+
"\n",
|
110 |
+
" new_title = pre_title + '_' + str(temp_value) + '.' + after_title\n",
|
111 |
+
" index_list.append(new_title)\n",
|
112 |
+
"\n",
|
113 |
+
" i['image_history'] = index_list\n",
|
114 |
+
" # break\""
|
115 |
+
]
|
116 |
+
},
|
117 |
+
{
|
118 |
+
"cell_type": "code",
|
119 |
+
"execution_count": 6,
|
120 |
+
"metadata": {},
|
121 |
+
"outputs": [
|
122 |
+
{
|
123 |
+
"name": "stdout",
|
124 |
+
"output_type": "stream",
|
125 |
+
"text": [
|
126 |
+
"Counter({1: 123289, 2: 122217, 3: 110464, 4: 102437, 5: 92006, 6: 81757, 7: 71126, 8: 60155, 9: 48968, 10: 39142, 11: 31279, 12: 25253, 13: 20445, 14: 16646, 15: 13655, 16: 11093, 17: 9062, 18: 7364, 19: 6082, 20: 5006, 21: 4178, 22: 3477, 23: 2912, 24: 2440, 25: 2034, 26: 1730, 27: 1491, 28: 1309, 29: 1161, 30: 1028, 31: 910, 32: 799, 33: 705, 34: 633, 35: 562, 36: 496, 37: 433, 38: 393, 39: 356, 40: 322, 41: 298, 42: 274, 43: 252, 44: 235, 45: 213, 46: 199, 47: 187, 48: 172, 49: 158, 50: 139, 51: 131, 52: 125, 53: 117, 54: 103, 55: 99, 56: 91, 57: 81, 58: 73, 59: 70, 60: 63, 61: 60, 62: 55, 63: 51, 64: 48, 65: 45, 66: 39, 67: 36, 68: 33, 69: 32, 70: 29, 71: 27, 72: 25, 73: 25, 74: 25, 75: 25, 76: 24, 77: 22, 78: 21, 79: 19, 80: 19, 81: 19, 82: 17, 83: 15, 84: 15, 85: 15, 86: 14, 87: 13, 88: 12, 89: 12, 90: 11, 91: 11, 92: 11, 93: 11, 94: 11, 95: 9, 96: 9, 97: 8, 98: 8, 99: 8, 100: 7, 101: 6, 102: 5, 103: 4, 104: 4, 105: 4, 106: 4, 107: 4, 108: 4, 109: 3, 110: 3, 111: 3, 112: 3, 113: 2, 114: 2, 115: 1, 116: 1, 117: 1, 118: 1, 119: 1, 120: 1, 121: 1, 122: 1, 123: 1, 124: 1, 125: 1, 126: 1})\n"
|
127 |
+
]
|
128 |
+
}
|
129 |
+
],
|
130 |
+
"source": [
|
131 |
+
"from collections import Counter\n",
|
132 |
+
"\n",
|
133 |
+
"element_counts = Counter(sum_all)\n",
|
134 |
+
"print(element_counts)\n"
|
135 |
+
]
|
136 |
+
},
|
137 |
+
{
|
138 |
+
"cell_type": "code",
|
139 |
+
"execution_count": 7,
|
140 |
+
"metadata": {},
|
141 |
+
"outputs": [
|
142 |
+
{
|
143 |
+
"data": {
|
144 |
+
"text/plain": [
|
145 |
+
"<BarContainer object of 126 artists>"
|
146 |
+
]
|
147 |
+
},
|
148 |
+
"execution_count": 7,
|
149 |
+
"metadata": {},
|
150 |
+
"output_type": "execute_result"
|
151 |
+
},
|
152 |
+
{
|
153 |
+
"data": {
|
154 |
+
"image/png": "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Bw4c8FFX14aGhgZNmTJFw4cP18CBAyVJbrdbgYGBF/zgbUREhNxutw+6vLrefPNN7dy5U9u3b79gzPS5+etf/6rly5crIyNDTz31lLZv364nn3xSgYGBSklJsefgYv+vmTA/mZmZ8ng86tevnzp06KBz587p+eefV3JysiQZPz9NXc5cuN1uhYeHe40HBASoa9euRs3XmTNnNGPGDI0bN87+0dX2NDcEIfhUWlqa9uzZo48//tjXrVwTjhw5osmTJ6uwsFDBwcG+buea09DQoJiYGL3wwguSpJtvvll79uxRbm6uUlJSfNyd77311ltatWqVVq9erRtvvFHl5eWaMmWKXC4X84Pvpb6+Xj/72c9kWZaWL1/u63ZaBV+NXQXdu3dXhw4dLrizp7KyUk6n00dd+V56erry8vL04YcfqmfPnvZ6p9Opuro6VVVVedWbMF9lZWU6duyYhgwZooCAAAUEBGjz5s1asmSJAgICFBERYezcSFKPHj00YMAAr3X9+/fX4cOHJcmeA1P/X5s2bZoyMzM1duxYRUdH69FHH9XUqVM1b948ScxPU5czF06n84IbWs6ePavjx48bMV+NIejLL79UYWGhfTZIal9zQxC6CgIDAzV06FAVFRXZ6xoaGlRUVKS4uDgfduYblmUpPT1d69at06ZNmxQVFeU1PnToUHXs2NFrvioqKnT48OF2P18jR47U7t27VV5ebi8xMTFKTk62X5s6N5I0fPjwCx618Pnnn6t3796SpKioKDmdTq/58Xg8Ki0tNWJ+Tp8+LX9/73/WO3TooIaGBknMT1OXMxdxcXGqqqpSWVmZXbNp0yY1NDQoNjb2qvd8NTWGoIMHD+qDDz5Qt27dvMbb1dz4+mptU7z55ptWUFCQtXLlSmvfvn3WpEmTrLCwMMvtdvu6tavuiSeesEJDQ62PPvrI+vvf/24vp0+ftmsef/xxq1evXtamTZusHTt2WHFxcVZcXJwPu/adpneNWZbZc7Nt2zYrICDAev75562DBw9aq1atsq677jrrz3/+s10zf/58KywszPrLX/5iffbZZ9b9999vRUVFWd98840PO786UlJSrB/84AdWXl6edejQIevtt9+2unfvbk2fPt2uMWl+Tp48ae3atcvatWuXJclauHChtWvXLvvOp8uZi9GjR1s333yzVVpaan388cdW3759rXHjxvnqkFpMc3NTV1dn3XfffVbPnj2t8vJyr3+na2tr7W20l7khCF1FS5cutXr16mUFBgZaw4YNs7Zu3errlnxC0kWX119/3a755ptvrF/+8pdWly5drOuuu8766U9/av3973/3XdM+dH4QMn1u3nnnHWvgwIFWUFCQ1a9fP2vFihVe4w0NDdbs2bOtiIgIKygoyBo5cqRVUVHho26vLo/HY02ePNnq1auXFRwcbP3bv/2b9fTTT3v98TJpfj788MOL/luTkpJiWdblzcU///lPa9y4cdb1119vORwOa8KECdbJkyd9cDQtq7m5OXTo0CX/nf7www/tbbSXufGzrCaPHAUAADAI1wgBAABjEYQAAICxCEIAAMBYBCEAAGAsghAAADAWQQgAABiLIAQAAIxFEAIAAMYiCAEAAGMRhAAAgLEIQgAAwFgEIQAAYKz/A4KDU13F+mEsAAAAAElFTkSuQmCC",
|
155 |
+
"text/plain": [
|
156 |
+
"<Figure size 640x480 with 1 Axes>"
|
157 |
+
]
|
158 |
+
},
|
159 |
+
"metadata": {},
|
160 |
+
"output_type": "display_data"
|
161 |
+
}
|
162 |
+
],
|
163 |
+
"source": [
|
164 |
+
"import matplotlib.pyplot as plt\n",
|
165 |
+
"from collections import Counter\n",
|
166 |
+
"\n",
|
167 |
+
"example_list = sum_all\n",
|
168 |
+
"element_counts = Counter(example_list)\n",
|
169 |
+
"elements = list(element_counts.keys())\n",
|
170 |
+
"counts = list(element_counts.values())\n",
|
171 |
+
" \n",
|
172 |
+
"plt.bar(elements, counts)\n",
|
173 |
+
" "
|
174 |
+
]
|
175 |
+
},
|
176 |
+
{
|
177 |
+
"cell_type": "code",
|
178 |
+
"execution_count": 8,
|
179 |
+
"metadata": {},
|
180 |
+
"outputs": [
|
181 |
+
{
|
182 |
+
"name": "stdout",
|
183 |
+
"output_type": "stream",
|
184 |
+
"text": [
|
185 |
+
"Requirement already satisfied: matplotlib in /opt/conda/envs/llava/lib/python3.10/site-packages (3.8.3)\n",
|
186 |
+
"Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (1.2.0)\n",
|
187 |
+
"Requirement already satisfied: cycler>=0.10 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (0.12.1)\n",
|
188 |
+
"Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (4.50.0)\n",
|
189 |
+
"Requirement already satisfied: kiwisolver>=1.3.1 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (1.4.5)\n",
|
190 |
+
"Requirement already satisfied: numpy<2,>=1.21 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (1.26.4)\n",
|
191 |
+
"Requirement already satisfied: packaging>=20.0 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (24.0)\n",
|
192 |
+
"Requirement already satisfied: pillow>=8 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (10.2.0)\n",
|
193 |
+
"Requirement already satisfied: pyparsing>=2.3.1 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (3.1.2)\n",
|
194 |
+
"Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/envs/llava/lib/python3.10/site-packages (from matplotlib) (2.9.0)\n",
|
195 |
+
"Requirement already satisfied: six>=1.5 in /opt/conda/envs/llava/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
|
196 |
+
"\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n",
|
197 |
+
"\u001b[0m\n",
|
198 |
+
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.2\u001b[0m\n",
|
199 |
+
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n",
|
200 |
+
"Note: you may need to restart the kernel to use updated packages.\n"
|
201 |
+
]
|
202 |
+
}
|
203 |
+
],
|
204 |
+
"source": [
|
205 |
+
"%pip install matplotlib"
|
206 |
+
]
|
207 |
+
},
|
208 |
+
{
|
209 |
+
"cell_type": "code",
|
210 |
+
"execution_count": 9,
|
211 |
+
"metadata": {},
|
212 |
+
"outputs": [
|
213 |
+
{
|
214 |
+
"name": "stdout",
|
215 |
+
"output_type": "stream",
|
216 |
+
"text": [
|
217 |
+
"113\n",
|
218 |
+
"0\n",
|
219 |
+
"----------------------------------\n",
|
220 |
+
"112\n",
|
221 |
+
"1\n",
|
222 |
+
"----------------------------------\n",
|
223 |
+
"111\n",
|
224 |
+
"0\n",
|
225 |
+
"----------------------------------\n",
|
226 |
+
"110\n",
|
227 |
+
"1\n",
|
228 |
+
"----------------------------------\n",
|
229 |
+
"109\n",
|
230 |
+
"0\n",
|
231 |
+
"----------------------------------\n",
|
232 |
+
"108\n",
|
233 |
+
"1\n",
|
234 |
+
"----------------------------------\n",
|
235 |
+
"107\n",
|
236 |
+
"0\n",
|
237 |
+
"----------------------------------\n",
|
238 |
+
"106\n",
|
239 |
+
"1\n",
|
240 |
+
"----------------------------------\n",
|
241 |
+
"105\n",
|
242 |
+
"0\n",
|
243 |
+
"----------------------------------\n",
|
244 |
+
"104\n",
|
245 |
+
"1\n",
|
246 |
+
"----------------------------------\n",
|
247 |
+
"103\n",
|
248 |
+
"0\n",
|
249 |
+
"----------------------------------\n",
|
250 |
+
"102\n",
|
251 |
+
"2\n",
|
252 |
+
"----------------------------------\n",
|
253 |
+
"101\n",
|
254 |
+
"0\n",
|
255 |
+
"----------------------------------\n",
|
256 |
+
"100\n",
|
257 |
+
"3\n",
|
258 |
+
"----------------------------------\n",
|
259 |
+
"99\n",
|
260 |
+
"0\n",
|
261 |
+
"----------------------------------\n",
|
262 |
+
"98\n",
|
263 |
+
"3\n",
|
264 |
+
"----------------------------------\n",
|
265 |
+
"97\n",
|
266 |
+
"0\n",
|
267 |
+
"----------------------------------\n",
|
268 |
+
"96\n",
|
269 |
+
"4\n",
|
270 |
+
"----------------------------------\n",
|
271 |
+
"95\n",
|
272 |
+
"0\n",
|
273 |
+
"----------------------------------\n",
|
274 |
+
"94\n",
|
275 |
+
"4\n",
|
276 |
+
"----------------------------------\n",
|
277 |
+
"93\n",
|
278 |
+
"0\n",
|
279 |
+
"----------------------------------\n",
|
280 |
+
"92\n",
|
281 |
+
"4\n",
|
282 |
+
"----------------------------------\n",
|
283 |
+
"91\n",
|
284 |
+
"0\n",
|
285 |
+
"----------------------------------\n",
|
286 |
+
"90\n",
|
287 |
+
"4\n",
|
288 |
+
"----------------------------------\n",
|
289 |
+
"89\n",
|
290 |
+
"1\n",
|
291 |
+
"----------------------------------\n",
|
292 |
+
"88\n",
|
293 |
+
"4\n",
|
294 |
+
"----------------------------------\n",
|
295 |
+
"87\n",
|
296 |
+
"2\n",
|
297 |
+
"----------------------------------\n",
|
298 |
+
"86\n",
|
299 |
+
"4\n",
|
300 |
+
"----------------------------------\n",
|
301 |
+
"85\n",
|
302 |
+
"3\n",
|
303 |
+
"----------------------------------\n",
|
304 |
+
"84\n",
|
305 |
+
"4\n",
|
306 |
+
"----------------------------------\n",
|
307 |
+
"83\n",
|
308 |
+
"3\n",
|
309 |
+
"----------------------------------\n",
|
310 |
+
"82\n",
|
311 |
+
"5\n",
|
312 |
+
"----------------------------------\n",
|
313 |
+
"81\n",
|
314 |
+
"3\n",
|
315 |
+
"----------------------------------\n",
|
316 |
+
"80\n",
|
317 |
+
"5\n",
|
318 |
+
"----------------------------------\n",
|
319 |
+
"79\n",
|
320 |
+
"3\n",
|
321 |
+
"----------------------------------\n",
|
322 |
+
"78\n",
|
323 |
+
"5\n",
|
324 |
+
"----------------------------------\n",
|
325 |
+
"77\n",
|
326 |
+
"4\n",
|
327 |
+
"----------------------------------\n",
|
328 |
+
"76\n",
|
329 |
+
"6\n",
|
330 |
+
"----------------------------------\n",
|
331 |
+
"75\n",
|
332 |
+
"4\n",
|
333 |
+
"----------------------------------\n",
|
334 |
+
"74\n",
|
335 |
+
"6\n",
|
336 |
+
"----------------------------------\n",
|
337 |
+
"73\n",
|
338 |
+
"4\n",
|
339 |
+
"----------------------------------\n",
|
340 |
+
"72\n",
|
341 |
+
"6\n",
|
342 |
+
"----------------------------------\n",
|
343 |
+
"71\n",
|
344 |
+
"5\n",
|
345 |
+
"----------------------------------\n",
|
346 |
+
"70\n",
|
347 |
+
"8\n",
|
348 |
+
"----------------------------------\n",
|
349 |
+
"69\n",
|
350 |
+
"7\n",
|
351 |
+
"----------------------------------\n",
|
352 |
+
"68\n",
|
353 |
+
"9\n",
|
354 |
+
"----------------------------------\n",
|
355 |
+
"67\n",
|
356 |
+
"8\n",
|
357 |
+
"----------------------------------\n",
|
358 |
+
"66\n",
|
359 |
+
"11\n",
|
360 |
+
"----------------------------------\n",
|
361 |
+
"65\n",
|
362 |
+
"9\n",
|
363 |
+
"----------------------------------\n",
|
364 |
+
"64\n",
|
365 |
+
"11\n",
|
366 |
+
"----------------------------------\n",
|
367 |
+
"63\n",
|
368 |
+
"9\n",
|
369 |
+
"----------------------------------\n",
|
370 |
+
"62\n",
|
371 |
+
"11\n",
|
372 |
+
"----------------------------------\n",
|
373 |
+
"61\n",
|
374 |
+
"10\n",
|
375 |
+
"----------------------------------\n",
|
376 |
+
"60\n",
|
377 |
+
"12\n",
|
378 |
+
"----------------------------------\n",
|
379 |
+
"59\n",
|
380 |
+
"14\n",
|
381 |
+
"----------------------------------\n",
|
382 |
+
"58\n",
|
383 |
+
"12\n",
|
384 |
+
"----------------------------------\n",
|
385 |
+
"57\n",
|
386 |
+
"17\n",
|
387 |
+
"----------------------------------\n",
|
388 |
+
"56\n",
|
389 |
+
"14\n",
|
390 |
+
"----------------------------------\n",
|
391 |
+
"55\n",
|
392 |
+
"20\n",
|
393 |
+
"----------------------------------\n",
|
394 |
+
"54\n",
|
395 |
+
"14\n",
|
396 |
+
"----------------------------------\n",
|
397 |
+
"53\n",
|
398 |
+
"25\n",
|
399 |
+
"----------------------------------\n",
|
400 |
+
"52\n",
|
401 |
+
"16\n",
|
402 |
+
"----------------------------------\n",
|
403 |
+
"51\n",
|
404 |
+
"26\n",
|
405 |
+
"----------------------------------\n",
|
406 |
+
"50\n",
|
407 |
+
"18\n",
|
408 |
+
"----------------------------------\n",
|
409 |
+
"49\n",
|
410 |
+
"30\n",
|
411 |
+
"----------------------------------\n",
|
412 |
+
"48\n",
|
413 |
+
"20\n",
|
414 |
+
"----------------------------------\n",
|
415 |
+
"47\n",
|
416 |
+
"33\n",
|
417 |
+
"----------------------------------\n",
|
418 |
+
"46\n",
|
419 |
+
"22\n",
|
420 |
+
"----------------------------------\n",
|
421 |
+
"45\n",
|
422 |
+
"36\n",
|
423 |
+
"----------------------------------\n",
|
424 |
+
"44\n",
|
425 |
+
"26\n",
|
426 |
+
"----------------------------------\n",
|
427 |
+
"43\n",
|
428 |
+
"43\n",
|
429 |
+
"----------------------------------\n",
|
430 |
+
"42\n",
|
431 |
+
"31\n",
|
432 |
+
"----------------------------------\n",
|
433 |
+
"41\n",
|
434 |
+
"44\n",
|
435 |
+
"----------------------------------\n",
|
436 |
+
"40\n",
|
437 |
+
"35\n",
|
438 |
+
"----------------------------------\n",
|
439 |
+
"39\n",
|
440 |
+
"51\n",
|
441 |
+
"----------------------------------\n",
|
442 |
+
"38\n",
|
443 |
+
"39\n",
|
444 |
+
"----------------------------------\n",
|
445 |
+
"37\n",
|
446 |
+
"58\n",
|
447 |
+
"----------------------------------\n",
|
448 |
+
"36\n",
|
449 |
+
"49\n",
|
450 |
+
"----------------------------------\n",
|
451 |
+
"35\n",
|
452 |
+
"64\n",
|
453 |
+
"----------------------------------\n",
|
454 |
+
"34\n",
|
455 |
+
"51\n",
|
456 |
+
"----------------------------------\n",
|
457 |
+
"33\n",
|
458 |
+
"71\n",
|
459 |
+
"----------------------------------\n",
|
460 |
+
"32\n",
|
461 |
+
"57\n",
|
462 |
+
"----------------------------------\n",
|
463 |
+
"31\n",
|
464 |
+
"77\n",
|
465 |
+
"----------------------------------\n",
|
466 |
+
"30\n",
|
467 |
+
"66\n",
|
468 |
+
"----------------------------------\n",
|
469 |
+
"29\n",
|
470 |
+
"82\n",
|
471 |
+
"----------------------------------\n",
|
472 |
+
"28\n",
|
473 |
+
"78\n",
|
474 |
+
"----------------------------------\n",
|
475 |
+
"27\n",
|
476 |
+
"91\n",
|
477 |
+
"----------------------------------\n",
|
478 |
+
"26\n",
|
479 |
+
"90\n",
|
480 |
+
"----------------------------------\n",
|
481 |
+
"25\n",
|
482 |
+
"104\n",
|
483 |
+
"----------------------------------\n",
|
484 |
+
"24\n",
|
485 |
+
"112\n",
|
486 |
+
"----------------------------------\n",
|
487 |
+
"23\n",
|
488 |
+
"131\n",
|
489 |
+
"----------------------------------\n",
|
490 |
+
"22\n",
|
491 |
+
"132\n",
|
492 |
+
"----------------------------------\n",
|
493 |
+
"21\n",
|
494 |
+
"163\n",
|
495 |
+
"----------------------------------\n",
|
496 |
+
"20\n",
|
497 |
+
"163\n",
|
498 |
+
"----------------------------------\n",
|
499 |
+
"19\n",
|
500 |
+
"208\n",
|
501 |
+
"----------------------------------\n",
|
502 |
+
"18\n",
|
503 |
+
"211\n",
|
504 |
+
"----------------------------------\n",
|
505 |
+
"17\n",
|
506 |
+
"276\n",
|
507 |
+
"----------------------------------\n",
|
508 |
+
"16\n",
|
509 |
+
"282\n",
|
510 |
+
"----------------------------------\n",
|
511 |
+
"15\n",
|
512 |
+
"392\n",
|
513 |
+
"----------------------------------\n",
|
514 |
+
"14\n",
|
515 |
+
"442\n",
|
516 |
+
"----------------------------------\n",
|
517 |
+
"13\n",
|
518 |
+
"571\n",
|
519 |
+
"----------------------------------\n",
|
520 |
+
"12\n",
|
521 |
+
"713\n",
|
522 |
+
"----------------------------------\n",
|
523 |
+
"11\n",
|
524 |
+
"922\n",
|
525 |
+
"----------------------------------\n",
|
526 |
+
"10\n",
|
527 |
+
"1204\n",
|
528 |
+
"----------------------------------\n",
|
529 |
+
"9\n",
|
530 |
+
"1618\n",
|
531 |
+
"----------------------------------\n",
|
532 |
+
"8\n",
|
533 |
+
"2123\n",
|
534 |
+
"----------------------------------\n",
|
535 |
+
"7\n",
|
536 |
+
"2674\n",
|
537 |
+
"----------------------------------\n",
|
538 |
+
"6\n",
|
539 |
+
"3179\n",
|
540 |
+
"----------------------------------\n",
|
541 |
+
"5\n",
|
542 |
+
"3560\n",
|
543 |
+
"----------------------------------\n",
|
544 |
+
"4\n",
|
545 |
+
"3670\n",
|
546 |
+
"----------------------------------\n",
|
547 |
+
"3\n",
|
548 |
+
"3714\n",
|
549 |
+
"----------------------------------\n",
|
550 |
+
"2\n",
|
551 |
+
"3827\n",
|
552 |
+
"----------------------------------\n",
|
553 |
+
"1\n",
|
554 |
+
"3753\n",
|
555 |
+
"----------------------------------\n",
|
556 |
+
"Counter({2: 3827, 1: 3753, 3: 3714, 4: 3670, 5: 3560, 6: 3179, 7: 2674, 8: 2123, 9: 1618, 10: 1204, 11: 922, 12: 713, 13: 571, 14: 442, 15: 392, 16: 282, 17: 276, 18: 211, 19: 208, 20: 163, 21: 163, 22: 132, 23: 131, 24: 112, 25: 104, 27: 91, 26: 90, 29: 82, 28: 78, 31: 77, 33: 71, 30: 66, 35: 64, 37: 58, 32: 57, 34: 51, 39: 51, 36: 49, 41: 44, 43: 43, 38: 39, 45: 36, 40: 35, 47: 33, 42: 31, 49: 30, 44: 26, 51: 26, 53: 25, 46: 22, 48: 20, 55: 20, 50: 18, 57: 17, 52: 16, 54: 14, 56: 14, 59: 14, 58: 12, 60: 12, 62: 11, 64: 11, 66: 11, 61: 10, 63: 9, 65: 9, 68: 9, 67: 8, 70: 8, 69: 7, 72: 6, 74: 6, 76: 6, 71: 5, 78: 5, 80: 5, 82: 5, 73: 4, 75: 4, 77: 4, 84: 4, 86: 4, 88: 4, 90: 4, 92: 4, 94: 4, 96: 4, 79: 3, 81: 3, 83: 3, 85: 3, 98: 3, 100: 3, 87: 2, 102: 2, 89: 1, 104: 1, 106: 1, 108: 1, 110: 1, 112: 1, 114: 1, 91: 0, 93: 0, 95: 0, 97: 0, 99: 0, 101: 0, 103: 0, 105: 0, 107: 0, 109: 0, 111: 0, 113: 0})\n"
|
557 |
+
]
|
558 |
+
},
|
559 |
+
{
|
560 |
+
"data": {
|
561 |
+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIjCAYAAAD1OgEdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTZklEQVR4nO3deVyVZf7/8TeCHBAFVxYTCXHFfUtPi5mSaOTk5LSYuaTm6KClNmpOltskZqlZmtZY6pRW2piVmooorriLW2lqNjgmUG64osL9+6Mf5+sRF0AuDujr+Xjcj0fnuq9zf67r3HTg7X3u67hZlmUJAAAAAJCvirl6AAAAAABwJyJsAQAAAIABhC0AAAAAMICwBQAAAAAGELYAAAAAwADCFgAAAAAYQNgCAAAAAAMIWwAAAABgAGELAAAAAAwgbAEAbkvLli3VsmVLVw8DuTRy5Ei5ubnp999/d/VQAOCORdgCgHwya9Ysubm53XDbuHGjS8c3duxYLVy4MEd9f/nll5vOZdy4cWYH60J5eZ3eeecds4O6DbmZT17Ex8frySefVGBgoDw9PeXv76/27dtrwYIFxmrmxvnz5zVy5EjFx8e7eigA7kIerh4AANxpRo8erdDQ0GztVatWdcFo/s/YsWP1l7/8RR06dMjxczp16qTHHnssW3vDhg3zcWSFS15ep8LM5HxGjBih0aNHq1q1avrrX/+qkJAQHT9+XEuWLFHHjh01Z84cPffcc/leNzfOnz+vUaNGSRJXYAEUOMIWAOSzdu3aqUmTJq4eRr5o1KiRnn/+eVcPA4XQV199pdGjR+svf/mL5s6dq+LFizv2DR48WMuWLdPly5ddOEIAcD0+RggABWzEiBEqVqyY4uLinNp79+4tT09P7dy5U5J06dIlvfHGG2rcuLH8/Pzk4+Ojhx56SKtWrcp2zMzMTE2ePFl169aVl5eXKlSooLZt22rr1q2SJDc3N507d06zZ892fBSwe/fuxuaYnp6uESNGqGrVqrLZbAoODtaQIUOUnp7u1M/NzU39+vXT/PnzFR4eLm9vb9ntdu3evVuS9OGHH6pq1ary8vJSy5Yt9csvv2SrtWnTJrVt21Z+fn4qUaKEHn74Ya1fv96pT9b9SQcPHlT37t1VunRp+fn56YUXXtD58+edxmPidcrt67Fw4ULVqVNHNptNtWvX1tKlS7MdMz4+Xk2aNJGXl5fCwsL04YcfOuaZm/mcOnXqpq/Jjbz++usqW7asPvnkE6eglSUyMlKPP/6443Fqaqp69uypgIAAeXl5qX79+po9e3a2Obm5uWX7yF/WxzVnzZrlaOvevbtKliypo0ePqkOHDipZsqQqVKigv//978rIyHA8r0KFCpKkUaNGOV6DkSNHSpKSk5P1wgsvqFKlSrLZbAoKCtITTzxx3Z8zAMgLrmwBQD47ffp0tkUH3NzcVK5cOUnS8OHD9d1336lnz57avXu3SpUqpWXLlulf//qXxowZo/r160uS0tLSNGPGDHXq1Ekvvviizpw5o48//liRkZHavHmzGjRo4Dh+z549NWvWLLVr1069evXSlStXtHbtWm3cuFFNmjTRp59+ql69eum+++5T7969JUlhYWG3nMv58+evu4BC6dKl5eFx/V8hmZmZ+tOf/qR169apd+/eqlWrlnbv3q1Jkybpp59+ynb/0Nq1a/Xtt98qOjpakhQTE6PHH39cQ4YM0QcffKC//e1vOnnypMaPH68ePXpo5cqVjueuXLlS7dq1U+PGjR0hdubMmWrVqpXWrl2r++67z6nW008/rdDQUMXExGj79u2aMWOG/P399dZbb0lSnl+nm8nt67Fu3TotWLBAf/vb31SqVCm999576tixo5KSkhw/Qzt27FDbtm0VFBSkUaNGKSMjQ6NHj3YEiyw5mc+tXpPrOXDggPbt26cePXqoVKlSt3wNLly4oJYtW+rgwYPq16+fQkNDNX/+fHXv3l2nTp3Syy+/nJOXMpuMjAxFRkaqWbNmeuedd7RixQpNmDBBYWFh6tu3rypUqKBp06apb9+++vOf/6wnn3xSklSvXj1JUseOHbV37171799f9957r1JTUxUbG6ukpCTde++9eRoTADixAAD5YubMmZak6242m82p7+7duy1PT0+rV69e1smTJ6177rnHatKkiXX58mVHnytXrljp6elOzzt58qQVEBBg9ejRw9G2cuVKS5L10ksvZRtTZmam4799fHysbt265Wguhw8fvuFcJFkJCQmOvg8//LD18MMPOx5/+umnVrFixay1a9c6HXP69OmWJGv9+vWOtqzX5vDhw462Dz/80JJkBQYGWmlpaY72YcOGWZIcfTMzM61q1apZkZGRTvM8f/68FRoaaj366KOOthEjRliSnF43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AABw5tKwFR0drc8++0xz585VqVKllJycrOTkZF24cEGSdOjQIY0ZM0bbtm3TL7/8om+//VZdu3ZVixYtVK9ePUlSmzZtFB4eri5dumjnzp1atmyZhg8frujoaNlsNklSnz599PPPP2vIkCHat2+fPvjgA82bN08DBw502dwBAAAA3NlcGramTZum06dPq2XLlgoKCnJsX375pSTJ09NTK1asUJs2bVSzZk298sor6tixo7777jvHMdzd3bVo0SK5u7vLbrfr+eefV9euXTV69GhHn9DQUC1evFixsbGqX7++JkyYoBkzZrDsOwAAAABjXLpAhmVZN90fHBys1atX3/I4ISEhWrJkyU37tGzZUjt27MjV+AAAAAAgrwrFAhkAAAAAcKchbAEAAACAAYQtAAAAADCAsAUAAAAABhC2AAAAAMAAwhYAAAAAGEDYAgAAAAADCFsAAAAAYABhCwAAAAAMIGwBAAAAgAGELQAAAAAwgLAFAAAAAAYQtgAAAADAAMIWAAAAABhA2AIAAAAAAwhbAAAAAGAAYQsAAAAADCBsAQAAAIABhC0AAAAAMICwBQAAAAAGELYAAAAAwADCFgAAAAAYQNgCAAAAAAMIWwAAAABgAGELAAAAAAwgbAEAAACAAYQtAAAAADCAsAUAAAAABhC2AAAAAMCAPIWt7du3a/fu3Y7H33zzjTp06KB//OMfunTpUr4NDgAAAACKqjyFrb/+9a/66aefJEk///yznn32WZUoUULz58/XkCFD8nWAAAAAAFAU5Sls/fTTT2rQoIEkaf78+WrRooXmzp2rWbNm6T//+U9+jg8AAAAAiqQ8hS3LspSZmSlJWrFihR577DFJUnBwsH7//ff8Gx0AAAAAFFF5CltNmjTRP//5T3366adavXq1oqKiJEmHDx9WQEBAvg4QAAAAAIqiPIWtSZMmafv27erXr59ee+01Va1aVZL01Vdf6f7778/XAQIAAABAUeSRlyfVr1/faTXCLG+//bY8PPJ0SAAAAAC4o+TpylaVKlV0/PjxbO0XL15U9erVb3tQAAAAAFDU5eky1C+//KKMjIxs7enp6frf//5324PCnWXcjuyLprzasLwLRgIAAAAUnFyFrW+//dbx38uWLZOfn5/jcUZGhuLi4hQaGpp/owMAAACAIipXYatDhw6SJDc3N3Xr1s1pX/HixXXv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OFghISF6++23Jf3fVyLkdc45Obem/38vlFz7KUbkRdbnXK/dunXrViD1v/vuO6tOnTqWzWazatasaX300UdG6txqnjNnzrzu/hEjRhivbVmW9fHHH1tVq1a1vLy8rPr161sLFy687brXqynJmjlzpqPPiBEjbtnHVG3LsqyYmBirUqVKVokSJSy73W6tXbv2tupalmX16NHDCgkJsTw9Pa0KFSpYrVu3tpYvX+7Yb2rOOaltWWbmfCPX3rNlcu63qm1ZZub+zDPPWEFBQZanp6d1zz33WM8884x18OBBx36Tc75Vbcsye75v9f5p8n0tJ+/dJt7XLMuyli1bZkmy9u/fn22f6Z/xm9W2LHPnOy0tzXr55ZetypUrW15eXlaVKlWs1157zUpPT3f0MXG+c1LXssyd6y+//NKqUqWK5enpaQUGBlrR0dHWqVOnHPtN/ozfqrZl5d+8b/V3QmZmpvX6669bAQEBls1ms1q3bp3tZ7Bbt27XPcaqVauM1r106ZL1yiuvWP7+/lapUqWsiIgIa8+ePbc955yc24L8nVZYuFnWNV8pDgAAAAC4bdyzBQAAAAAGELYAAAAAwADCFgAAAAAYQNgCAAAAAAMIWwAAAABgAGELAAAAAAwgbAEAAACAAYQtAAAAADCAsAUAgEHdu3dXhw4dXD0MAIALELYAAHcEV4eaX375RW5ubkpMTHTZGAAAhQthCwAAAAAMIGwBAO54e/bsUbt27VSyZEkFBASoS5cu+v333x37W7ZsqZdeeklDhgxR2bJlFRgYqJEjRzodY9++fXrwwQfl5eWl8PBwrVixQm5ublq4cKEkKTQ0VJLUsGFDubm5qWXLlk7Pf+eddxQUFKRy5copOjpaly9fduz74IMPVK1aNXl5eSkgIEB/+ctfjLwOAICCRdgCANzRTp06pVatWqlhw4baunWrli5dqpSUFD399NNO/WbPni0fHx9t2rRJ48eP1+jRoxUbGytJysjIUIcOHVSiRAlt2rRJH330kV577TWn52/evFmStGLFCh07dkwLFixw7Fu1apUOHTqkVatWafbs2Zo1a5ZmzZolSdq6dateeukljR49Wvv379fSpUvVokULg68IAKCgeLh6AAAAmDRlyhQ1bNhQY8eOdbR98sknCg4O1k8//aTq1atLkurVq6cRI0ZIkqpVq6YpU6YoLi5Ojz76qGJjY3Xo0CHFx8crMDBQkvTmm2/q0UcfdRyzQoUKkqRy5co5+mQpU6aMpkyZInd3d9WsWVNRUVGKi4vTiy++qKSkJPn4+Ojxxx9XqVKlFBISooYNGxp9TQAABYMrWwCAO9rOnTu1atUqlSxZ0rHVrFlTknTo0CFHv3r16jk9LygoSKmpqZKk/fv3Kzg42ClE3XfffTkeQ+3ateXu7n7dYz/66KMKCQlRlSpV1KVLF82ZM0fnz5/P/UQBAIUOYQsAcEc7e/as2rdvr8TERKftwIEDTh/XK168uNPz3NzclJmZmS9juNmxS5Uqpe3bt+vzzz9XUFCQ3njjDdWvX1+nTp3Kl9oAANchbAEA7miNGjXS3r17de+996pq1apOm4+PT46OUaNGDR05ckQpKSmOti1btjj18fT0lPTH/V255eHhoYiICI0fP167du3SL7/8opUrV+b6OACAwoV7tgAAd4zTp09n+56r3r1761//+pc6derkWG3w4MGD+uKLLzRjxgynj/fdyKOPPqqwsDB169ZN48eP15kzZzR8+HBJf1ylkiR/f395e3tr6dKlqlSpkry8vOTn53fLYy9atEg///yzWrRooTJlymjJkiXKzMxUjRo1cv8CAAAKFa5sAQDuGPHx8WrYsKHTNmbMGK1fv14ZGRlq06aN6tatqwEDBqh06dIqVixnvwbd3d21cOFCnT17Vk2bNlWvXr0cqxF6eXlJ+uPq1HvvvacPP/xQFStW1BNPPJGjY5cuXVoLFixQq1atVKtWLU2fPl2ff/65ateunbcXAQBQaLhZlmW5ehAAABQ169ev14MPPqiDBw8qLCzM1cMBABRChC0AAHLg66+/VsmSJVWtWjUdPHhQL7/8ssqUKaN169a5emgAgEKKe7YAAMiBM2fOaOjQoUpKSlL58uUVERGhCRMmuHpYAIBCjCtbAAAAAGAAC2QAAAAAgAGELQAAAAAwgLAFAAAAAAYQtgAAAADAAMIWAAAAABhA2AIAAAAAAwhbAAAAAGAAYQsAAAAADPh/URD/sgodS40AAAAASUVORK5CYII=",
|
562 |
+
"text/plain": [
|
563 |
+
"<Figure size 1000x600 with 1 Axes>"
|
564 |
+
]
|
565 |
+
},
|
566 |
+
"metadata": {},
|
567 |
+
"output_type": "display_data"
|
568 |
+
}
|
569 |
+
],
|
570 |
+
"source": [
|
571 |
+
"from collections import Counter\n",
|
572 |
+
"\n",
|
573 |
+
"# 假设这是你的数据统计结果\n",
|
574 |
+
"element_counts = Counter({\n",
|
575 |
+
" 1: 7580, 2: 7541, 3: 7384, 4: 7230, 5: 6739, 6: 5853, 7: 4797, 8: 3741,\n",
|
576 |
+
" 9: 2822, 10: 2126, 11: 1635, 12: 1284, 13: 1013, 14: 834, 15: 674, 16: 558,\n",
|
577 |
+
" 17: 487, 18: 419, 19: 371, 20: 326, 21: 295, 22: 263, 23: 243, 24: 216,\n",
|
578 |
+
" 25: 194, 26: 181, 27: 169, 28: 160, 29: 148, 30: 143, 31: 134, 32: 128,\n",
|
579 |
+
" 33: 122, 34: 115, 35: 113, 36: 107, 37: 97, 38: 90, 39: 86, 40: 79, 41: 75,\n",
|
580 |
+
" 42: 74, 43: 69, 44: 62, 45: 58, 46: 55, 47: 53, 48: 50, 49: 48, 50: 44, 51: 42,\n",
|
581 |
+
" 52: 41, 53: 39, 54: 34, 55: 34, 56: 31, 57: 29, 58: 26, 59: 26, 60: 22, 61: 21,\n",
|
582 |
+
" 62: 20, 63: 20, 64: 20, 65: 20, 66: 19, 67: 17, 68: 16, 69: 15, 70: 13, 71: 11,\n",
|
583 |
+
" 72: 10, 73: 10, 74: 10, 75: 10, 76: 10, 77: 9, 78: 8, 79: 8, 80: 8, 81: 8,\n",
|
584 |
+
" 82: 8, 83: 7, 84: 7, 85: 7, 86: 6, 87: 6, 88: 5, 89: 5, 90: 4, 91: 4, 92: 4,\n",
|
585 |
+
" 93: 4, 94: 4, 95: 4, 96: 4, 97: 3, 98: 3, 99: 3, 100: 3, 101: 2, 102: 2, 103: 1,\n",
|
586 |
+
" 104: 1, 105: 1, 106: 1, 107: 1, 108: 1, 109: 1, 110: 1, 111: 1, 112: 1, 113: 1, 114: 1\n",
|
587 |
+
"})\n",
|
588 |
+
"\n",
|
589 |
+
"# 从最大值开始向下计算,依次减去比自己大的元素数量\n",
|
590 |
+
"max_length = max(element_counts.keys())\n",
|
591 |
+
"for length in range(max_length - 1, 0, -1):\n",
|
592 |
+
" element_counts[length] -= element_counts[length + 1]\n",
|
593 |
+
" print(length)\n",
|
594 |
+
" print(element_counts[length])\n",
|
595 |
+
" print('----------------------------------')\n",
|
596 |
+
"\n",
|
597 |
+
" \n",
|
598 |
+
"# 打印更新后的element_counts\n",
|
599 |
+
"print(element_counts)\n",
|
600 |
+
"\n",
|
601 |
+
"# 提取元素和计数\n",
|
602 |
+
"lengths = list(element_counts.keys())\n",
|
603 |
+
"counts = list(element_counts.values())\n",
|
604 |
+
"\n",
|
605 |
+
"# 绘制柱状图\n",
|
606 |
+
"import matplotlib.pyplot as plt\n",
|
607 |
+
"\n",
|
608 |
+
"plt.figure(figsize=(10, 6))\n",
|
609 |
+
"plt.bar(lengths, counts, width=0.8, color='skyblue')\n",
|
610 |
+
"\n",
|
611 |
+
"# 添加标题和标签\n",
|
612 |
+
"plt.title('Exact Element Length Counts')\n",
|
613 |
+
"plt.xlabel('Lengths')\n",
|
614 |
+
"plt.ylabel('Counts')\n",
|
615 |
+
"\n",
|
616 |
+
"# 显示图表\n",
|
617 |
+
"plt.xticks(range(min(lengths), max(lengths)+1, 5)) # 设置x轴刻度\n",
|
618 |
+
"plt.show()\n"
|
619 |
+
]
|
620 |
+
},
|
621 |
+
{
|
622 |
+
"cell_type": "code",
|
623 |
+
"execution_count": 10,
|
624 |
+
"metadata": {},
|
625 |
+
"outputs": [
|
626 |
+
{
|
627 |
+
"name": "stdout",
|
628 |
+
"output_type": "stream",
|
629 |
+
"text": [
|
630 |
+
"Counter({7: 1056, 6: 1056, 8: 919, 5: 886, 9: 696, 10: 491, 4: 491, 11: 351, 12: 271, 13: 179, 14: 160, 2: 157, 3: 154, 15: 116, 16: 71, 17: 68, 18: 48, 19: 45, 1: 39, 21: 32, 20: 31, 23: 27, 24: 22, 22: 20, 25: 13, 28: 12, 26: 12, 36: 10, 30: 9, 27: 9, 43: 7, 39: 7, 37: 7, 33: 7, 35: 6, 32: 6, 31: 6, 53: 5, 42: 5, 29: 5, 59: 4, 49: 4, 44: 4, 40: 4, 38: 4, 57: 3, 55: 3, 47: 3, 45: 3, 70: 2, 69: 2, 66: 2, 56: 2, 52: 2, 50: 2, 48: 2, 46: 2, 34: 2, 114: 1, 102: 1, 100: 1, 96: 1, 89: 1, 87: 1, 85: 1, 82: 1, 77: 1, 76: 1, 71: 1, 68: 1, 67: 1, 65: 1, 61: 1, 60: 1, 51: 1, 41: 1, 113: 0, 112: 0, 111: 0, 110: 0, 109: 0, 108: 0, 107: 0, 106: 0, 105: 0, 104: 0, 103: 0, 101: 0, 99: 0, 98: 0, 97: 0, 95: 0, 94: 0, 93: 0, 92: 0, 91: 0, 90: 0, 88: 0, 86: 0, 84: 0, 83: 0, 81: 0, 80: 0, 79: 0, 78: 0, 75: 0, 74: 0, 73: 0, 72: 0, 64: 0, 63: 0, 62: 0, 58: 0, 54: 0})\n"
|
631 |
+
]
|
632 |
+
},
|
633 |
+
{
|
634 |
+
"data": {
|
635 |
+
"image/png": "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sAUARSArK0t9+vRRYGCgBg0a5PxbSNk38Et/P1q7Zs2aWrhwocsvoRdfLhgVFaWlS5fq6NGjV1zdKuglhbkVFRWlLVu2qE2bNlZrZl9qFxgYmOfVtytx95jdfTyCg4Pl6+urffv25dh2qTYb5+D666/XDTfcoM8++0yvvfZajlB7sYiICG3dulVZWVkuq1u7du1ybpf+b1UtLS3N5f35XfmSrj7/qKgoPf3003r66ae1d+9eNW7cWK+88oo++OCDfNcEgGzcswUARWDSpEn64YcfNHPmTI0dO1YtWrTQgAEDXJ78l/2v9heuMCQlJSkxMdFlX127dpUxxvmHWy904Xv9/f1z/BJrQ7du3XTo0CG99dZbObb99ddfOnXqlFvqNGnSRFFRUXr55Zd18uTJHNv/+OOPfO3X3cfJ3cfD09NTsbGxWrRokQ4fPuxs37dvX457AyV753306NH6888/nU+/vNg333yjxYsXS5LuuusuJScn66OPPnJuP3/+vKZOnapy5crp9ttvl/R36PL09NSaNWtc9vXGG2/ke5xly5aVlDPAnT59WmfOnHFpi4qKUkBAQI5H8gNAfrGyBQBu9vXXXzv/xf5CLVq0UM2aNbVz504NHz5cffr0UadOnSRJs2fPVuPGjfXoo4/q448/liR17NhRCxcu1L/+9S916NBB+/fv1/Tp01WvXj2XcHHHHXeoV69emjJlivbu3at27dopKytL3377re644w4NHDhQ0t/hZPny5Zo0aZLCw8MVGRnpfOjE5WzcuPGS/8IfFRWlmJiYS76nV69e+vjjj/XII49o5cqVuvXWW5WZmaldu3bp448/1tKlS93yR589PDz09ttvq3379qpfv74eeOABXXfddTp06JBWrlypwMBAffHFF3neb36OU0JCQo5f3CWpS5cuVo7HqFGj9M033+jWW2/VgAEDlJmZqddff10NGjTQ5s2bCzyf3Lj33nu1bds2vfDCC9q0aZN69OihiIgI/fnnn1qyZIkSEhI0b948SX8/aGXGjBnq06ePNmzYoBo1auiTTz7R999/r8mTJzsftBEUFKR77rlHU6dOlcPhUFRUlBYvXpzjvra88PPzU7169fTRRx/p+uuvV8WKFdWgQQOdP39ebdq0Ubdu3VSvXj15eXnp008/VUpKirp3717g4wMAknj0OwC4y5Ue/a7//7HV58+fN82aNTNVq1Y1aWlpLu9/7bXXjCTz0UcfGWP+frT5uHHjTEREhPHx8THR0dFm8eLFpnfv3iYiIsLlvefPnzcvvfSSqVOnjvH29jZVqlQx7du3Nxs2bHD22bVrl2nZsqXx8/Mzkq74ePOrPfr9wvde/Oh3Y/5+rPeECRNM/fr1jY+Pj6lQoYJp0qSJGT16tDl+/LiznyQTHx9/ydoXP5I7+7HgCxYscGnftGmTufvuu02lSpWMj4+PiYiIMN26dTMJCQnOPtmPOf/jjz9c3pt9zi589Lw7j9P7779f4ONhjDERERE5xpGQkGCio6ONt7e3iYqKMm+//bZ5+umnja+vr0u/y80nL8fkShISEkznzp1NcHCw8fLyMlWqVDGdOnUyn332mUu/lJQU88ADD5jKlSsbb29v07BhQ5dHuWf7448/TNeuXU3ZsmVNhQoVzMMPP2y2b99+yUe/+/v753h/9rwu9MMPP5gmTZoYb29v52Pgjxw5YuLj402dOnWMv7+/CQoKMs2bNzcff/xxruYNALnhMMbiXcEAAKDQdOnSRTt27HA+eAUAULS4ZwsAgBLor7/+cvl67969+uqrr9SqVauiGRAAIAdWtgAAKIHCwsLUp08f1axZU7/99pvefPNNZWRkaNOmTapdu3ZRDw8AIB6QAQBAidSuXTvNnz9fycnJ8vHxUUxMjMaNG0fQAoBihJUtAAAAALCAe7YAAAAAwALCFgAAAABYwD1buZCVlaXDhw8rICBADoejqIcDAAAAoIgYY3TixAmFh4fLw+PKa1eErVw4fPiwqlWrVtTDAAAAAFBMHDx4UFWrVr1iH8JWLgQEBEj6+4AGBgYW8WgAAAAAFJX09HRVq1bNmRGuhLCVC9mXDgYGBhK2AAAAAOTq9iIekAEAAAAAFhC2AAAAAMACwhYAAAAAWEDYAgAAAAALCFsAAAAAYAFhCwAAAAAsIGwBAAAAgAWELQAAAACwgLAFAAAAABYQtgAAAADAAsIWAAAAAFhA2AIAAAAACwhbAAAAAGABYQsAAAAALCBsAQAAAIAFhC0AAAAAsICwBQAAAAAWELYAAAAAwALCFgAAAABY4FXUA0DJ8+KmIznahkRXvmw7AAAAUBqxsgUAAAAAFhC2AAAAAMACwhYAAAAAWEDYAgAAAAALCFsAAAAAYAFhCwAAAAAsIGwBAAAAgAWELQAAAACwgLAFAAAAABYQtgAAAADAAsIWAAAAAFhA2AIAAAAACwhbAAAAAGABYQsAAAAALCBsAQAAAIAFhC0AAAAAsICwBQAAAAAWELYAAAAAwIIiDVtr1qxRp06dFB4eLofDoUWLFrlsN8ZoxIgRCgsLk5+fn2JjY7V3716XPkePHlXPnj0VGBio8uXLq1+/fjp58qRLn61bt+of//iHfH19Va1aNU2cONH21AAAAACUckUatk6dOqVGjRpp2rRpl9w+ceJETZkyRdOnT1dSUpL8/f0VFxenM2fOOPv07NlTO3bs0LJly7R48WKtWbNG/fv3d25PT09X27ZtFRERoQ0bNuill17SqFGjNHPmTOvzAwAAAFB6eRVl8fbt26t9+/aX3GaM0eTJkzVs2DB17txZkvTee+8pJCREixYtUvfu3bVz504tWbJE69atU9OmTSVJU6dO1V133aWXX35Z4eHhmjt3rs6ePat3331X3t7eql+/vjZv3qxJkya5hDIAAAAAcKdie8/W/v37lZycrNjYWGdbUFCQmjdvrsTERElSYmKiypcv7wxakhQbGysPDw8lJSU5+7Rs2VLe3t7OPnFxcdq9e7eOHTt2ydoZGRlKT093eQEAAABAXhTbsJWcnCxJCgkJcWkPCQlxbktOTlZwcLDLdi8vL1WsWNGlz6X2cWGNi40fP15BQUHOV7Vq1Qo+IQAAAAClSrENW0Vp6NChOn78uPN18ODBoh4SAAAAgBKm2Iat0NBQSVJKSopLe0pKinNbaGioUlNTXbafP39eR48edelzqX1cWONiPj4+CgwMdHkBAAAAQF4U27AVGRmp0NBQJSQkONvS09OVlJSkmJgYSVJMTIzS0tK0YcMGZ58VK1YoKytLzZs3d/ZZs2aNzp075+yzbNky3XDDDapQoUIhzQYAAABAaVOkYevkyZPavHmzNm/eLOnvh2Js3rxZBw4ckMPh0KBBg/T888/r888/17Zt2/Sf//xH4eHh6tKliySpbt26ateunR566CGtXbtW33//vQYOHKju3bsrPDxcknTffffJ29tb/fr1044dO/TRRx/ptdde01NPPVVEswYAAABQGhTpo9/Xr1+vO+64w/l1dgDq3bu3Zs+erWeeeUanTp1S//79lZaWpttuu01LliyRr6+v8z1z587VwIED1aZNG3l4eKhr166aMmWK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xl2yrzvP99Xq2j7XMTEx5vbbbzeHDh0y58+fN++//77x8PAw119/vUs/Gz+7r1Tb5rwv/j3h+++/N5LM4cOHXfrdc889plu3bjne766VrdzUnT9/vpFkqlevbj755BOzfv1606NHD1OpUiXz559/5rv2hVjZckXYKuEKO2yVKVPGxMTEuLQ99thj5pZbbrFatziFrUOHDhlJpkePHi79OnXqZLp37+62uo888oiJiIgwBw8evOR2mx9Ul6qd/SE+dOhQl74NGzY0Q4YMKXDNjIwMs3fvXrN+/XozZMgQU7lyZbNjxw6XPrbmfLnatud84MABExwcbLZs2eJsK6ywdbXatud+oWPHjpnAwMAiuWz0wtq255yXz093f65drXZhfa61bdvWdOzY8ZLbbJ/vi2vbPt/z5883VatWNfPnzzdbt2417733nqlYsaL1cH21urbP9b59+0zLli2NJOPp6WmaNWtmevbsaerUqePSz8bP7ivVtjnvkhS25s6daySZGTNmOLefOXPGVK5c2UyfPj3ftS9E2HLFZYTIk7CwMNWrV8+lrW7duoV6CVBRq1y5sry8vKweh4EDB2rx4sVauXKlqlat6pZ9FrR2WFiYJFmbt7e3t2rVqqUmTZpo/PjxatSokV577bUC77cgtW3PecOGDUpNTdVNN90kLy8veXl5afXq1ZoyZYq8vLyUmZlZ4Br5rR0SEiLJ3twvVL58eV1//fXat2+fW/eb19q2z3dRfn5erXZhfK799ttvWr58uR588EG37K+gtW2f78GDB2vIkCHq3r27GjZsqF69eunJJ5/U+PHjC7zvgtS1fa6joqK0evVqnTx5UgcPHtTatWt17tw51axZs8D7LkjtwvgezxYaGipJSklJcWlPSUlxbrMhN3Uv9X3v4+OjmjVrlqrf5QoTYQt5cuutt+Z4HPiePXsUERFRRCMqfN7e3mrWrJmV42CM0cCBA/Xpp59qxYoVioyMLND+3Fm7Ro0aCg8PL7Tzn5WVpYyMDLfvNy+1bc+5TZs22rZtmzZv3ux8NW3aVD179tTmzZvl6elZ4Br5rV2zZs1CO98nT57Uzz//7PwloDBdWNv2+S7Kz8+r1bb5uZZt1qxZCg4OVocOHdyyv4LWtn2+T58+neOphp6ensrKyirwvgtStzDOtST5+/srLCxMx44d09KlS9W5c2e37Ts/tQtr3pIUGRmp0NBQJSQkONvS09OVlJRk9V7k3NRt0qSJfHx8XI7DuXPn9Ouvv5aq3+UKk1dRDwB5d/LkSZd/Ad6/f782b96sihUrqnr16lZrP/nkk2rRooXGjRunbt26ae3atZo5c6Zmzpzp9lpXm+fRo0d14MABHT58WJKcHxyhoaEF/pejq9UePHiw7r33XrVs2VJ33HGHlixZoi+++EKrVq0qUN34+HjNmzdPn332mQICApScnCzp7xtc/fz8JEnJyclKTk52jm/btm0KCAhQ9erVC/QgjavVdjgcGjx4sEaOHKlGjRqpcePGmjNnjnbt2qVPPvmkQPMeOnSo2rdvr+rVq+vEiROaN2+eVq1apaVLl1qd89Vq25yzJAUEBKhBgwYubf7+/qpUqZKz3dbcc1Pb1tz/53/+R506dVJERIQOHz6skSNHytPTUz169JBk93xfqbbt852bz09bn2u5qW3rc036+x8wZs2apd69e8vLy/VXD5vn+0q1bZ/vTp066YUXXlD16tVVv359bdq0SZMmTVLfvn2dfWyc79zUtXmuly5dKmOMbrjhBu3bt0+DBw9WnTp19MADD0iy9z2em9runPfVfk8YNGiQnn/+edWuXVuRkZEaPny4wsPDXf6e1YEDB5zHIzMz0/l3qWrVqqVy5cpZqRsYGKhHHnlEI0eOVLVq1RQREaGXXnpJ0v/9SYT8zjk359b2/+/FUtFexYj8yL7O9eJX7969C6X+F198YRo0aGB8fHxMnTp1zMyZM63Uudo8Z82adcntI0eOtF7bGGPeeecdU6tWLePr62saNWpkFi1aVOC6l6opycyaNcvZZ+TIkVftY6u2McaMHz/eVK1a1ZQtW9bExMSYb7/9tkB1jTGmb9++JiIiwnh7e5sqVaqYNm3amG+++ca53dacc1PbGDtzvpyL79myOfer1TbGztzvvfdeExYWZry9vc11111n7r33XrNv3z7ndptzvlptY+ye76t9ftr8XMvNZ7eNzzVjjFm6dKmRZHbv3p1jm+3v8SvVNsbe+U5PTzdPPPGEqV69uvH19TU1a9Y0zz33nMnIyHD2sXG+c1PXGHvn+qOPPjI1a9Y03t7eJjQ01MTHx5u0tDTndpvf41erbYz75n213xOysrLM8OHDTUhIiPHx8TFt2rTJ8T3Yu3fvS+5j5cqVVuuePXvWPP300yY4ONgEBASY2NhYs3379gLPOTfntjB/phUXDmMu+pPiAAAAAIAC454tAAAAALCAsAUAAAAAFhC2AAAAAMACwhYAAAAAWEDYAgAAAAALCFsAAAAAYAFhCwAAAAAsIGwBAAAAgAWELQAALOrTp4+6dOlS1MMAABQBwhYA4JpQ1KHm119/lcPh0ObNm4tsDACA4oWwBQAAAAAWELYAANe87du3q3379ipXrpxCQkLUq1cvHTlyxLm9VatWevzxx/XMM8+oYsWKCg0N1ahRo1z2sWvXLt12223y9fVVvXr1tHz5cjkcDi1atEiSFBkZKUmKjo6Ww+FQq1atXN7/8ssvKywsTJUqVVJ8fLzOnTvn3PbGG2+odu3a8vX1VUhIiP79739bOQ4AgMJF2AIAXNPS0tLUunVrRUdHa/369VqyZIlSUlLUrVs3l35z5syRv7+/kpKSNHHiRI0ZM0bLli2TJGVmZqpLly4qW7askpKSNHPmTD333HMu71+7dq0kafny5fr999+1cOFC57aVK1fq559/1sqVKzVnzhzNnj1bs2fPliStX79ejz/+uMaMGaPdu3dryZIlatmypcUjAgAoLF5FPQAAAGx6/fXXFR0drXHjxjnb3n33XVWrVk179uzR9ddfL0m68cYbNXLkSElS7dq19frrryshIUF33nmnli1bpp9//lmrVq1SaGioJOmFF17QnXfe6dxnlSpVJEmVKlVy9slWoUIFvf766/L09FSdOnXUoUMHJSQk6KGHHtKBAwfk7++vjh07KiAgQBEREYqOjrZ6TAAAhYOVLQDANW3Lli1auXKlypUr53zVqVNHkvTzzz87+914440u7wsLC1Nqaqokaffu3apWrZpLiLr55ptzPYb69evL09Pzkvu+8847FRERoZo1a6pXr16aO3euTp8+nfeJAgCKHcIWAOCadvLkSXXq1EmbN292ee3du9flcr0yZcq4vM/hcCgrK8stY7jSvgMCArRx40bNnz9fYWFhGjFihBo1aqS0tDS31AYAFB3CFgDgmnbTTTdpx44dqlGjhmrVquXy8vf3z9U+brjhBh08eFApKSnOtnXr1rn08fb2lvT3/V155eXlpdjYWE2cOFFbt27Vr7/+qhUrVuR5PwCA4oV7tgAA14zjx4/n+DtX/fv311tvvaUePXo4nza4b98+ffjhh3r77bddLu+7nDvvvFNRUVHq3bu3Jk6cqBMnTmjYsGGS/l6lkqTg4GD5+flpyZIlqlq1qnx9fRUUFHTVfS9evFi//PKLWrZsqQoVKuirr75SVlaWbrjhhrwfAABAscLKFgDgmrFq1SpFR0e7vMaOHavvv/9emZmZatu2rRo2bKhBgwapfPny8vDI3Y9BT09PLVq0SCdPnlSzZs304IMPOp9G6OvrK+nv1akpU6ZoxowZCg8PV+fOnXO17/Lly2vhwoVq3bq16tatq+nTp2v+/PmqX79+/g4CAKDYcBhjTFEPAgCAkub777/Xbbfdpn379ikqKqqohwMAKIYIWwAA5MKnn36qcuXKqXbt2tq3b5+eeOIJVahQQd99911RDw0AUExxzxYAALlw4sQJPfvsszpw4IAqV66s2NhYvfLKK0U9LABAMcbKFgAAAABYwAMyAAAAAMACwhYAAAAAWEDYAgAAAAALCFsAAAAAYAFhCwAAAAAsIGwBAAAAgAWELQAAAACwgLAFAAAAABb8f5vTLBMrYQDoAAAAAElFTkSuQmCC",
|
636 |
+
"text/plain": [
|
637 |
+
"<Figure size 1000x600 with 1 Axes>"
|
638 |
+
]
|
639 |
+
},
|
640 |
+
"metadata": {},
|
641 |
+
"output_type": "display_data"
|
642 |
+
}
|
643 |
+
],
|
644 |
+
"source": [
|
645 |
+
"from collections import Counter\n",
|
646 |
+
"\n",
|
647 |
+
"# 假设这是你的数据统计结果\n",
|
648 |
+
"element_counts = Counter({\n",
|
649 |
+
" 1: 7580, 2: 7541, 3: 7384, 4: 7230, 5: 6739, 6: 5853, 7: 4797, 8: 3741,\n",
|
650 |
+
" 9: 2822, 10: 2126, 11: 1635, 12: 1284, 13: 1013, 14: 834, 15: 674, 16: 558,\n",
|
651 |
+
" 17: 487, 18: 419, 19: 371, 20: 326, 21: 295, 22: 263, 23: 243, 24: 216,\n",
|
652 |
+
" 25: 194, 26: 181, 27: 169, 28: 160, 29: 148, 30: 143, 31: 134, 32: 128,\n",
|
653 |
+
" 33: 122, 34: 115, 35: 113, 36: 107, 37: 97, 38: 90, 39: 86, 40: 79, 41: 75,\n",
|
654 |
+
" 42: 74, 43: 69, 44: 62, 45: 58, 46: 55, 47: 53, 48: 50, 49: 48, 50: 44, 51: 42,\n",
|
655 |
+
" 52: 41, 53: 39, 54: 34, 55: 34, 56: 31, 57: 29, 58: 26, 59: 26, 60: 22, 61: 21,\n",
|
656 |
+
" 62: 20, 63: 20, 64: 20, 65: 20, 66: 19, 67: 17, 68: 16, 69: 15, 70: 13, 71: 11,\n",
|
657 |
+
" 72: 10, 73: 10, 74: 10, 75: 10, 76: 10, 77: 9, 78: 8, 79: 8, 80: 8, 81: 8,\n",
|
658 |
+
" 82: 8, 83: 7, 84: 7, 85: 7, 86: 6, 87: 6, 88: 5, 89: 5, 90: 4, 91: 4, 92: 4,\n",
|
659 |
+
" 93: 4, 94: 4, 95: 4, 96: 4, 97: 3, 98: 3, 99: 3, 100: 3, 101: 2, 102: 2, 103: 1,\n",
|
660 |
+
" 104: 1, 105: 1, 106: 1, 107: 1, 108: 1, 109: 1, 110: 1, 111: 1, 112: 1, 113: 1, 114: 1\n",
|
661 |
+
"})\n",
|
662 |
+
"\n",
|
663 |
+
"# 从最大值开始向下计算,依次减去比自己大的所有元素数量的总和\n",
|
664 |
+
"max_length = max(element_counts.keys())\n",
|
665 |
+
"cumulative_sum = 0\n",
|
666 |
+
"\n",
|
667 |
+
"# 初始化结果统计\n",
|
668 |
+
"updated_element_counts = Counter()\n",
|
669 |
+
"\n",
|
670 |
+
"for length in range(max_length, 0, -1):\n",
|
671 |
+
" current_count = element_counts[length] - cumulative_sum\n",
|
672 |
+
" updated_element_counts[length] = max(current_count, 0)\n",
|
673 |
+
" # cumulative_sum += element_counts[length]\n",
|
674 |
+
" cumulative_sum += updated_element_counts[length]\n",
|
675 |
+
"\n",
|
676 |
+
" # print(cumulative_sum)\n",
|
677 |
+
" # print(updated_element_counts[length])\n",
|
678 |
+
" # print('----------------------------------')\n",
|
679 |
+
"\n",
|
680 |
+
"# 打印更新后的element_counts\n",
|
681 |
+
"print(updated_element_counts)\n",
|
682 |
+
"\n",
|
683 |
+
"# 提取元素和计数\n",
|
684 |
+
"lengths = list(updated_element_counts.keys())\n",
|
685 |
+
"counts = list(updated_element_counts.values())\n",
|
686 |
+
"\n",
|
687 |
+
"# 绘制柱状图\n",
|
688 |
+
"import matplotlib.pyplot as plt\n",
|
689 |
+
"\n",
|
690 |
+
"plt.figure(figsize=(10, 6))\n",
|
691 |
+
"plt.bar(lengths, counts, width=0.8, color='skyblue')\n",
|
692 |
+
"\n",
|
693 |
+
"# 添加标题和标签\n",
|
694 |
+
"plt.title('Exact Element Length Counts')\n",
|
695 |
+
"plt.xlabel('Lengths')\n",
|
696 |
+
"plt.ylabel('Counts')\n",
|
697 |
+
"\n",
|
698 |
+
"# 显示图表\n",
|
699 |
+
"plt.xticks(range(min(lengths), max(lengths)+1, 5)) # 设置x轴刻度\n",
|
700 |
+
"plt.show()\n"
|
701 |
+
]
|
702 |
+
},
|
703 |
+
{
|
704 |
+
"cell_type": "code",
|
705 |
+
"execution_count": 11,
|
706 |
+
"metadata": {},
|
707 |
+
"outputs": [],
|
708 |
+
"source": [
|
709 |
+
"# write_json('/home/wb/BiaoWu/Data/general_blip_train_llava_imgh.json', data)\n",
|
710 |
+
"# write_json('/home/wb/BiaoWu/LLaVA/data/json/general_blip_test_llava_imgh.json',data)\n",
|
711 |
+
"write_json('/code/LLaVA/data/json/all_blip_train_llava_imgh.json',data)\n",
|
712 |
+
" "
|
713 |
+
]
|
714 |
+
},
|
715 |
+
{
|
716 |
+
"cell_type": "code",
|
717 |
+
"execution_count": null,
|
718 |
+
"metadata": {},
|
719 |
+
"outputs": [],
|
720 |
+
"source": []
|
721 |
+
}
|
722 |
+
],
|
723 |
+
"metadata": {
|
724 |
+
"kernelspec": {
|
725 |
+
"display_name": "Python 3",
|
726 |
+
"language": "python",
|
727 |
+
"name": "python3"
|
728 |
+
},
|
729 |
+
"language_info": {
|
730 |
+
"codemirror_mode": {
|
731 |
+
"name": "ipython",
|
732 |
+
"version": 3
|
733 |
+
},
|
734 |
+
"file_extension": ".py",
|
735 |
+
"mimetype": "text/x-python",
|
736 |
+
"name": "python",
|
737 |
+
"nbconvert_exporter": "python",
|
738 |
+
"pygments_lexer": "ipython3",
|
739 |
+
"version": "3.10.14"
|
740 |
+
}
|
741 |
+
},
|
742 |
+
"nbformat": 4,
|
743 |
+
"nbformat_minor": 2
|
744 |
+
}
|
Ipynb/aitw_to_multi.ipynb
ADDED
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 4,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import json\n",
|
10 |
+
"\n",
|
11 |
+
"def read_json(file_path): \n",
|
12 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
13 |
+
" data = json.load(file)\n",
|
14 |
+
" return data\n",
|
15 |
+
"\n",
|
16 |
+
"def write_json(file_path, data):\n",
|
17 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
18 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
19 |
+
]
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": 5,
|
24 |
+
"metadata": {},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"path = '/code/LLaVA/data/json/general_blip_train_llava.json'\n",
|
28 |
+
"path = '/code/Data/general_blip_train_llava_imgh.json'\n",
|
29 |
+
"path = '/code/Data/general_blip_test_llava_imgh.json'\n",
|
30 |
+
"\n",
|
31 |
+
"\n",
|
32 |
+
"path = '/code/LLaVA/data/json/all_blip_train_llava.json'"
|
33 |
+
]
|
34 |
+
},
|
35 |
+
{
|
36 |
+
"cell_type": "code",
|
37 |
+
"execution_count": 6,
|
38 |
+
"metadata": {},
|
39 |
+
"outputs": [],
|
40 |
+
"source": [
|
41 |
+
"data = read_json(path)"
|
42 |
+
]
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"cell_type": "code",
|
46 |
+
"execution_count": 7,
|
47 |
+
"metadata": {},
|
48 |
+
"outputs": [
|
49 |
+
{
|
50 |
+
"data": {
|
51 |
+
"text/plain": [
|
52 |
+
"{'id': 'general_blip_9',\n",
|
53 |
+
" 'image': 'blip/general_texts_splits/13_1.png',\n",
|
54 |
+
" 'conversations': [{'from': 'human',\n",
|
55 |
+
" 'value': '<image>\\nPrevious Actions: Goal: Open a new Chrome window'},\n",
|
56 |
+
" {'from': 'gpt',\n",
|
57 |
+
" 'value': 'Action Plan: [PRESS_HOME,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"PRESS_HOME\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\"'}]}"
|
58 |
+
]
|
59 |
+
},
|
60 |
+
"execution_count": 7,
|
61 |
+
"metadata": {},
|
62 |
+
"output_type": "execute_result"
|
63 |
+
}
|
64 |
+
],
|
65 |
+
"source": [
|
66 |
+
"data[9]"
|
67 |
+
]
|
68 |
+
},
|
69 |
+
{
|
70 |
+
"cell_type": "code",
|
71 |
+
"execution_count": 8,
|
72 |
+
"metadata": {},
|
73 |
+
"outputs": [
|
74 |
+
{
|
75 |
+
"ename": "KeyError",
|
76 |
+
"evalue": "'image_history'",
|
77 |
+
"output_type": "error",
|
78 |
+
"traceback": [
|
79 |
+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
80 |
+
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
81 |
+
"Cell \u001b[0;32mIn[8], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m data:\n\u001b[0;32m----> 3\u001b[0m i[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[43mi\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mimage_history\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 4\u001b[0m i[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mconversations\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalue\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m i[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mconversations\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalue\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<image>\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<image>\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m<image>\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m<image>\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m<image>\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m<image>\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# break\u001b[39;00m\n",
|
82 |
+
"\u001b[0;31mKeyError\u001b[0m: 'image_history'"
|
83 |
+
]
|
84 |
+
}
|
85 |
+
],
|
86 |
+
"source": [
|
87 |
+
"for i in data:\n",
|
88 |
+
"\n",
|
89 |
+
" i['image'] = i['image_history']\n",
|
90 |
+
" i['conversations'][0]['value'] = i['conversations'][0]['value'].replace('<image>\\n','<image>\\n<image>\\n<image>\\n<image>\\n<image>\\n')\n",
|
91 |
+
"\n",
|
92 |
+
" # break"
|
93 |
+
]
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"cell_type": "code",
|
97 |
+
"execution_count": null,
|
98 |
+
"metadata": {},
|
99 |
+
"outputs": [
|
100 |
+
{
|
101 |
+
"data": {
|
102 |
+
"text/plain": [
|
103 |
+
"{'id': 'general_blip_100',\n",
|
104 |
+
" 'image': ['blip/general_texts_splits/821_3.png',\n",
|
105 |
+
" 'blip/general_texts_splits/821_2.png',\n",
|
106 |
+
" 'blip/general_texts_splits/821_1.png',\n",
|
107 |
+
" 'blip/general_texts_splits/821_1.png',\n",
|
108 |
+
" 'blip/general_texts_splits/821_1.png'],\n",
|
109 |
+
" 'conversations': [{'from': 'human',\n",
|
110 |
+
" 'value': '<image>\\n<image>\\n<image>\\n<image>\\n<image>\\nPrevious Actions: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.5363, 0.6639]\", \"lift_point\": \"[0.5363, 0.6639]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.6403, 0.4089]\", \"lift_point\": \"[0.6403, 0.4089]\", \"typed_text\": \"\" Goal: Check my gmail'},\n",
|
111 |
+
" {'from': 'gpt',\n",
|
112 |
+
" 'value': 'Action Plan: [STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"STATUS_TASK_COMPLETE\", \"touch_point\": \"[-1.0, -1.0]\", \"lift_point\": \"[-1.0, -1.0]\", \"typed_text\": \"\"'}],\n",
|
113 |
+
" 'image_history': ['blip/general_texts_splits/821_3.png',\n",
|
114 |
+
" 'blip/general_texts_splits/821_2.png',\n",
|
115 |
+
" 'blip/general_texts_splits/821_1.png',\n",
|
116 |
+
" 'blip/general_texts_splits/821_1.png',\n",
|
117 |
+
" 'blip/general_texts_splits/821_1.png']}"
|
118 |
+
]
|
119 |
+
},
|
120 |
+
"execution_count": 39,
|
121 |
+
"metadata": {},
|
122 |
+
"output_type": "execute_result"
|
123 |
+
}
|
124 |
+
],
|
125 |
+
"source": [
|
126 |
+
"data[100]"
|
127 |
+
]
|
128 |
+
},
|
129 |
+
{
|
130 |
+
"cell_type": "code",
|
131 |
+
"execution_count": 9,
|
132 |
+
"metadata": {},
|
133 |
+
"outputs": [],
|
134 |
+
"source": [
|
135 |
+
"# write_json('/code/Data/general_blip_test_llava_multi.json', data)\n",
|
136 |
+
"write_json('/code/Data/all_blip_train_llava_multi.json', data)\n",
|
137 |
+
" "
|
138 |
+
]
|
139 |
+
},
|
140 |
+
{
|
141 |
+
"cell_type": "code",
|
142 |
+
"execution_count": null,
|
143 |
+
"metadata": {},
|
144 |
+
"outputs": [],
|
145 |
+
"source": []
|
146 |
+
},
|
147 |
+
{
|
148 |
+
"cell_type": "code",
|
149 |
+
"execution_count": null,
|
150 |
+
"metadata": {},
|
151 |
+
"outputs": [],
|
152 |
+
"source": []
|
153 |
+
}
|
154 |
+
],
|
155 |
+
"metadata": {
|
156 |
+
"kernelspec": {
|
157 |
+
"display_name": "llava",
|
158 |
+
"language": "python",
|
159 |
+
"name": "python3"
|
160 |
+
},
|
161 |
+
"language_info": {
|
162 |
+
"codemirror_mode": {
|
163 |
+
"name": "ipython",
|
164 |
+
"version": 3
|
165 |
+
},
|
166 |
+
"file_extension": ".py",
|
167 |
+
"mimetype": "text/x-python",
|
168 |
+
"name": "python",
|
169 |
+
"nbconvert_exporter": "python",
|
170 |
+
"pygments_lexer": "ipython3",
|
171 |
+
"version": "3.10.14"
|
172 |
+
}
|
173 |
+
},
|
174 |
+
"nbformat": 4,
|
175 |
+
"nbformat_minor": 2
|
176 |
+
}
|
Ipynb/aitw_to_swift.ipynb
ADDED
@@ -0,0 +1,479 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import os \n",
|
10 |
+
"import json\n",
|
11 |
+
"\n",
|
12 |
+
"def read_json(file_path): \n",
|
13 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
14 |
+
" data = json.load(file)\n",
|
15 |
+
" return data\n",
|
16 |
+
"\n",
|
17 |
+
"def write_json(file_path, data):\n",
|
18 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
19 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
20 |
+
]
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"cell_type": "markdown",
|
24 |
+
"metadata": {},
|
25 |
+
"source": [
|
26 |
+
"----"
|
27 |
+
]
|
28 |
+
},
|
29 |
+
{
|
30 |
+
"cell_type": "markdown",
|
31 |
+
"metadata": {},
|
32 |
+
"source": [
|
33 |
+
"#### 更换路径"
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"cell_type": "code",
|
38 |
+
"execution_count": 10,
|
39 |
+
"metadata": {},
|
40 |
+
"outputs": [],
|
41 |
+
"source": [
|
42 |
+
"# data = read_json('/code/Data/m4_instruct_annotations.json')\n",
|
43 |
+
"# data = read_json('/code/Data/general_blip_train_llava_imgh.json')\n",
|
44 |
+
"# data = read_json('/code/Data/general_blip_train_llava_swift.json')\n",
|
45 |
+
"# data = read_json('/code/Data/general_blip_test_llava_swift.json')\n",
|
46 |
+
"data = read_json('/code/Data/new_json/general_blip_test_llava_coco_v2.json')\n",
|
47 |
+
"\n",
|
48 |
+
"\n",
|
49 |
+
"\n",
|
50 |
+
"# data = read_json('/code/LLaVA/data/json/general_blip_train_llava.json')\n",
|
51 |
+
"# data = read_json('/code/LLaVA/data/json/all_blip_train_llava_coco.json')\n"
|
52 |
+
]
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"cell_type": "code",
|
56 |
+
"execution_count": 11,
|
57 |
+
"metadata": {},
|
58 |
+
"outputs": [
|
59 |
+
{
|
60 |
+
"name": "stdout",
|
61 |
+
"output_type": "stream",
|
62 |
+
"text": [
|
63 |
+
"{'action_type': 'if the action is Scrolling; if the target is Up; #Scrolling '\n",
|
64 |
+
" 'Up#',\n",
|
65 |
+
" 'conversations': [{'from': 'human',\n",
|
66 |
+
" 'value': '<image>\\n'\n",
|
67 |
+
" 'Previous Actions: Goal: Open the calendar and '\n",
|
68 |
+
" \"show me this week's events?\"},\n",
|
69 |
+
" {'from': 'gpt',\n",
|
70 |
+
" 'value': ';The action is if the action is Scrolling; if '\n",
|
71 |
+
" 'the target is Up; #Scrolling Up#'}],\n",
|
72 |
+
" 'id': 'general_blip_0',\n",
|
73 |
+
" 'image': 'blip/general_texts_splits/18_1.png',\n",
|
74 |
+
" 'new_answer': ';The action is if the action is Scrolling; if the target is '\n",
|
75 |
+
" 'Up; #Scrolling Up#',\n",
|
76 |
+
" 'new_history': '<image>\\n'\n",
|
77 |
+
" 'Previous Actions: Goal: Open the calendar and show me this '\n",
|
78 |
+
" \"week's events?\",\n",
|
79 |
+
" 'ori_answer': 'Action Plan: '\n",
|
80 |
+
" '[DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n'\n",
|
81 |
+
" '; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": '\n",
|
82 |
+
" '\"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\"',\n",
|
83 |
+
" 'ori_question': '<image>\\n'\n",
|
84 |
+
" 'Previous Actions: Goal: Open the calendar and show me this '\n",
|
85 |
+
" \"week's events?\"}\n"
|
86 |
+
]
|
87 |
+
}
|
88 |
+
],
|
89 |
+
"source": [
|
90 |
+
"import pprint\n",
|
91 |
+
"\n",
|
92 |
+
"pprint.pprint(data[0])"
|
93 |
+
]
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"cell_type": "code",
|
97 |
+
"execution_count": 12,
|
98 |
+
"metadata": {},
|
99 |
+
"outputs": [
|
100 |
+
{
|
101 |
+
"name": "stdout",
|
102 |
+
"output_type": "stream",
|
103 |
+
"text": [
|
104 |
+
"{'action_type': 'if the action is Scrolling; if the target is Up; #Scrolling '\n",
|
105 |
+
" 'Up#',\n",
|
106 |
+
" 'conversations': [{'from': 'human',\n",
|
107 |
+
" 'value': '<image>\\n'\n",
|
108 |
+
" 'Previous Actions: Goal: Open the calendar and '\n",
|
109 |
+
" \"show me this week's events?\"},\n",
|
110 |
+
" {'from': 'gpt',\n",
|
111 |
+
" 'value': ';The action is if the action is Scrolling; if '\n",
|
112 |
+
" 'the target is Up; #Scrolling Up#'}],\n",
|
113 |
+
" 'id': 'general_blip_0',\n",
|
114 |
+
" 'image': 'blip/general_texts_splits/18_1.png',\n",
|
115 |
+
" 'new_answer': ';The action is if the action is Scrolling; if the target is '\n",
|
116 |
+
" 'Up; #Scrolling Up#',\n",
|
117 |
+
" 'new_history': '<image>\\n'\n",
|
118 |
+
" 'Previous Actions: Goal: Open the calendar and show me this '\n",
|
119 |
+
" \"week's events?\",\n",
|
120 |
+
" 'ori_answer': 'Action Plan: '\n",
|
121 |
+
" '[DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n'\n",
|
122 |
+
" '; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": '\n",
|
123 |
+
" '\"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\"',\n",
|
124 |
+
" 'ori_question': '<image>\\n'\n",
|
125 |
+
" 'Previous Actions: Goal: Open the calendar and show me this '\n",
|
126 |
+
" \"week's events?\"}\n"
|
127 |
+
]
|
128 |
+
}
|
129 |
+
],
|
130 |
+
"source": [
|
131 |
+
"import pprint\n",
|
132 |
+
"\n",
|
133 |
+
"pprint.pprint(data[0])"
|
134 |
+
]
|
135 |
+
},
|
136 |
+
{
|
137 |
+
"cell_type": "code",
|
138 |
+
"execution_count": 5,
|
139 |
+
"metadata": {},
|
140 |
+
"outputs": [
|
141 |
+
{
|
142 |
+
"data": {
|
143 |
+
"text/plain": [
|
144 |
+
"8831"
|
145 |
+
]
|
146 |
+
},
|
147 |
+
"execution_count": 5,
|
148 |
+
"metadata": {},
|
149 |
+
"output_type": "execute_result"
|
150 |
+
}
|
151 |
+
],
|
152 |
+
"source": [
|
153 |
+
"len(data)"
|
154 |
+
]
|
155 |
+
},
|
156 |
+
{
|
157 |
+
"cell_type": "code",
|
158 |
+
"execution_count": 7,
|
159 |
+
"metadata": {},
|
160 |
+
"outputs": [
|
161 |
+
{
|
162 |
+
"data": {
|
163 |
+
"text/plain": [
|
164 |
+
"'blip/general_texts_splits/18_1.png'"
|
165 |
+
]
|
166 |
+
},
|
167 |
+
"execution_count": 7,
|
168 |
+
"metadata": {},
|
169 |
+
"output_type": "execute_result"
|
170 |
+
}
|
171 |
+
],
|
172 |
+
"source": [
|
173 |
+
"data[index]['image']"
|
174 |
+
]
|
175 |
+
},
|
176 |
+
{
|
177 |
+
"cell_type": "code",
|
178 |
+
"execution_count": 13,
|
179 |
+
"metadata": {},
|
180 |
+
"outputs": [],
|
181 |
+
"source": [
|
182 |
+
"for index, i in enumerate(data):\n",
|
183 |
+
"\n",
|
184 |
+
" ################## A6000 ##################\n",
|
185 |
+
" # data[index]['images'][0] = '/data/home/zbz5349/WorkSpace/LLaVA/data/blip' + data[index]['images'][0][27:]\n",
|
186 |
+
" # data[index]['image'] = '/data/home/zbz5349/WorkSpace/LLaVA/data/' + data[index]['image'] \n",
|
187 |
+
"\n",
|
188 |
+
"\n",
|
189 |
+
" # ################## H100 ##################\n",
|
190 |
+
" # data[index]['images'][0] = '/gpu02home/zbz5349/ICLR_2024/LLaVA_Mobile_V1/data/blip' + data[index]['images'][0][27:]\n",
|
191 |
+
"\n",
|
192 |
+
" # ################## A100 ##################\n",
|
193 |
+
" # data[index]['images'][0] = '/data/zbz5349/ICLR_2024/data/blip' + data[index]['images'][0][27:]\n",
|
194 |
+
"\n"
|
195 |
+
]
|
196 |
+
},
|
197 |
+
{
|
198 |
+
"cell_type": "code",
|
199 |
+
"execution_count": 14,
|
200 |
+
"metadata": {},
|
201 |
+
"outputs": [],
|
202 |
+
"source": [
|
203 |
+
"# write_json('/code/Data/general_blip_train_llava_swift_a6000.json', data)\n",
|
204 |
+
"# write_json('/code/Data/general_blip_train_llava_swift_H100.json', data)\n",
|
205 |
+
"# write_json('/code/Data/general_blip_test_llava_swift_H100.json', data)\n",
|
206 |
+
"# write_json('/code/Data/general_blip_test_llava_swift_A100.json', data)\n",
|
207 |
+
"write_json('/code/Data/new_json/general_blip_test_llava_coco_v2_swift_A6000.json', data)\n",
|
208 |
+
" \n"
|
209 |
+
]
|
210 |
+
},
|
211 |
+
{
|
212 |
+
"cell_type": "markdown",
|
213 |
+
"metadata": {},
|
214 |
+
"source": [
|
215 |
+
"-----"
|
216 |
+
]
|
217 |
+
},
|
218 |
+
{
|
219 |
+
"cell_type": "markdown",
|
220 |
+
"metadata": {},
|
221 |
+
"source": [
|
222 |
+
"### 重构格式 / Single Image"
|
223 |
+
]
|
224 |
+
},
|
225 |
+
{
|
226 |
+
"cell_type": "code",
|
227 |
+
"execution_count": 16,
|
228 |
+
"metadata": {},
|
229 |
+
"outputs": [],
|
230 |
+
"source": [
|
231 |
+
"# path = '/code/LLaVA/data/json/general_blip_train_llava.json'\n",
|
232 |
+
"# path = '/code/LLaVA/data/json/general_blip_train_llava_coco.json'\n",
|
233 |
+
"# path = '/code/LLaVA/data/json/general_blip_train_llava_70ORI_30COCO.json'\n",
|
234 |
+
"# path = '/code/LLaVA/data/json/general_blip_test_llava_coco.json'\n",
|
235 |
+
"# path = '/code/Data/new_json/general_blip_train_llava_coco_v2.json'\n",
|
236 |
+
"# path = '/code/Data/new_json/general_blip_test_llava_coco_v2.json'\n",
|
237 |
+
"# path = '/code/Data/new_json/all_blip_train_llava_coco_v2.json'\n",
|
238 |
+
"\n",
|
239 |
+
"\n",
|
240 |
+
"# path = '/code/LLaVA/data/json/all_blip_train_llava.json'\n",
|
241 |
+
"# path = '/code/LLaVA/data/json/all_blip_train_llava_coco.json'\n",
|
242 |
+
"\n",
|
243 |
+
"\n",
|
244 |
+
"path = '/code/Data/new_json/general_blip_test_llava_coco_v2.json'\n",
|
245 |
+
"data = read_json(path)"
|
246 |
+
]
|
247 |
+
},
|
248 |
+
{
|
249 |
+
"cell_type": "code",
|
250 |
+
"execution_count": 17,
|
251 |
+
"metadata": {},
|
252 |
+
"outputs": [],
|
253 |
+
"source": [
|
254 |
+
"\n",
|
255 |
+
"new_data = []\n",
|
256 |
+
"for index, i in enumerate(data):\n",
|
257 |
+
"\n",
|
258 |
+
" temp = {}\n",
|
259 |
+
" temp['query'] = i['conversations'][0]['value']\n",
|
260 |
+
" temp['response'] = i['conversations'][1]['value']\n",
|
261 |
+
" temp['images'] = []\n",
|
262 |
+
" \n",
|
263 |
+
" # ############## H100 ##################\n",
|
264 |
+
" # temp_image_path = '/gpu02home/zbz5349/ICLR_2024/LLaVA_Mobile_V1/data/' + i['image'] \n",
|
265 |
+
"\n",
|
266 |
+
" # ############## A100 ##################\n",
|
267 |
+
" # temp_image_path = '/data/zbz5349/ICLR_2024/data/' + i['image']\n",
|
268 |
+
"\n",
|
269 |
+
" ################## A6000 ##################\n",
|
270 |
+
" temp_image_path = '/data/home/zbz5349/WorkSpace/LLaVA/data/' + i['image']\n",
|
271 |
+
"\n",
|
272 |
+
"\n",
|
273 |
+
"\n",
|
274 |
+
" \n",
|
275 |
+
" \n",
|
276 |
+
" temp['images'].append(temp_image_path)\n",
|
277 |
+
"\n",
|
278 |
+
" new_data.append(temp)\n",
|
279 |
+
" # pprint.pprint(temp)\n",
|
280 |
+
" # break"
|
281 |
+
]
|
282 |
+
},
|
283 |
+
{
|
284 |
+
"cell_type": "code",
|
285 |
+
"execution_count": 18,
|
286 |
+
"metadata": {},
|
287 |
+
"outputs": [],
|
288 |
+
"source": [
|
289 |
+
"# new_path = path.split('.')[0] + '_swift_A100.json'\n",
|
290 |
+
"new_path = path.split('.')[0] + '_swift_A6000.json'\n",
|
291 |
+
"# new_path = path.split('.')[0] + '_swift_H100.json'\n",
|
292 |
+
"write_json(new_path, new_data)"
|
293 |
+
]
|
294 |
+
},
|
295 |
+
{
|
296 |
+
"cell_type": "code",
|
297 |
+
"execution_count": 23,
|
298 |
+
"metadata": {},
|
299 |
+
"outputs": [
|
300 |
+
{
|
301 |
+
"data": {
|
302 |
+
"text/plain": [
|
303 |
+
"'/code/LLaVA/data/json/all_blip_train_llava_coco_v2_swift_A100.json'"
|
304 |
+
]
|
305 |
+
},
|
306 |
+
"execution_count": 23,
|
307 |
+
"metadata": {},
|
308 |
+
"output_type": "execute_result"
|
309 |
+
}
|
310 |
+
],
|
311 |
+
"source": [
|
312 |
+
"new_path"
|
313 |
+
]
|
314 |
+
},
|
315 |
+
{
|
316 |
+
"cell_type": "markdown",
|
317 |
+
"metadata": {},
|
318 |
+
"source": [
|
319 |
+
"-----"
|
320 |
+
]
|
321 |
+
},
|
322 |
+
{
|
323 |
+
"cell_type": "markdown",
|
324 |
+
"metadata": {},
|
325 |
+
"source": [
|
326 |
+
"### 重构格式 / Imgh - Multi Image"
|
327 |
+
]
|
328 |
+
},
|
329 |
+
{
|
330 |
+
"cell_type": "code",
|
331 |
+
"execution_count": 12,
|
332 |
+
"metadata": {},
|
333 |
+
"outputs": [],
|
334 |
+
"source": [
|
335 |
+
"# path = '/code/Data/general_blip_train_llava_imgh.json'\n",
|
336 |
+
"# path = '/code/Data/general_blip_test_llava_imgh.json'\n",
|
337 |
+
"path = '/code/LLaVA/data/json/all_blip_train_llava_imgh.json'\n",
|
338 |
+
"path = '/code/Data/new_json/general_blip_train_llava_coco_imgh.json'\n",
|
339 |
+
"\n",
|
340 |
+
"flag = 'A6000'\n",
|
341 |
+
"data = read_json(path)"
|
342 |
+
]
|
343 |
+
},
|
344 |
+
{
|
345 |
+
"cell_type": "code",
|
346 |
+
"execution_count": 13,
|
347 |
+
"metadata": {},
|
348 |
+
"outputs": [],
|
349 |
+
"source": [
|
350 |
+
"import pprint\n",
|
351 |
+
"\n",
|
352 |
+
"\n",
|
353 |
+
"def replace_hashes(text):\n",
|
354 |
+
" # 使用 rsplit 分割并替换最后五个 ### 为 xxx\n",
|
355 |
+
" parts = text.rsplit('###', 4)\n",
|
356 |
+
" # 将替换后的文本重新拼接\n",
|
357 |
+
" return '<image>'.join(parts)\n",
|
358 |
+
"\n",
|
359 |
+
"def ensure_five_xxx(text):\n",
|
360 |
+
" # 统计文本中 'xxx' 的出现次数\n",
|
361 |
+
" count = text.count('<image>')\n",
|
362 |
+
" if count < 5:\n",
|
363 |
+
" # 计算还需要补充多少个 'xxx'\n",
|
364 |
+
" missing_xxx = 5 - count\n",
|
365 |
+
" # 在文本末尾添加足够的 'xxx'\n",
|
366 |
+
" text += ' <image>' * missing_xxx\n",
|
367 |
+
" \n",
|
368 |
+
" return text\n",
|
369 |
+
"\n",
|
370 |
+
"\n",
|
371 |
+
"new_data = []\n",
|
372 |
+
"for index, i in enumerate(data):\n",
|
373 |
+
"\n",
|
374 |
+
" temp = {}\n",
|
375 |
+
" temp['query'] = i['conversations'][0]['value']\n",
|
376 |
+
" temp['response'] = i['conversations'][1]['value']\n",
|
377 |
+
" \n",
|
378 |
+
" \n",
|
379 |
+
" temp_image_path_list = []\n",
|
380 |
+
" for w in i['image_history']:\n",
|
381 |
+
"\n",
|
382 |
+
"\n",
|
383 |
+
" if flag == 'A100' :\n",
|
384 |
+
" ############## A100 ##############\n",
|
385 |
+
" temp_image_path = '/data/zbz5349/ICLR_2024/data/' + w\n",
|
386 |
+
"\n",
|
387 |
+
" elif flag == 'A6000' :\n",
|
388 |
+
" ################## A6000 ##################\n",
|
389 |
+
" temp_image_path = '/data/home/zbz5349/WorkSpace/LLaVA/data/' + w\n",
|
390 |
+
"\n",
|
391 |
+
" elif flag == '4090' :\n",
|
392 |
+
" temp_image_path = '/code/Auto-GUI/dataset/' + w\n",
|
393 |
+
" \n",
|
394 |
+
" \n",
|
395 |
+
" temp_image_path_list.append(temp_image_path)\n",
|
396 |
+
"\n",
|
397 |
+
" temp['images'] = temp_image_path_list \n",
|
398 |
+
" \n",
|
399 |
+
" new_temp = temp['query'].split('\"action_type\"')\n",
|
400 |
+
" new_temp = ' ###\\n \"action_type\"'.join(new_temp)\n",
|
401 |
+
" # pprint.pprint(new_temp) \n",
|
402 |
+
" new_temp = replace_hashes(new_temp)\n",
|
403 |
+
" new_temp = ensure_five_xxx(new_temp)\n",
|
404 |
+
" # pprint.pprint(new_temp) \n",
|
405 |
+
" # break\n",
|
406 |
+
"\n",
|
407 |
+
" temp['query'] = new_temp\n",
|
408 |
+
" new_data.append(temp)"
|
409 |
+
]
|
410 |
+
},
|
411 |
+
{
|
412 |
+
"cell_type": "code",
|
413 |
+
"execution_count": 14,
|
414 |
+
"metadata": {},
|
415 |
+
"outputs": [
|
416 |
+
{
|
417 |
+
"name": "stdout",
|
418 |
+
"output_type": "stream",
|
419 |
+
"text": [
|
420 |
+
"{'images': ['/data/home/zbz5349/WorkSpace/LLaVA/data/blip/general_texts_splits/24_4.png',\n",
|
421 |
+
" '/data/home/zbz5349/WorkSpace/LLaVA/data/blip/general_texts_splits/24_3.png',\n",
|
422 |
+
" '/data/home/zbz5349/WorkSpace/LLaVA/data/blip/general_texts_splits/24_2.png',\n",
|
423 |
+
" '/data/home/zbz5349/WorkSpace/LLaVA/data/blip/general_texts_splits/24_1.png',\n",
|
424 |
+
" '/data/home/zbz5349/WorkSpace/LLaVA/data/blip/general_texts_splits/24_1.png'],\n",
|
425 |
+
" 'query': '<image>\\n'\n",
|
426 |
+
" 'Previous Actions: Goal: How much does a 2x4x8 board cost at Lowes?; '\n",
|
427 |
+
" 'The action is #Scrolling Down#; The action is #PRESS_HOME#; The '\n",
|
428 |
+
" 'action is #DUAL_POINT#; touch_point: 0.8797, 0.5352, lift_point: '\n",
|
429 |
+
" '0.8797, 0.5352 <image> <image> <image> <image>',\n",
|
430 |
+
" 'response': 'The action is #TYPE#; And the content is : \"typed_text\": \"How '\n",
|
431 |
+
" 'much does a 2x4x8 board cost at Lowes?\"'}\n"
|
432 |
+
]
|
433 |
+
}
|
434 |
+
],
|
435 |
+
"source": [
|
436 |
+
"\n",
|
437 |
+
"# data[0]\n",
|
438 |
+
"\n",
|
439 |
+
"pprint.pprint(new_data[15]) "
|
440 |
+
]
|
441 |
+
},
|
442 |
+
{
|
443 |
+
"cell_type": "code",
|
444 |
+
"execution_count": 19,
|
445 |
+
"metadata": {},
|
446 |
+
"outputs": [],
|
447 |
+
"source": [
|
448 |
+
"\n",
|
449 |
+
"if flag == 'A100' :\n",
|
450 |
+
" new_path = path.split('.')[0] + '_swift_multi_A100.json'\n",
|
451 |
+
"elif flag == 'A6000' :\n",
|
452 |
+
" new_path = path.split('.')[0] + '_swift_multi_A6000.json'\n",
|
453 |
+
" \n",
|
454 |
+
"write_json(new_path, new_data)"
|
455 |
+
]
|
456 |
+
}
|
457 |
+
],
|
458 |
+
"metadata": {
|
459 |
+
"kernelspec": {
|
460 |
+
"display_name": "llava",
|
461 |
+
"language": "python",
|
462 |
+
"name": "python3"
|
463 |
+
},
|
464 |
+
"language_info": {
|
465 |
+
"codemirror_mode": {
|
466 |
+
"name": "ipython",
|
467 |
+
"version": 3
|
468 |
+
},
|
469 |
+
"file_extension": ".py",
|
470 |
+
"mimetype": "text/x-python",
|
471 |
+
"name": "python",
|
472 |
+
"nbconvert_exporter": "python",
|
473 |
+
"pygments_lexer": "ipython3",
|
474 |
+
"version": "3.10.14"
|
475 |
+
}
|
476 |
+
},
|
477 |
+
"nbformat": 4,
|
478 |
+
"nbformat_minor": 2
|
479 |
+
}
|
Ipynb/built_imgh.ipynb
ADDED
@@ -0,0 +1,737 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 22,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import os \n",
|
10 |
+
"import json\n",
|
11 |
+
"\n",
|
12 |
+
"def read_json(file_path): \n",
|
13 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
14 |
+
" data = json.load(file)\n",
|
15 |
+
" return data\n",
|
16 |
+
"\n",
|
17 |
+
"def write_json(file_path, data):\n",
|
18 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
19 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
20 |
+
]
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"cell_type": "code",
|
24 |
+
"execution_count": 12,
|
25 |
+
"metadata": {},
|
26 |
+
"outputs": [],
|
27 |
+
"source": [
|
28 |
+
"# data = read_json('/home/wb/BiaoWu/Data/general_blip_train_llava.json')\n",
|
29 |
+
"data = read_json('/home/wb/BiaoWu/LLaVA/data/json/general_blip_test_llava.json')"
|
30 |
+
]
|
31 |
+
},
|
32 |
+
{
|
33 |
+
"cell_type": "code",
|
34 |
+
"execution_count": 13,
|
35 |
+
"metadata": {},
|
36 |
+
"outputs": [
|
37 |
+
{
|
38 |
+
"data": {
|
39 |
+
"text/plain": [
|
40 |
+
"{'id': 'general_blip_10',\n",
|
41 |
+
" 'image': 'blip/general_texts_splits/90_6.png',\n",
|
42 |
+
" 'conversations': [{'from': 'human',\n",
|
43 |
+
" 'value': '<image>\\nPrevious Actions: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\" Goal: Show me my notifications'},\n",
|
44 |
+
" {'from': 'gpt',\n",
|
45 |
+
" 'value': 'Action Plan: [DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\"'}]}"
|
46 |
+
]
|
47 |
+
},
|
48 |
+
"execution_count": 13,
|
49 |
+
"metadata": {},
|
50 |
+
"output_type": "execute_result"
|
51 |
+
}
|
52 |
+
],
|
53 |
+
"source": [
|
54 |
+
"data[10]"
|
55 |
+
]
|
56 |
+
},
|
57 |
+
{
|
58 |
+
"cell_type": "code",
|
59 |
+
"execution_count": 14,
|
60 |
+
"metadata": {},
|
61 |
+
"outputs": [
|
62 |
+
{
|
63 |
+
"data": {
|
64 |
+
"text/plain": [
|
65 |
+
"{'id': 'general_blip_11',\n",
|
66 |
+
" 'image': 'blip/general_texts_splits/90_7.png',\n",
|
67 |
+
" 'conversations': [{'from': 'human',\n",
|
68 |
+
" 'value': '<image>\\nPrevious Actions: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\" Goal: Show me my notifications'},\n",
|
69 |
+
" {'from': 'gpt',\n",
|
70 |
+
" 'value': 'Action Plan: [DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8, 0.5]\", \"lift_point\": \"[0.2, 0.5]\", \"typed_text\": \"\"'}]}"
|
71 |
+
]
|
72 |
+
},
|
73 |
+
"execution_count": 14,
|
74 |
+
"metadata": {},
|
75 |
+
"output_type": "execute_result"
|
76 |
+
}
|
77 |
+
],
|
78 |
+
"source": [
|
79 |
+
"data[11]"
|
80 |
+
]
|
81 |
+
},
|
82 |
+
{
|
83 |
+
"cell_type": "code",
|
84 |
+
"execution_count": 15,
|
85 |
+
"metadata": {},
|
86 |
+
"outputs": [],
|
87 |
+
"source": [
|
88 |
+
"sum_all = []\n",
|
89 |
+
"\n",
|
90 |
+
"\n",
|
91 |
+
"for i in data: \n",
|
92 |
+
" title = i['image']\n",
|
93 |
+
" # print(title)\n",
|
94 |
+
" temp_index = title.split('_')[-1].split('.')[0]\n",
|
95 |
+
" temp_index = int(temp_index)\n",
|
96 |
+
" sum_all.append(temp_index)\n",
|
97 |
+
" \n",
|
98 |
+
" pre_title = '_'.join(title.split('_')[:-1])\n",
|
99 |
+
" after_title = title.split('_')[-1].split('.')[1]\n",
|
100 |
+
" \n",
|
101 |
+
" index_list = []\n",
|
102 |
+
" \n",
|
103 |
+
" for w in range(5):\n",
|
104 |
+
" temp_value = temp_index - w\n",
|
105 |
+
"\n",
|
106 |
+
" if temp_value < 1:\n",
|
107 |
+
" temp_value = 1\n",
|
108 |
+
"\n",
|
109 |
+
" new_title = pre_title + '_' + str(temp_value) + '.' + after_title\n",
|
110 |
+
" index_list.append(new_title)\n",
|
111 |
+
"\n",
|
112 |
+
" i['image_history'] = index_list\n",
|
113 |
+
" # break\""
|
114 |
+
]
|
115 |
+
},
|
116 |
+
{
|
117 |
+
"cell_type": "code",
|
118 |
+
"execution_count": 16,
|
119 |
+
"metadata": {},
|
120 |
+
"outputs": [
|
121 |
+
{
|
122 |
+
"name": "stdout",
|
123 |
+
"output_type": "stream",
|
124 |
+
"text": [
|
125 |
+
"Counter({1: 948, 2: 941, 3: 931, 4: 910, 5: 846, 6: 724, 7: 592, 8: 477, 9: 344, 10: 265, 11: 204, 12: 159, 13: 130, 14: 107, 15: 85, 16: 75, 17: 68, 18: 65, 19: 59, 20: 54, 21: 47, 22: 45, 23: 38, 24: 38, 25: 34, 26: 33, 27: 29, 28: 27, 29: 25, 30: 24, 31: 23, 32: 23, 33: 18, 34: 17, 35: 17, 36: 15, 37: 15, 38: 15, 39: 13, 40: 13, 41: 13, 42: 12, 43: 11, 44: 11, 45: 11, 46: 11, 47: 11, 48: 10, 49: 9, 50: 9, 51: 9, 52: 9, 53: 8, 54: 8, 55: 7, 56: 7, 57: 7, 58: 7, 59: 6, 60: 6, 61: 6, 62: 6, 63: 6, 64: 5, 65: 4, 66: 4, 67: 4, 68: 4, 69: 4, 70: 4, 71: 4, 72: 4, 73: 4, 74: 4, 75: 4, 76: 4, 77: 4, 78: 4, 79: 4, 80: 3, 81: 3, 82: 3, 83: 3, 84: 3, 85: 2, 86: 2, 87: 2, 88: 2, 89: 2, 90: 2, 91: 2, 92: 2, 93: 2, 94: 2, 95: 1, 96: 1, 97: 1, 98: 1, 99: 1, 100: 1, 101: 1, 102: 1, 103: 1, 104: 1, 105: 1, 106: 1, 107: 1, 108: 1, 109: 1, 110: 1, 111: 1, 112: 1, 113: 1, 114: 1, 115: 1, 116: 1, 117: 1, 118: 1, 119: 1, 120: 1, 121: 1, 122: 1, 123: 1, 124: 1, 125: 1, 126: 1, 127: 1, 128: 1, 129: 1, 130: 1, 131: 1, 132: 1})\n"
|
126 |
+
]
|
127 |
+
}
|
128 |
+
],
|
129 |
+
"source": [
|
130 |
+
"from collections import Counter\n",
|
131 |
+
"\n",
|
132 |
+
"element_counts = Counter(sum_all)\n",
|
133 |
+
"print(element_counts)\n"
|
134 |
+
]
|
135 |
+
},
|
136 |
+
{
|
137 |
+
"cell_type": "code",
|
138 |
+
"execution_count": 17,
|
139 |
+
"metadata": {},
|
140 |
+
"outputs": [
|
141 |
+
{
|
142 |
+
"data": {
|
143 |
+
"text/plain": [
|
144 |
+
"<BarContainer object of 132 artists>"
|
145 |
+
]
|
146 |
+
},
|
147 |
+
"execution_count": 17,
|
148 |
+
"metadata": {},
|
149 |
+
"output_type": "execute_result"
|
150 |
+
},
|
151 |
+
{
|
152 |
+
"data": {
|
153 |
+
"image/png": "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",
|
154 |
+
"text/plain": [
|
155 |
+
"<Figure size 640x480 with 1 Axes>"
|
156 |
+
]
|
157 |
+
},
|
158 |
+
"metadata": {},
|
159 |
+
"output_type": "display_data"
|
160 |
+
}
|
161 |
+
],
|
162 |
+
"source": [
|
163 |
+
"import matplotlib.pyplot as plt\n",
|
164 |
+
"from collections import Counter\n",
|
165 |
+
"\n",
|
166 |
+
"example_list = sum_all\n",
|
167 |
+
"element_counts = Counter(example_list)\n",
|
168 |
+
"elements = list(element_counts.keys())\n",
|
169 |
+
"counts = list(element_counts.values())\n",
|
170 |
+
" \n",
|
171 |
+
"plt.bar(elements, counts)\n",
|
172 |
+
" "
|
173 |
+
]
|
174 |
+
},
|
175 |
+
{
|
176 |
+
"cell_type": "code",
|
177 |
+
"execution_count": 18,
|
178 |
+
"metadata": {},
|
179 |
+
"outputs": [
|
180 |
+
{
|
181 |
+
"name": "stdout",
|
182 |
+
"output_type": "stream",
|
183 |
+
"text": [
|
184 |
+
"Requirement already satisfied: matplotlib in /home/wb/anaconda3/lib/python3.11/site-packages (3.7.2)\n",
|
185 |
+
"Requirement already satisfied: contourpy>=1.0.1 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (1.0.5)\n",
|
186 |
+
"Requirement already satisfied: cycler>=0.10 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (0.11.0)\n",
|
187 |
+
"Requirement already satisfied: fonttools>=4.22.0 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (4.25.0)\n",
|
188 |
+
"Requirement already satisfied: kiwisolver>=1.0.1 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (1.4.4)\n",
|
189 |
+
"Requirement already satisfied: numpy>=1.20 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (1.24.3)\n",
|
190 |
+
"Requirement already satisfied: packaging>=20.0 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (23.1)\n",
|
191 |
+
"Requirement already satisfied: pillow>=6.2.0 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (9.4.0)\n",
|
192 |
+
"Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (3.0.9)\n",
|
193 |
+
"Requirement already satisfied: python-dateutil>=2.7 in /home/wb/anaconda3/lib/python3.11/site-packages (from matplotlib) (2.8.2)\n",
|
194 |
+
"Requirement already satisfied: six>=1.5 in /home/wb/anaconda3/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
|
195 |
+
"Note: you may need to restart the kernel to use updated packages.\n"
|
196 |
+
]
|
197 |
+
}
|
198 |
+
],
|
199 |
+
"source": [
|
200 |
+
"%pip install matplotlib"
|
201 |
+
]
|
202 |
+
},
|
203 |
+
{
|
204 |
+
"cell_type": "code",
|
205 |
+
"execution_count": 19,
|
206 |
+
"metadata": {},
|
207 |
+
"outputs": [
|
208 |
+
{
|
209 |
+
"name": "stdout",
|
210 |
+
"output_type": "stream",
|
211 |
+
"text": [
|
212 |
+
"113\n",
|
213 |
+
"0\n",
|
214 |
+
"----------------------------------\n",
|
215 |
+
"112\n",
|
216 |
+
"1\n",
|
217 |
+
"----------------------------------\n",
|
218 |
+
"111\n",
|
219 |
+
"0\n",
|
220 |
+
"----------------------------------\n",
|
221 |
+
"110\n",
|
222 |
+
"1\n",
|
223 |
+
"----------------------------------\n",
|
224 |
+
"109\n",
|
225 |
+
"0\n",
|
226 |
+
"----------------------------------\n",
|
227 |
+
"108\n",
|
228 |
+
"1\n",
|
229 |
+
"----------------------------------\n",
|
230 |
+
"107\n",
|
231 |
+
"0\n",
|
232 |
+
"----------------------------------\n",
|
233 |
+
"106\n",
|
234 |
+
"1\n",
|
235 |
+
"----------------------------------\n",
|
236 |
+
"105\n",
|
237 |
+
"0\n",
|
238 |
+
"----------------------------------\n",
|
239 |
+
"104\n",
|
240 |
+
"1\n",
|
241 |
+
"----------------------------------\n",
|
242 |
+
"103\n",
|
243 |
+
"0\n",
|
244 |
+
"----------------------------------\n",
|
245 |
+
"102\n",
|
246 |
+
"2\n",
|
247 |
+
"----------------------------------\n",
|
248 |
+
"101\n",
|
249 |
+
"0\n",
|
250 |
+
"----------------------------------\n",
|
251 |
+
"100\n",
|
252 |
+
"3\n",
|
253 |
+
"----------------------------------\n",
|
254 |
+
"99\n",
|
255 |
+
"0\n",
|
256 |
+
"----------------------------------\n",
|
257 |
+
"98\n",
|
258 |
+
"3\n",
|
259 |
+
"----------------------------------\n",
|
260 |
+
"97\n",
|
261 |
+
"0\n",
|
262 |
+
"----------------------------------\n",
|
263 |
+
"96\n",
|
264 |
+
"4\n",
|
265 |
+
"----------------------------------\n",
|
266 |
+
"95\n",
|
267 |
+
"0\n",
|
268 |
+
"----------------------------------\n",
|
269 |
+
"94\n",
|
270 |
+
"4\n",
|
271 |
+
"----------------------------------\n",
|
272 |
+
"93\n",
|
273 |
+
"0\n",
|
274 |
+
"----------------------------------\n",
|
275 |
+
"92\n",
|
276 |
+
"4\n",
|
277 |
+
"----------------------------------\n",
|
278 |
+
"91\n",
|
279 |
+
"0\n",
|
280 |
+
"----------------------------------\n",
|
281 |
+
"90\n",
|
282 |
+
"4\n",
|
283 |
+
"----------------------------------\n",
|
284 |
+
"89\n",
|
285 |
+
"1\n",
|
286 |
+
"----------------------------------\n",
|
287 |
+
"88\n",
|
288 |
+
"4\n",
|
289 |
+
"----------------------------------\n",
|
290 |
+
"87\n",
|
291 |
+
"2\n",
|
292 |
+
"----------------------------------\n",
|
293 |
+
"86\n",
|
294 |
+
"4\n",
|
295 |
+
"----------------------------------\n",
|
296 |
+
"85\n",
|
297 |
+
"3\n",
|
298 |
+
"----------------------------------\n",
|
299 |
+
"84\n",
|
300 |
+
"4\n",
|
301 |
+
"----------------------------------\n",
|
302 |
+
"83\n",
|
303 |
+
"3\n",
|
304 |
+
"----------------------------------\n",
|
305 |
+
"82\n",
|
306 |
+
"5\n",
|
307 |
+
"----------------------------------\n",
|
308 |
+
"81\n",
|
309 |
+
"3\n",
|
310 |
+
"----------------------------------\n",
|
311 |
+
"80\n",
|
312 |
+
"5\n",
|
313 |
+
"----------------------------------\n",
|
314 |
+
"79\n",
|
315 |
+
"3\n",
|
316 |
+
"----------------------------------\n",
|
317 |
+
"78\n",
|
318 |
+
"5\n",
|
319 |
+
"----------------------------------\n",
|
320 |
+
"77\n",
|
321 |
+
"4\n",
|
322 |
+
"----------------------------------\n",
|
323 |
+
"76\n",
|
324 |
+
"6\n",
|
325 |
+
"----------------------------------\n",
|
326 |
+
"75\n",
|
327 |
+
"4\n",
|
328 |
+
"----------------------------------\n",
|
329 |
+
"74\n",
|
330 |
+
"6\n",
|
331 |
+
"----------------------------------\n",
|
332 |
+
"73\n",
|
333 |
+
"4\n",
|
334 |
+
"----------------------------------\n",
|
335 |
+
"72\n",
|
336 |
+
"6\n",
|
337 |
+
"----------------------------------\n",
|
338 |
+
"71\n",
|
339 |
+
"5\n",
|
340 |
+
"----------------------------------\n",
|
341 |
+
"70\n",
|
342 |
+
"8\n",
|
343 |
+
"----------------------------------\n",
|
344 |
+
"69\n",
|
345 |
+
"7\n",
|
346 |
+
"----------------------------------\n",
|
347 |
+
"68\n",
|
348 |
+
"9\n",
|
349 |
+
"----------------------------------\n",
|
350 |
+
"67\n",
|
351 |
+
"8\n",
|
352 |
+
"----------------------------------\n",
|
353 |
+
"66\n",
|
354 |
+
"11\n",
|
355 |
+
"----------------------------------\n",
|
356 |
+
"65\n",
|
357 |
+
"9\n",
|
358 |
+
"----------------------------------\n",
|
359 |
+
"64\n",
|
360 |
+
"11\n",
|
361 |
+
"----------------------------------\n",
|
362 |
+
"63\n",
|
363 |
+
"9\n",
|
364 |
+
"----------------------------------\n",
|
365 |
+
"62\n",
|
366 |
+
"11\n",
|
367 |
+
"----------------------------------\n",
|
368 |
+
"61\n",
|
369 |
+
"10\n",
|
370 |
+
"----------------------------------\n",
|
371 |
+
"60\n",
|
372 |
+
"12\n",
|
373 |
+
"----------------------------------\n",
|
374 |
+
"59\n",
|
375 |
+
"14\n",
|
376 |
+
"----------------------------------\n",
|
377 |
+
"58\n",
|
378 |
+
"12\n",
|
379 |
+
"----------------------------------\n",
|
380 |
+
"57\n",
|
381 |
+
"17\n",
|
382 |
+
"----------------------------------\n",
|
383 |
+
"56\n",
|
384 |
+
"14\n",
|
385 |
+
"----------------------------------\n",
|
386 |
+
"55\n",
|
387 |
+
"20\n",
|
388 |
+
"----------------------------------\n",
|
389 |
+
"54\n",
|
390 |
+
"14\n",
|
391 |
+
"----------------------------------\n",
|
392 |
+
"53\n",
|
393 |
+
"25\n",
|
394 |
+
"----------------------------------\n",
|
395 |
+
"52\n",
|
396 |
+
"16\n",
|
397 |
+
"----------------------------------\n",
|
398 |
+
"51\n",
|
399 |
+
"26\n",
|
400 |
+
"----------------------------------\n",
|
401 |
+
"50\n",
|
402 |
+
"18\n",
|
403 |
+
"----------------------------------\n",
|
404 |
+
"49\n",
|
405 |
+
"30\n",
|
406 |
+
"----------------------------------\n",
|
407 |
+
"48\n",
|
408 |
+
"20\n",
|
409 |
+
"----------------------------------\n",
|
410 |
+
"47\n",
|
411 |
+
"33\n",
|
412 |
+
"----------------------------------\n",
|
413 |
+
"46\n",
|
414 |
+
"22\n",
|
415 |
+
"----------------------------------\n",
|
416 |
+
"45\n",
|
417 |
+
"36\n",
|
418 |
+
"----------------------------------\n",
|
419 |
+
"44\n",
|
420 |
+
"26\n",
|
421 |
+
"----------------------------------\n",
|
422 |
+
"43\n",
|
423 |
+
"43\n",
|
424 |
+
"----------------------------------\n",
|
425 |
+
"42\n",
|
426 |
+
"31\n",
|
427 |
+
"----------------------------------\n",
|
428 |
+
"41\n",
|
429 |
+
"44\n",
|
430 |
+
"----------------------------------\n",
|
431 |
+
"40\n",
|
432 |
+
"35\n",
|
433 |
+
"----------------------------------\n",
|
434 |
+
"39\n",
|
435 |
+
"51\n",
|
436 |
+
"----------------------------------\n",
|
437 |
+
"38\n",
|
438 |
+
"39\n",
|
439 |
+
"----------------------------------\n",
|
440 |
+
"37\n",
|
441 |
+
"58\n",
|
442 |
+
"----------------------------------\n",
|
443 |
+
"36\n",
|
444 |
+
"49\n",
|
445 |
+
"----------------------------------\n",
|
446 |
+
"35\n",
|
447 |
+
"64\n",
|
448 |
+
"----------------------------------\n",
|
449 |
+
"34\n",
|
450 |
+
"51\n",
|
451 |
+
"----------------------------------\n",
|
452 |
+
"33\n",
|
453 |
+
"71\n",
|
454 |
+
"----------------------------------\n",
|
455 |
+
"32\n",
|
456 |
+
"57\n",
|
457 |
+
"----------------------------------\n",
|
458 |
+
"31\n",
|
459 |
+
"77\n",
|
460 |
+
"----------------------------------\n",
|
461 |
+
"30\n",
|
462 |
+
"66\n",
|
463 |
+
"----------------------------------\n",
|
464 |
+
"29\n",
|
465 |
+
"82\n",
|
466 |
+
"----------------------------------\n",
|
467 |
+
"28\n",
|
468 |
+
"78\n",
|
469 |
+
"----------------------------------\n",
|
470 |
+
"27\n",
|
471 |
+
"91\n",
|
472 |
+
"----------------------------------\n",
|
473 |
+
"26\n",
|
474 |
+
"90\n",
|
475 |
+
"----------------------------------\n",
|
476 |
+
"25\n",
|
477 |
+
"104\n",
|
478 |
+
"----------------------------------\n",
|
479 |
+
"24\n",
|
480 |
+
"112\n",
|
481 |
+
"----------------------------------\n",
|
482 |
+
"23\n",
|
483 |
+
"131\n",
|
484 |
+
"----------------------------------\n",
|
485 |
+
"22\n",
|
486 |
+
"132\n",
|
487 |
+
"----------------------------------\n",
|
488 |
+
"21\n",
|
489 |
+
"163\n",
|
490 |
+
"----------------------------------\n",
|
491 |
+
"20\n",
|
492 |
+
"163\n",
|
493 |
+
"----------------------------------\n",
|
494 |
+
"19\n",
|
495 |
+
"208\n",
|
496 |
+
"----------------------------------\n",
|
497 |
+
"18\n",
|
498 |
+
"211\n",
|
499 |
+
"----------------------------------\n",
|
500 |
+
"17\n",
|
501 |
+
"276\n",
|
502 |
+
"----------------------------------\n",
|
503 |
+
"16\n",
|
504 |
+
"282\n",
|
505 |
+
"----------------------------------\n",
|
506 |
+
"15\n",
|
507 |
+
"392\n",
|
508 |
+
"----------------------------------\n",
|
509 |
+
"14\n",
|
510 |
+
"442\n",
|
511 |
+
"----------------------------------\n",
|
512 |
+
"13\n",
|
513 |
+
"571\n",
|
514 |
+
"----------------------------------\n",
|
515 |
+
"12\n",
|
516 |
+
"713\n",
|
517 |
+
"----------------------------------\n",
|
518 |
+
"11\n",
|
519 |
+
"922\n",
|
520 |
+
"----------------------------------\n",
|
521 |
+
"10\n",
|
522 |
+
"1204\n",
|
523 |
+
"----------------------------------\n",
|
524 |
+
"9\n",
|
525 |
+
"1618\n",
|
526 |
+
"----------------------------------\n",
|
527 |
+
"8\n",
|
528 |
+
"2123\n",
|
529 |
+
"----------------------------------\n",
|
530 |
+
"7\n",
|
531 |
+
"2674\n",
|
532 |
+
"----------------------------------\n",
|
533 |
+
"6\n",
|
534 |
+
"3179\n",
|
535 |
+
"----------------------------------\n",
|
536 |
+
"5\n",
|
537 |
+
"3560\n",
|
538 |
+
"----------------------------------\n",
|
539 |
+
"4\n",
|
540 |
+
"3670\n",
|
541 |
+
"----------------------------------\n",
|
542 |
+
"3\n",
|
543 |
+
"3714\n",
|
544 |
+
"----------------------------------\n",
|
545 |
+
"2\n",
|
546 |
+
"3827\n",
|
547 |
+
"----------------------------------\n",
|
548 |
+
"1\n",
|
549 |
+
"3753\n",
|
550 |
+
"----------------------------------\n",
|
551 |
+
"Counter({2: 3827, 1: 3753, 3: 3714, 4: 3670, 5: 3560, 6: 3179, 7: 2674, 8: 2123, 9: 1618, 10: 1204, 11: 922, 12: 713, 13: 571, 14: 442, 15: 392, 16: 282, 17: 276, 18: 211, 19: 208, 20: 163, 21: 163, 22: 132, 23: 131, 24: 112, 25: 104, 27: 91, 26: 90, 29: 82, 28: 78, 31: 77, 33: 71, 30: 66, 35: 64, 37: 58, 32: 57, 34: 51, 39: 51, 36: 49, 41: 44, 43: 43, 38: 39, 45: 36, 40: 35, 47: 33, 42: 31, 49: 30, 44: 26, 51: 26, 53: 25, 46: 22, 48: 20, 55: 20, 50: 18, 57: 17, 52: 16, 54: 14, 56: 14, 59: 14, 58: 12, 60: 12, 62: 11, 64: 11, 66: 11, 61: 10, 63: 9, 65: 9, 68: 9, 67: 8, 70: 8, 69: 7, 72: 6, 74: 6, 76: 6, 71: 5, 78: 5, 80: 5, 82: 5, 73: 4, 75: 4, 77: 4, 84: 4, 86: 4, 88: 4, 90: 4, 92: 4, 94: 4, 96: 4, 79: 3, 81: 3, 83: 3, 85: 3, 98: 3, 100: 3, 87: 2, 102: 2, 89: 1, 104: 1, 106: 1, 108: 1, 110: 1, 112: 1, 114: 1, 91: 0, 93: 0, 95: 0, 97: 0, 99: 0, 101: 0, 103: 0, 105: 0, 107: 0, 109: 0, 111: 0, 113: 0})\n"
|
552 |
+
]
|
553 |
+
},
|
554 |
+
{
|
555 |
+
"data": {
|
556 |
+
"image/png": "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r7+uyZMn65VXXtHvf/971axZUw888ICmTZsmj8dTpjEBwHmELQCoJK+88oref/99/fjHP9bs2bM1YMAAtW3b1jmekpIiPz8/vffee15/TL711lte5zl/78mhQ4cUFRVVIWO/lNDQUEnS+PHj1a9fv4vWNGrUqNx6hYSEKDU19aLHg4KCyqXP1ahdu7Z8fHyUkJBQ4tXH+vXrX9E5z4ex88H2h7KysipkyfqOHTvKz89Pb731ln7zm99ctj4kJESZmZnF9n/77beS/u/n5vzP+oULdFwYSMtLaGioZs6cqZkzZ+rrr7/WO++8o3Hjxik7O7vEnysAKC3CFgBUgh07dmjUqFH65S9/qblz5youLk4DBgzQ9u3bVbt2bUn//XiUr6+v10cL8/PztWjRIq9zdevWTT4+PpozZ45iY2NL7Gn7Cs55jRo1UoMGDfTJJ59oypQpVnvFx8crJSVFhYWFXkH1alx4FelqVa9eXR07dtT27dvVvHnzEq/CXYm2bdsqICBAr7/+uleg3bhxo7766iuvsFXe8znP4/HokUce0Zw5c/Taa69ddEXCL774QqdOnVLz5s3VuXNnJScna9u2bc7CI9J/P3brcrnUsWNHSXLG/umnn6p79+5O3TvvvFPmsZb2Nahbt64ef/xxffTRR/r3v/9d5n4AcB5hCwDK2c6dOy+6gt9tt92mW265RadOnVL//v1Vv359vfDCC/L399ff/vY33XnnnfrVr37lXLnq1auXpk+froEDB2rYsGE6duyY/vSnPxX7QuF69eppwoQJ+sMf/qD8/Hz94he/kNvt1meffaajR486X+barFkzvfnmm5ozZ45at26tm2666bIfEczPzy92P9F5l/r+rZdeekk9e/ZU9+7dNXjwYP3oRz/Sd999p927d2vbtm164403Ltm3tB588EEtWbJE9913n5544gn9+Mc/lp+fnw4dOqTVq1fr/vvv1wMPPHBF54yJiZEkvfzyywoKClJgYKDq169/0Y8g/tCqVat04MCBYvvvu+8+/fnPf9Y999yjn/zkJ3r00UdVr149nThxQvv27dO77757xfcrBQcHa/To0UpOTlbt2rX1wAMP6NChQ3rmmWcUERHhtVLkbbfdpmrVqmnJkiVq0qSJatasqcjISOfje1dj+vTp+vLLLzV48GCtWLFCDzzwgMLDw3X06FGlpaVp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KM/xAQAAAECVVKawZYxRUVGRJGnlypW67777JElRUVE6evRo+Y0OAAAAAKqoMoWtNm3aaPLkyVq0aJHWrl2rXr16SZL279+v8PDwch0gAAAAAFRFZQpbM2bM0LZt2/T4449r4sSJuv322yVJf//73xUXF1euAwQAAACAqsi3LE9q0aKF12qE5/3xj3+Ur2+ZTgkAAAAA15UyXdm69dZbdezYsWL7T58+rYYNG171oAAAAACgqivTZagDBw6osLCw2P6CggIdOnToqgeF68vU7cUXTRnXKrQSRgIAAABUnCsKW++8847zzytWrJDb7XYeFxYW6qOPPlL9+vXLb3QAAAAAUEVdUdjq27evJMnlcmnQoEFex/z8/FSvXj09//zz5TY4AAAAAKiqrihsnf9urfr16ys9PV2hoXwUDAAAAAAupkz3bO3fv7+8xwEAAAAA15Uyr9P+0Ucf6aOPPlJ2drZzxeu8V1999aoHBgAAAABVWZnC1jPPPKNnn31Wbdq0UUREhFwuV3mPCwAAAACqtDKFrRdffFELFixQQkJCeY8HAAAAAK4LZfpS4zNnziguLq68xwIAAAAA140yha1HHnlES5cuLe+xAAAAAMB1o0xh6/Tp05o+fbrat2+vkSNHavTo0V5baSUnJ+uuu+5SUFCQwsLC1LdvX+3Zs8erxhijpKQkRUZGqlq1aurQoYN27drlVVNQUKCRI0cqNDRUNWrUUJ8+fXTo0CGvmpycHCUkJMjtdsvtdishIUHHjx8vy/QBAAAA4LLKFLY+/fRTtWzZUjfddJN27typ7du3O1tGRkapz7N27VqNGDFCGzduVFpams6dO6du3brp1KlTTs20adM0ffp0zZ49W+np6fJ4POratatOnDjh1CQmJmr58uVKSUnRunXrdPLkScXHx6uwsNCpGThwoDIyMpSamqrU1FRlZGRwzxkAAAAAa8q0QMbq1avLpXlqaqrX4/nz5yssLExbt27VvffeK2OMZs6cqYkTJ6pfv36SpIULFyo8PFxLly7V8OHDlZubq3nz5mnRokXq0qWLJGnx4sWKiorSypUr1b17d+3evVupqanauHGj2rZtK0maO3euYmNjtWfPHjVq1Khc5gMAAAAA55XpypYtubm5kqTg4GBJ//3y5KysLHXr1s2pCQgIUPv27bV+/XpJ0tatW3X27FmvmsjISMXE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EbYAXPfK44pXaZ5j8zwAAKDqIWwBQDmozHvVCHQAAFybbqiw9cILL+iPf/yjMjMzdccdd2jmzJn6yU9+UtnDAnADqmpX2wiAAABcuRsmbL3++utKTEzUCy+8oLvvvlsvvfSSevbsqc8++0x169at7OEBQLmraqHKdm8CIACgot0wYWv69OkaMmSIHnnkEUnSzJkztWLFCs2ZM0fJycmVPDoAuDFcqwGwpFUpr/RLvcvzS8AJnwBQ9d0QYevMmTPaunWrxo0b57W/W7duWr9+/UWfU1BQoIKCAudxbm6uJCkvL8/eQK/A6ZMniu3Ly/O/4v3lea7y6H0tjone1+/PQWX2rirvxY3au6LGNP2TY8X2j24RcsneJT2nvOollfgc2/uvtd7X4piuhd4lsV1fWT2uhTHh2nM+ExhjLlnnMperuA58++23+tGPfqR///vfiouLc/ZPmTJFCxcu1J49e4o9JykpSc8880xFDhMAAABAFXLw4EHVqVOnxOM3xJWt81wul9djY0yxfeeNHz9eo0ePdh4XFRXpu+++U0hISInPqWh5eXmKiorSwYMHVatWLXrTm970pje96U1vetP7hu9dEYwxOnHihCIjIy9Zd0OErdDQUPn4+CgrK8trf3Z2tsLDwy/6nICAAAUEBHjtu/nmm20N8arUqlWr0n6I6U1vetOb3vSmN73pTe9rsbdtbrf7sjU3VcA4Kp2/v79at26ttLQ0r/1paWleHysEAAAAgPJyQ1zZkqTRo0crISFBbdq0UWxsrF5++WV9/fXX+s1vflPZQwMAAABwHbphwtaAAQN07NgxPfvss8rMzFRMTIw++OADRUdHV/bQyiwgIECTJk0q9nFHetOb3vSmN73pTW960/tG7X0tuSFWIwQAAACAinZD3LMFAAAAABWNsAUAAAAAFhC2AAAAAMACwhYAAAAAWEDYqqI+/vhj9e7dW5GRkXK5XHrrrbcqrPc333yjhx9+WCEhIapevbpatmyprVu3lnufy83xzTffVPfu3RUaGiqXy6WMjIwK6y1Ju3fvVp8+feR2uxUUFKR27drp66+/vqq+ycnJuuuuuxQUFKSwsDD17dtXe/bs8aqxNe/S9JbszHvOnDlq3ry588WHsbGx+uc//+kct/leX663ZGfOF5OcnCyXy6XExERnn825X663ZGfuSUlJcrlcXpvH43GO25zz5XpLdt/vy/3+tDn30vzutjH3evXqFXvNXS6XRowYIcnunC/XW7L3fp87d06/+93vVL9+fVWrVk233nqrnn32WRUVFTk1tuZemt6SvbmfOHFCiYmJio6OVrVq1RQXF6f09HTnuM33/HK9pfKZ9+X+TjDGKCkpSZGRkapWrZo6dOigXbt2edW8/PLL6tChg2rVqiWXy6Xjx49XWG9J2rBhgzp16qQaNWro5ptvVocOHZSfn39VvUvz3pZ13lUVYauKOnXqlFq0aKHZs2dXaN+cnBzdfffd8vPz0z//+U999tlnev7553XzzTeXe6/LzfHUqVO6++67NXXq1Arv/cUXX+iee+5R48aNtWbNGn3yySf6/e9/r8DAwKvqu3btWo0YMUIbN25UWlqazp07p27duunUqVNeY7Mx79L0tjXvOnXqaOrUqdqyZYu2bNmiTp066f7773f+42Dzvb5cb1tzvlB6erpefvllNW/e3Gu/zblfrrfNud9xxx3KzMx0th07djjHbM/5Ur1tzrk0vz9tzb00vW3NPT093ev1TktLkyT9/Oc/l2T3/b5cb5vv9//+7//qxRdf1OzZs7V7925NmzZNf/zjHzVr1iynxtbcS9Pb5twfeeQRpaWladGiRdqxY4e6deumLl266JtvvpFk9z2/XO/ymvfl/k6YNm2apk+frtmzZys9PV0ej0ddu3bViRMnnJrvv/9ePXr00IQJEyq894YNG9SjRw9169ZNmzdvVnp6uh5//HHddNOlo0F5/G1W1nlXWQZVniSzfPnyCun1P//zP+aee+6pkF4/dKk57t+/30gy27dvr7DeAwYMMA8//LCVfj+UnZ1tJJm1a9cWO2Z73hfrXVHzNsaY2rVrm1deecVrn+05X6x3Rcz5xIkTpkGDBiYtLc20b9/ePPHEE8VqbM39Ur1tzX3SpEmmRYsWl62zMefL9bb5fl/J78/ynntpelfUv99PPPGEue2220xRUZHX/or49/vC3jbn3KtXL/PrX//aa1+/fv0u2q+8516a3rbm/v333xsfHx/z3nvvee1v0aKFmThxote+8p53aXrbmPeFfycUFRUZj8djpk6d6uw7ffq0cbvd5sUXXyz2/NWrVxtJJicnp8J6t23b1vzud7+74n6X6v1DpXlvr2beVQlXtnBF3nnnHbVp00Y///nPFRYWplatWmnu3LmVPawKVVRUpPfff18NGzZU9+7dFRYWprZt21r5KGdubq4kKTg4uNzPfaW9K2rehYWFSklJ0alTpxQbG1uu577S3hU15xEjRqhXr17q0qVLuZ73anrbnvvevXsVGRmp+vXr68EHH9SXX35ZLue9mt6251yZvz8v17uiftbPnDmjxYsX69e//rVcLle5nvtKe9ue8z333KOPPvpIn3/+uSTpk08+0bp163TfffeVy/mvprfNuZ87d06FhYXFrhRVq1ZN69atu+rzX03vivo5379/v7KystStWzdnX0BAgNq3b6/169eXa6+y9M7OztamTZsUFhamuLg4hYeHq3379tbfnxtWZac9XD1V4JWtgIAAExAQYMaPH2+2bdtmXnzxRRMYGGgWLlxote+l5ljRV7YyMzONJFO9enUzffp0s337dpOcnGxcLpdZs2ZNufUtKioyvXv3LvH/Rtuc98V62573p59+amrUqGF8fHyM2+0277//frEaW3MuqXdFvNfLli0zMTExJj8/3xhjKvTK1qV625z7Bx98YP7+97+bTz/91LmiFh4ebo4ePepVZ2POl+pt+/2+kt+f5T33y/WuqN9rr7/+uvHx8THffPNNsWO2f5df2Nv2nIuKisy4ceOMy+Uyvr6+xuVymSlTply0trznfrnetuceGxtr2rdvb7755htz7tw5s2jRIuNyuUzDhg296my855fqbWveF/6d8O9//9tIKvZzPnToUNOtW7dizy/PK1ul6b1hwwYjyQQHB5tXX33VbNu2zSQmJhp/f3/z+eefl7n3D3Fl6/8Qtq4DFRm2/Pz8TGxsrNe+kSNHmnbt2lntey2FrW+++cZIMr/4xS+86nr37m0efPDBcuv72GOPmejoaHPw4MGLHrc574v1tj3vgoICs3fvXpOenm7GjRtnQkNDza5du7xqbM25pN625/z111+bsLAwk5GR4eyrqLB1ud4V9XNujDEnT5404eHh5vnnn/faXxEfK/thb9tzvpLfn+U998v1rqj3u1u3biY+Pv6ix2y/3xf2tj3nZcuWmTp16phly5aZTz/91Lz22msmODjYLFiwoFhtec/9cr1tz33fvn3m3nvvNZKMj4+Pueuuu8xDDz1kmjRp4lVn4z2/VG9b8y4p8Hz77bdedY888ojp3r17sefbCFuX6n2+Zvz48V41zZo1M+PGjStz7x8ibP0fPkaIKxIREaGmTZt67WvSpImVldmuVaGhofL19bX6OowcOVLvvPOOVq9erTp16pTLOa+2t+15+/v76/bbb1ebNm2UnJysFi1a6M9//vNVn/dqetue89atW5Wdna3WrVvL19dXvr6+Wrt2rf7yl7/I19dXhYWFV92jrL1DQkKs/5yfV6NGDTVr1kx79+4t1/NeaW/b73dl/v68XO+K+L321VdfaeXKlXrkkUfK5XxX29v2nJ988kmNGzdODz74oJo1a6aEhAT99re/VXJy8lWf+2p72577bbfdprVr1+rkyZM6ePCgNm/erLNnz6p+/fpXfe6r6V0RP+eSnBVOs7KyvPZnZ2crPDy83PqUtXdERIQk3fB/z1UUwhauyN13311sOfDPP/9c0dHRlTSiiufv76+77rrLyutgjNHjjz+uN998U6tWraqQ/zCVtrfNeZc0noKCgnI/75X0tj3nzp07a8eOHcrIyHC2Nm3a6KGHHlJGRoZ8fHyuukdZewcEBFTY+11QUKDdu3c7fwBUpB/2tv1+V+bvz8v1roh/v+fPn6+wsDD16tWrXM53tb1tz/n7778vtrKbj49PseXXbbhc74r6fV6jRg1FREQoJydHK1as0P33319u5y5L74qad/369eXxeJzVL6X/3jO4du1axcXFlVufsvauV6+eIiMjb/i/5yqKb2UPAGVz8uRJ7du3z3m8f/9+ZWRkKDg4WHXr1rXW97e//a3i4uI0ZcoU9e/fX5s3b9bLL7+sl19+udx7XW6O3333nb7++mt9++23kuT80vB4PMW+N6e8ez/55JMaMGCA7r33XnXs2FGpqal69913tWbNmqvqO2LECC1dulRvv/22goKCnP8z5Xa7Va1aNUmyNu/S9LY17wkTJqhnz56KiorSiRMnlJKSojVr1ig1NVWSvTmXpretOUtSUFCQYmJivPbVqFFDISEhzn5bcy9Nb1tzHzt2rHr37q26desqOztbkydPVl5engYNGiTJ7vt9ud423+/S/P60NffS9LY596KiIs2fP1+DBg2Sr6/3nx423+/L9bY55969e+u5555T3bp1dccdd2j79u2aPn26fv3rXzs1tuZemt42575ixQoZY9SoUSPt27dPTz75pBo1aqRf/epXkuy+55frXV7zvtzfCYmJiZoyZYoaNGigBg0aaMqUKapevboGDhzoPCcrK0tZWVnOeXbs2KGgoCDVrVv3kgtjXW1vl8ulJ598UpMmTVKLFi3UsmVLLVy4UP/5z3/097///armXZr3tqzzrrIq8zOMKLvzn3O9cBs0aJD13u+++66JiYkxAQEBpnHjxubll1+20udyc5w/f/5Fj0+aNMl6b2OMmTdvnrn99ttNYGCgadGihXnrrbeuuu/Fekoy8+fPd2pszbs0vY2xM+9f//rXJjo62vj7+5tbbrnFdO7c2Xz44YfOcZvv9eV6G2NnziW58J4tm3O/XG9j7Mx9wIABJiIiwvj5+ZnIyEjTr18/r/vzbM75cr2Nsft+X+73p825l+Z3t625r1ixwkgye/bsKXbM9s/4pXobY2/OeXl55oknnjB169Y1gYGB5tZbbzUTJ040BQUFTo2tuZemtzH25v7666+bW2+91fj7+xuPx2NGjBhhjh8/7hy3+Z5frrcx5TPvy/2dUFRUZCZNmmQ8Ho8JCAgw9957r9mxY4fXOSZNmlSq/+7a6G2MMcnJyaZOnTqmevXqJjY21vzrX/+66nmX5r0t67yrKpcxxpQcxQAAAAAAZcE9WwAAAABgAWELAAAAACwgbAEAAACABYQtAAAAALCAsAUAAAAAFhC2AAAAAMACwhYAAAAAWEDYAgAAAAALCFsAAFg0ePBg9e3bt7KHAQCoBIQtAMB1obJDzYEDB+RyuZSRkVFpYwAAXFsIWwAAAABgAWELAHDd++yzz3TfffepZs2aCg8PV0JCgo4ePeoc79Chg0aNGqWnnnpKwcHB8ng8SkpK8jrHf/7zH91zzz0KDAxU06ZNtXLlSrlcLr311luSpPr160uSWrVqJZfLpQ4dOng9/09/+pMiIiIUEhKiESNG6OzZs86xF154QQ0aNFBgYKDCw8P1s5/9zMrrAACoWIQtAMB1LTMzU+3bt1fLli21ZcsWpaam6vDhw+rfv79X3cKFC1WjRg1t2rRJ06ZN07PPPqu0tDRJUlFRkfr27avq1atr06ZNevnllzVx4kSv52/evFmStHLlSmVmZurNN990jq1evVpffPGFVq9erYULF2rBggVasGCBJGnLli0aNWqUnn32We3Zs0epqam69957Lb4iAICK4lvZAwAAwKY5c+bozjvv1JQpU5x9r776qqKiovT555+rYcOGkqTmzZtr0qRJkqQGDRpo9uzZ+uijj9S1a1d9+OGH+uKLL7RmzRp5PB5J0nPPPaeuXbs657zlllskSSEhIU7NebVr19bs2bPl4+Ojxo0bq1evXvroo480dOhQff3116pRo4bi4+MVFBSk6OhotWrVyuprAgCoGFzZAgBc17Zu3arVq1erZs2azta4cWNJ0hdffOHUNW/e3Ot5ERERys7OliTt2bNHUVFRXiHqxz/+canHcMcdd8jHx+ei5+7atauio6N16623KiEhQUuWLNH3339/5RMFAFxzCFsAgOtaUVGRevfurYyMDK9t7969Xh/X8/Pz83qey+VSUVGRJMkYI5fLVeYxXOrcQUFB2rZtm5YtW6aIiAg9/fTTatGihY4fP17mfgCAawNhCwBwXbvzzju1a9cu1atXT7fffrvXVqNGjVKdo3Hjxvr66691+PBhZ196erpXjb+/vySpsLDwisfo6+urLl26aNq0afr000914MABrVq16orPAwC4tnDPFgDgupGbm1vse66GDx+uuXPn6he/+IWefPJJhYaGat++fUpJSdHcuXO9Pt5Xkq5du+q2227ToEGDNG3aNJ04ccJZIOP8Fa+wsDBVq1ZNqampqlOnjgIDA+V2uy977vfee09ffvml7r33XtWuXVsffPCBioqK1KhRoyt/AQAA1xSubAEArhtr1qxRq1atvLann35a//73v1VYWKju3bsrJiZGTzzxhNxut266qXT/GfTx8dFbb72lkydP6q677tIjjzyi3/3ud5KkwMBASf+9OvWXv/xFL730kiIjI3X//feX6tw333yz3nzzTXXq1ElNmjTRiy++qGXLlumOO+4o24sAALhmuIwxprIHAQBAVfPvf/9b99xzj/bt26fbbrutsocDALgGEbYAACiF5cuXq2bNmmrQoIH27dunJ554QrVr19a6desqe2gAgGsU92wBAFAKJ06c0FNPPaWDBw8qNDRUXbp00fPPP1/ZwwIAXMO4sgUAAAAAFrBABgAAAABYQNgCAAAAAAsIWwAAAABgAWELAAAAACwgbAEAAACABYQtAAAAALCAsAUAAAAAFhC2AAAAAMCC/wc5zyW/YRtvvQAAAABJRU5ErkJggg==",
|
557 |
+
"text/plain": [
|
558 |
+
"<Figure size 1000x600 with 1 Axes>"
|
559 |
+
]
|
560 |
+
},
|
561 |
+
"metadata": {},
|
562 |
+
"output_type": "display_data"
|
563 |
+
}
|
564 |
+
],
|
565 |
+
"source": [
|
566 |
+
"from collections import Counter\n",
|
567 |
+
"\n",
|
568 |
+
"# 假设这是你的数据统计结果\n",
|
569 |
+
"element_counts = Counter({\n",
|
570 |
+
" 1: 7580, 2: 7541, 3: 7384, 4: 7230, 5: 6739, 6: 5853, 7: 4797, 8: 3741,\n",
|
571 |
+
" 9: 2822, 10: 2126, 11: 1635, 12: 1284, 13: 1013, 14: 834, 15: 674, 16: 558,\n",
|
572 |
+
" 17: 487, 18: 419, 19: 371, 20: 326, 21: 295, 22: 263, 23: 243, 24: 216,\n",
|
573 |
+
" 25: 194, 26: 181, 27: 169, 28: 160, 29: 148, 30: 143, 31: 134, 32: 128,\n",
|
574 |
+
" 33: 122, 34: 115, 35: 113, 36: 107, 37: 97, 38: 90, 39: 86, 40: 79, 41: 75,\n",
|
575 |
+
" 42: 74, 43: 69, 44: 62, 45: 58, 46: 55, 47: 53, 48: 50, 49: 48, 50: 44, 51: 42,\n",
|
576 |
+
" 52: 41, 53: 39, 54: 34, 55: 34, 56: 31, 57: 29, 58: 26, 59: 26, 60: 22, 61: 21,\n",
|
577 |
+
" 62: 20, 63: 20, 64: 20, 65: 20, 66: 19, 67: 17, 68: 16, 69: 15, 70: 13, 71: 11,\n",
|
578 |
+
" 72: 10, 73: 10, 74: 10, 75: 10, 76: 10, 77: 9, 78: 8, 79: 8, 80: 8, 81: 8,\n",
|
579 |
+
" 82: 8, 83: 7, 84: 7, 85: 7, 86: 6, 87: 6, 88: 5, 89: 5, 90: 4, 91: 4, 92: 4,\n",
|
580 |
+
" 93: 4, 94: 4, 95: 4, 96: 4, 97: 3, 98: 3, 99: 3, 100: 3, 101: 2, 102: 2, 103: 1,\n",
|
581 |
+
" 104: 1, 105: 1, 106: 1, 107: 1, 108: 1, 109: 1, 110: 1, 111: 1, 112: 1, 113: 1, 114: 1\n",
|
582 |
+
"})\n",
|
583 |
+
"\n",
|
584 |
+
"# 从最大值开始向下计算,依次减去比自己大的元素数量\n",
|
585 |
+
"max_length = max(element_counts.keys())\n",
|
586 |
+
"for length in range(max_length - 1, 0, -1):\n",
|
587 |
+
" element_counts[length] -= element_counts[length + 1]\n",
|
588 |
+
" print(length)\n",
|
589 |
+
" print(element_counts[length])\n",
|
590 |
+
" print('----------------------------------')\n",
|
591 |
+
"\n",
|
592 |
+
" \n",
|
593 |
+
"# 打印更新后的element_counts\n",
|
594 |
+
"print(element_counts)\n",
|
595 |
+
"\n",
|
596 |
+
"# 提取元素和计数\n",
|
597 |
+
"lengths = list(element_counts.keys())\n",
|
598 |
+
"counts = list(element_counts.values())\n",
|
599 |
+
"\n",
|
600 |
+
"# 绘制柱状图\n",
|
601 |
+
"import matplotlib.pyplot as plt\n",
|
602 |
+
"\n",
|
603 |
+
"plt.figure(figsize=(10, 6))\n",
|
604 |
+
"plt.bar(lengths, counts, width=0.8, color='skyblue')\n",
|
605 |
+
"\n",
|
606 |
+
"# 添加标题和标签\n",
|
607 |
+
"plt.title('Exact Element Length Counts')\n",
|
608 |
+
"plt.xlabel('Lengths')\n",
|
609 |
+
"plt.ylabel('Counts')\n",
|
610 |
+
"\n",
|
611 |
+
"# 显示图表\n",
|
612 |
+
"plt.xticks(range(min(lengths), max(lengths)+1, 5)) # 设置x轴刻度\n",
|
613 |
+
"plt.show()\n"
|
614 |
+
]
|
615 |
+
},
|
616 |
+
{
|
617 |
+
"cell_type": "code",
|
618 |
+
"execution_count": 20,
|
619 |
+
"metadata": {},
|
620 |
+
"outputs": [
|
621 |
+
{
|
622 |
+
"name": "stdout",
|
623 |
+
"output_type": "stream",
|
624 |
+
"text": [
|
625 |
+
"Counter({7: 1056, 6: 1056, 8: 919, 5: 886, 9: 696, 10: 491, 4: 491, 11: 351, 12: 271, 13: 179, 14: 160, 2: 157, 3: 154, 15: 116, 16: 71, 17: 68, 18: 48, 19: 45, 1: 39, 21: 32, 20: 31, 23: 27, 24: 22, 22: 20, 25: 13, 28: 12, 26: 12, 36: 10, 30: 9, 27: 9, 43: 7, 39: 7, 37: 7, 33: 7, 35: 6, 32: 6, 31: 6, 53: 5, 42: 5, 29: 5, 59: 4, 49: 4, 44: 4, 40: 4, 38: 4, 57: 3, 55: 3, 47: 3, 45: 3, 70: 2, 69: 2, 66: 2, 56: 2, 52: 2, 50: 2, 48: 2, 46: 2, 34: 2, 114: 1, 102: 1, 100: 1, 96: 1, 89: 1, 87: 1, 85: 1, 82: 1, 77: 1, 76: 1, 71: 1, 68: 1, 67: 1, 65: 1, 61: 1, 60: 1, 51: 1, 41: 1, 113: 0, 112: 0, 111: 0, 110: 0, 109: 0, 108: 0, 107: 0, 106: 0, 105: 0, 104: 0, 103: 0, 101: 0, 99: 0, 98: 0, 97: 0, 95: 0, 94: 0, 93: 0, 92: 0, 91: 0, 90: 0, 88: 0, 86: 0, 84: 0, 83: 0, 81: 0, 80: 0, 79: 0, 78: 0, 75: 0, 74: 0, 73: 0, 72: 0, 64: 0, 63: 0, 62: 0, 58: 0, 54: 0})\n"
|
626 |
+
]
|
627 |
+
},
|
628 |
+
{
|
629 |
+
"data": {
|
630 |
+
"image/png": "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/PHHVatWLd14442aOnWqnE5nmdYEAPkIWwBQSV555RV99NFHuuKKKzRz5kzdfPPN6ty5s2v7smXL5OPjow8//NDth8l3333XbT/53z05dOiQIiIiKmTt5xIaGipJmjBhggYOHFjonGbNmnmsVkhIiFasWFHo9sDAQI/UKY+6devKy8tLQ4cOLfLoY2RkZKn2mR/G8oPtn6WmplbIJeu7desmHx8fvfvuu7rnnnuKnR8SEqIjR44UGD98+LCk/71v8t/rZ1+g4+xA6imhoaGaPn26pk+frgMHDuj999/X+PHjlZaWVuT7CgBKirAFAJVg+/bteuCBB/S3v/1N8+bNU0xMjG6++WZt2bJFdevWlfTH6VHe3t5upxZmZ2dr8eLFbvuKi4uTl5eXZs+erS5duhRZ0/YRnHzNmjVTVFSUtm3bpsTERKu1+vbtq2XLlik3N9ctqJbH2UeRyqtGjRrq1q2btmzZojZt2hR5FK40OnfuLD8/P7355ptugfaLL77Q/v373cKWp/vJ53Q6NWLECM2ePVuvvfZaoVck/P7773X8+HG1adNG3bt3V1JSkjZv3uy68Ij0x2m3DodD3bp1kyTX2r/++mv16tXLNe/9998v81pL+hw0bNhQ999/v1avXq1PP/20zPUAIB9hCwA8bMeOHYVewa9p06a6+OKLdfz4cQ0aNEiRkZGaNWuWfH199dZbb6l9+/a64447XEeu+vTpo2nTpmnIkCG6++679euvv+r5558v8AuFGzdurEcffVRPPvmksrOzdcsttygoKEi7du3S0aNHXb/MtXXr1nrnnXc0e/ZsdejQQRdddFGxpwhmZ2cX+D5RvnP9/q2XX35Z119/vXr16qXbb79dl1xyiX777Tft3r1bmzdv1ttvv33OuiU1ePBgvfHGG+rdu7cefPBBXXHFFfLx8dGhQ4e0du1a3XDDDbrxxhtLtc9WrVpJkubOnavAwED5+/srMjKy0FMQ/2zNmjX68ccfC4z37t1b//jHP3T11VfrL3/5i+699141btxYWVlZ2rt3rz744INSf18pODhYDz/8sJKSklS3bl3deOONOnTokCZPnqz69eu7XSmyadOmCggI0BtvvKEWLVqoVq1aCg8Pd52+Vx7Tpk3TDz/8oNtvv10rV67UjTfeqLCwMB09elTJyclasGCBli1bpjZt2uihhx7Sa6+9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TW1qU5va1KY2tS/42hXBGKOsrCyFh4efc94FEbZCQ0Pl5eWl1NRUt/G0tDSFhYUV+hg/Pz/5+fm5jdWpU8fWEsuldu3alfYmpja1qU1talOb2tSmNrWrYm3bgoKCip1zUQWso9L5+vqqQ4cOSk5OdhtPTk52O60QAAAAADzlgjiyJUkPP/ywhg4dqo4dO6pLly6aO3euDhw4oHvuuaeylwYAAADgPHTBhK2bb75Zv/76q6ZMmaIjR46oVatW+vjjj9WoUaPKXlqZ+fn5adKkSQVOd6Q2talNbWpTm9rUpja1L9TaVckFcTVCAAAAAKhoF8R3tgAAAACgohG2AAAAAMACwhYAAAAAWEDYAgAAAAALCFvV1H/+8x/169dP4eHhcjgcevfddyus9k8//aTbbrtNISEhqlGjhtq1a6dNmzZ5vE5xPb7zzjvq1auXQkND5XA4tHXr1gqrLUm7d+9W//79FRQUpMDAQF155ZU6cOBAueomJSWpU6dOCgwMVL169TRgwADt2bPHbY6tvktSW7LT9+zZs9WmTRvXLz7s0qWL/v3vf7u223yti6st2em5MElJSXI4HIqPj3eN2ey9uNqSnd4TEhLkcDjcbk6n07XdZs/F1Zbsvt7FfX7a7L0kn902em/cuHGB59zhcGjUqFGS7PZcXG3J3ut95swZPfbYY4qMjFRAQICaNGmiKVOmKC8vzzXHVu8lqS3Z6z0rK0vx8fFq1KiRAgICFBMTo5SUFNd2m695cbUlz/Rd3M8JxhglJCQoPDxcAQEBio2N1c6dO93mzJ07V7Gxsapdu7YcDod+//33CqstSZ9//rmuvfZa1axZU3Xq1FFsbKyys7PLVbskr21Z+66uCFvV1PHjx9W2bVvNnDmzQuump6frqquuko+Pj/79739r165deuGFF1SnTh2P1yqux+PHj+uqq67SM888U+G1v//+e1199dVq3ry51q1bp23btunxxx+Xv79/uequX79eo0aN0hdffKHk5GSdOXNGcXFxOn78uNvabPRdktq2+m7QoIGeeeYZbdy4URs3btS1116rG264wfWPg83Xurjatno+W0pKiubOnas2bdq4jdvsvbjaNnu//PLLdeTIEddt+/btrm22ez5XbZs9l+Tz01bvJaltq/eUlBS35zs5OVmSdNNNN0my+3oXV9vm6/3ss89qzpw5mjlz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AIAFhC0AAAAAsICwBQAAAAAWELYAAAAAwALCFgAAFt1+++0aMGBAZS8DAFAJCFsAgPNCZYeaH3/8UQ6HQ1u3bq20NQAAqhbCFgAAAABYQNgCAJz3du3apd69e6tWrVoKCwvT0KFDdfToUdf22NhYPfDAAxo3bpyCg4PldDqVkJDgto9vvvlGV199tfz9/dWyZUutWrVKDodD7777riQpMjJSkhQdHS2Hw6HY2Fi3xz///POqX7++QkJCNGrUKJ0+fdq1bdasWYqKipK/v7/CwsL017/+1crzAACoWIQtAMB57ciRI+ratavatWunjRs3asWKFfr55581aNAgt3mLFi1SzZo19eWXX2rq1KmaMmWKkpOTJUl5eXkaMGCAatSooS+//FJz587VxIkT3R7/1VdfSZJWrVqlI0eO6J133nFtW7t2rb7//nutXbtWixYt0sKFC7Vw4UJJ0saNG/XAAw9oypQp2rNnj1asWKFrrrnG4jMCAKgo3pW9AAAAbJo9e7bat2+vxMRE19irr76qiIgIffvtt7rsssskSW3atNGkSZMkSVFRUZo5c6ZWr16tnj176pNPPtH333+vdevWyel0SpKefvpp9ezZ07XPiy++WJIUEhLimpOvbt26mjlzpry8vNS8eXP16dNHq1ev1l133aUDBw6oZs2a6tu3rwIDA9WoUSNFR0dbfU4AABWDI1sAgPPapk2btHbtWtWqVct1a968uSTp+++/d81r06aN2+Pq16+vtLQ0SdKePXsUERHhFqKuuOKKEq/h8ssvl5eXV6H77tmzpxo1aqQmTZpo6NCheuONN3TixInSNwoAqHIIWwCA81peXp769eunrVu3ut2+++47t9P1fHx83B7ncDiUl5cnSTLGyOFwlHkN59p3YGCgNm/erKVLl6p+/fp64okn1LZtW/3+++9lrgcAqBoIWwCA81r79u21c+dONW7cWJdeeqnbrWbNmiXaR/PmzXXgwAH9/PPPrrGUlBS3Ob6+vpKk3NzcUq/R29tbPXr00NSpU/X111/rxx9/1Jo1a0q9HwBA1cJ3tgAA542MjIwCv+dq5MiRmjdvnm655RY98sgjCg0N1d69e7Vs2TLNmzfP7fS+ovTs2VNNmzbVsGHDNHXqVGVlZbkukJF/xKtevXoKCAjQihUr1KBBA/n7+ysoKKjYfX/44Yf64YcfdM0116hu3br6+OOPlZeXp2bNmpX+CQAAVCkc2QIAnDfWrVun6Ohot9sTTzyhTz/9VLm5uerVq5datWqlBx98UEFBQbroopL9M+jl5aV3331Xx44dU6dOnTRixAg99thjkiR/f39Jfxyd+uc//6mXX35Z4eHhuuGGG0q07zp16uidd97RtddeqxYtWmjOnDlaunSpLr/88rI9CQCAKsNhjDGVvQgAAKqbTz/9VFdffbX27t2rpk2bVvZyAABVEGELAIASWL58uWrVqqWoqCjt3btXDz74oOrWrasNGzZU9tIAAFUU39kCAKAEsrKyNG7cOB08eFChoaHq0aOHXnjhhcpeFgCgCuPIFgAAAABYwAUyAAAAAMACwhYAAAAAWEDYAgAAAAALCFsAAAAAYAFhCwAAAAAsIGwBAAAAgAWELQAAAACwgLAFAAAAABb8P4vnFbhoLJmLAAAAAElFTkSuQmCC",
|
631 |
+
"text/plain": [
|
632 |
+
"<Figure size 1000x600 with 1 Axes>"
|
633 |
+
]
|
634 |
+
},
|
635 |
+
"metadata": {},
|
636 |
+
"output_type": "display_data"
|
637 |
+
}
|
638 |
+
],
|
639 |
+
"source": [
|
640 |
+
"from collections import Counter\n",
|
641 |
+
"\n",
|
642 |
+
"# 假设这是你的数据统计结��\n",
|
643 |
+
"element_counts = Counter({\n",
|
644 |
+
" 1: 7580, 2: 7541, 3: 7384, 4: 7230, 5: 6739, 6: 5853, 7: 4797, 8: 3741,\n",
|
645 |
+
" 9: 2822, 10: 2126, 11: 1635, 12: 1284, 13: 1013, 14: 834, 15: 674, 16: 558,\n",
|
646 |
+
" 17: 487, 18: 419, 19: 371, 20: 326, 21: 295, 22: 263, 23: 243, 24: 216,\n",
|
647 |
+
" 25: 194, 26: 181, 27: 169, 28: 160, 29: 148, 30: 143, 31: 134, 32: 128,\n",
|
648 |
+
" 33: 122, 34: 115, 35: 113, 36: 107, 37: 97, 38: 90, 39: 86, 40: 79, 41: 75,\n",
|
649 |
+
" 42: 74, 43: 69, 44: 62, 45: 58, 46: 55, 47: 53, 48: 50, 49: 48, 50: 44, 51: 42,\n",
|
650 |
+
" 52: 41, 53: 39, 54: 34, 55: 34, 56: 31, 57: 29, 58: 26, 59: 26, 60: 22, 61: 21,\n",
|
651 |
+
" 62: 20, 63: 20, 64: 20, 65: 20, 66: 19, 67: 17, 68: 16, 69: 15, 70: 13, 71: 11,\n",
|
652 |
+
" 72: 10, 73: 10, 74: 10, 75: 10, 76: 10, 77: 9, 78: 8, 79: 8, 80: 8, 81: 8,\n",
|
653 |
+
" 82: 8, 83: 7, 84: 7, 85: 7, 86: 6, 87: 6, 88: 5, 89: 5, 90: 4, 91: 4, 92: 4,\n",
|
654 |
+
" 93: 4, 94: 4, 95: 4, 96: 4, 97: 3, 98: 3, 99: 3, 100: 3, 101: 2, 102: 2, 103: 1,\n",
|
655 |
+
" 104: 1, 105: 1, 106: 1, 107: 1, 108: 1, 109: 1, 110: 1, 111: 1, 112: 1, 113: 1, 114: 1\n",
|
656 |
+
"})\n",
|
657 |
+
"\n",
|
658 |
+
"# 从最大值开始向下计算,依次减去比自己大的所有元素数量的总和\n",
|
659 |
+
"max_length = max(element_counts.keys())\n",
|
660 |
+
"cumulative_sum = 0\n",
|
661 |
+
"\n",
|
662 |
+
"# 初始化结果统计\n",
|
663 |
+
"updated_element_counts = Counter()\n",
|
664 |
+
"\n",
|
665 |
+
"for length in range(max_length, 0, -1):\n",
|
666 |
+
" current_count = element_counts[length] - cumulative_sum\n",
|
667 |
+
" updated_element_counts[length] = max(current_count, 0)\n",
|
668 |
+
" # cumulative_sum += element_counts[length]\n",
|
669 |
+
" cumulative_sum += updated_element_counts[length]\n",
|
670 |
+
"\n",
|
671 |
+
" # print(cumulative_sum)\n",
|
672 |
+
" # print(updated_element_counts[length])\n",
|
673 |
+
" # print('----------------------------------')\n",
|
674 |
+
"\n",
|
675 |
+
"# 打印更新后的element_counts\n",
|
676 |
+
"print(updated_element_counts)\n",
|
677 |
+
"\n",
|
678 |
+
"# 提取元素和计数\n",
|
679 |
+
"lengths = list(updated_element_counts.keys())\n",
|
680 |
+
"counts = list(updated_element_counts.values())\n",
|
681 |
+
"\n",
|
682 |
+
"# 绘制柱状图\n",
|
683 |
+
"import matplotlib.pyplot as plt\n",
|
684 |
+
"\n",
|
685 |
+
"plt.figure(figsize=(10, 6))\n",
|
686 |
+
"plt.bar(lengths, counts, width=0.8, color='skyblue')\n",
|
687 |
+
"\n",
|
688 |
+
"# 添加标题和标签\n",
|
689 |
+
"plt.title('Exact Element Length Counts')\n",
|
690 |
+
"plt.xlabel('Lengths')\n",
|
691 |
+
"plt.ylabel('Counts')\n",
|
692 |
+
"\n",
|
693 |
+
"# 显示图表\n",
|
694 |
+
"plt.xticks(range(min(lengths), max(lengths)+1, 5)) # 设置x轴刻度\n",
|
695 |
+
"plt.show()\n"
|
696 |
+
]
|
697 |
+
},
|
698 |
+
{
|
699 |
+
"cell_type": "code",
|
700 |
+
"execution_count": 21,
|
701 |
+
"metadata": {},
|
702 |
+
"outputs": [],
|
703 |
+
"source": [
|
704 |
+
"# write_json('/home/wb/BiaoWu/Data/general_blip_train_llava_imgh.json', data)\n",
|
705 |
+
"write_json('/home/wb/BiaoWu/LLaVA/data/json/general_blip_test_llava_imgh.json',data)"
|
706 |
+
]
|
707 |
+
},
|
708 |
+
{
|
709 |
+
"cell_type": "code",
|
710 |
+
"execution_count": null,
|
711 |
+
"metadata": {},
|
712 |
+
"outputs": [],
|
713 |
+
"source": []
|
714 |
+
}
|
715 |
+
],
|
716 |
+
"metadata": {
|
717 |
+
"kernelspec": {
|
718 |
+
"display_name": "Python 3",
|
719 |
+
"language": "python",
|
720 |
+
"name": "python3"
|
721 |
+
},
|
722 |
+
"language_info": {
|
723 |
+
"codemirror_mode": {
|
724 |
+
"name": "ipython",
|
725 |
+
"version": 3
|
726 |
+
},
|
727 |
+
"file_extension": ".py",
|
728 |
+
"mimetype": "text/x-python",
|
729 |
+
"name": "python",
|
730 |
+
"nbconvert_exporter": "python",
|
731 |
+
"pygments_lexer": "ipython3",
|
732 |
+
"version": "3.11.5"
|
733 |
+
}
|
734 |
+
},
|
735 |
+
"nbformat": 4,
|
736 |
+
"nbformat_minor": 2
|
737 |
+
}
|
Ipynb/coco_to_aitw.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
Ipynb/coco_to_swift.ipynb
ADDED
@@ -0,0 +1,237 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import os \n",
|
10 |
+
"import json\n",
|
11 |
+
"\n",
|
12 |
+
"def read_json(file_path): \n",
|
13 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
14 |
+
" data = json.load(file)\n",
|
15 |
+
" return data\n",
|
16 |
+
"\n",
|
17 |
+
"def write_json(file_path, data):\n",
|
18 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
19 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)"
|
20 |
+
]
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"cell_type": "code",
|
24 |
+
"execution_count": 32,
|
25 |
+
"metadata": {},
|
26 |
+
"outputs": [],
|
27 |
+
"source": [
|
28 |
+
"# path = '/code/Data/general_blip_train_llava_imgh.json'\n",
|
29 |
+
"# path = '/code/Data/general_blip_test_llava_imgh.json'\n",
|
30 |
+
"path = '/code/LLaVA/data/json/all_blip_train_llava_imgh.json'\n",
|
31 |
+
"path = '/code/Data/new_json/general_blip_train_llava_coco_imgh.json'\n",
|
32 |
+
"path = '/code/Data/new_json/general_blip_test_llava_coco_imgh.json'\n",
|
33 |
+
"\n",
|
34 |
+
"\n",
|
35 |
+
"flag = '4090'\n",
|
36 |
+
"data = read_json(path)"
|
37 |
+
]
|
38 |
+
},
|
39 |
+
{
|
40 |
+
"cell_type": "code",
|
41 |
+
"execution_count": 33,
|
42 |
+
"metadata": {},
|
43 |
+
"outputs": [
|
44 |
+
{
|
45 |
+
"data": {
|
46 |
+
"text/plain": [
|
47 |
+
"{'id': 'general_blip_7',\n",
|
48 |
+
" 'image': 'blip/general_texts_splits/90_3.png',\n",
|
49 |
+
" 'conversations': [{'from': 'human',\n",
|
50 |
+
" 'value': '<image>\\nPrevious Actions: Goal: Show me my notifications; The action is #Scrolling Up#; The action is #Scrolling Up#'},\n",
|
51 |
+
" {'from': 'gpt', 'value': 'The action is #Scrolling Up#'}],\n",
|
52 |
+
" 'action_type': '#Scrolling Up#',\n",
|
53 |
+
" 'new_answer': 'The action is #Scrolling Up#',\n",
|
54 |
+
" 'new_history': '<image>\\nPrevious Actions: Goal: Show me my notifications; The action is #Scrolling Up#; The action is #Scrolling Up#',\n",
|
55 |
+
" 'ori_question': '<image>\\nPrevious Actions: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\" Goal: Show me my notifications',\n",
|
56 |
+
" 'ori_answer': 'Action Plan: [DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.2, 0.5]\", \"lift_point\": \"[0.8, 0.5]\", \"typed_text\": \"\"',\n",
|
57 |
+
" 'image_history': ['blip/general_texts_splits/90_3.png',\n",
|
58 |
+
" 'blip/general_texts_splits/90_2.png',\n",
|
59 |
+
" 'blip/general_texts_splits/90_1.png',\n",
|
60 |
+
" 'blip/general_texts_splits/90_1.png',\n",
|
61 |
+
" 'blip/general_texts_splits/90_1.png']}"
|
62 |
+
]
|
63 |
+
},
|
64 |
+
"execution_count": 33,
|
65 |
+
"metadata": {},
|
66 |
+
"output_type": "execute_result"
|
67 |
+
}
|
68 |
+
],
|
69 |
+
"source": [
|
70 |
+
"data[7]"
|
71 |
+
]
|
72 |
+
},
|
73 |
+
{
|
74 |
+
"cell_type": "code",
|
75 |
+
"execution_count": 34,
|
76 |
+
"metadata": {},
|
77 |
+
"outputs": [],
|
78 |
+
"source": [
|
79 |
+
"import pprint\n",
|
80 |
+
"\n",
|
81 |
+
"\n",
|
82 |
+
"def replace_hashes(text):\n",
|
83 |
+
" # 使用 rsplit 分割并替换最后五个 ### 为 xxx\n",
|
84 |
+
" parts = text.rsplit('###', 4)\n",
|
85 |
+
" # 将替换后的文本重新拼接\n",
|
86 |
+
" return '; <image>'.join(parts)\n",
|
87 |
+
"\n",
|
88 |
+
"def ensure_five_xxx(text):\n",
|
89 |
+
" # 统计文本中 'xxx' 的出现次数\n",
|
90 |
+
" count = text.count('<image>')\n",
|
91 |
+
" if count < 5:\n",
|
92 |
+
" # 计算还需要补充多少个 'xxx'\n",
|
93 |
+
" missing_xxx = 5 - count\n",
|
94 |
+
" # 在文本末尾添加足够的 'xxx'\n",
|
95 |
+
" text += ' <image>' * missing_xxx\n",
|
96 |
+
" \n",
|
97 |
+
" return text\n",
|
98 |
+
"\n",
|
99 |
+
"\n",
|
100 |
+
"new_data = []\n",
|
101 |
+
"for index, i in enumerate(data):\n",
|
102 |
+
"\n",
|
103 |
+
" temp = {}\n",
|
104 |
+
" temp['query'] = i['conversations'][0]['value']\n",
|
105 |
+
" temp['response'] = i['conversations'][1]['value']\n",
|
106 |
+
" \n",
|
107 |
+
" \n",
|
108 |
+
" temp_image_path_list = []\n",
|
109 |
+
" for w in i['image_history']:\n",
|
110 |
+
"\n",
|
111 |
+
"\n",
|
112 |
+
" if flag == 'A100' :\n",
|
113 |
+
" ############## A100 ##############\n",
|
114 |
+
" temp_image_path = '/data/zbz5349/ICLR_2024/data/' + w\n",
|
115 |
+
"\n",
|
116 |
+
" elif flag == 'A6000' :\n",
|
117 |
+
" ################## A6000 ##################\n",
|
118 |
+
" temp_image_path = '/data/home/zbz5349/WorkSpace/LLaVA/data/' + w\n",
|
119 |
+
"\n",
|
120 |
+
" elif flag == '4090' :\n",
|
121 |
+
" temp_image_path = '/code/Auto-GUI/dataset/' + w\n",
|
122 |
+
" \n",
|
123 |
+
" \n",
|
124 |
+
" temp_image_path_list.append(temp_image_path)\n",
|
125 |
+
"\n",
|
126 |
+
" temp['images'] = temp_image_path_list \n",
|
127 |
+
" # print(temp['images'])\n",
|
128 |
+
" \n",
|
129 |
+
" new_temp = temp['query'].split('#;')\n",
|
130 |
+
" # pprint.pprint(new_temp)\n",
|
131 |
+
" # print('------------------------')\n",
|
132 |
+
"\n",
|
133 |
+
" new_temp = '# ### '.join(new_temp)\n",
|
134 |
+
" # pprint.pprint(new_temp) \n",
|
135 |
+
" \n",
|
136 |
+
" new_temp = replace_hashes(new_temp)\n",
|
137 |
+
" new_temp = ensure_five_xxx(new_temp)\n",
|
138 |
+
" # pprint.pprint(new_temp) \n",
|
139 |
+
"\n",
|
140 |
+
" # print('-----------------------------------------')\n",
|
141 |
+
" # if index > 5:\n",
|
142 |
+
" # break\n",
|
143 |
+
"\n",
|
144 |
+
" temp['query'] = new_temp\n",
|
145 |
+
" new_data.append(temp)"
|
146 |
+
]
|
147 |
+
},
|
148 |
+
{
|
149 |
+
"cell_type": "code",
|
150 |
+
"execution_count": 35,
|
151 |
+
"metadata": {},
|
152 |
+
"outputs": [
|
153 |
+
{
|
154 |
+
"name": "stdout",
|
155 |
+
"output_type": "stream",
|
156 |
+
"text": [
|
157 |
+
"{'images': ['/code/Auto-GUI/dataset/blip/general_texts_splits/90_11.png',\n",
|
158 |
+
" '/code/Auto-GUI/dataset/blip/general_texts_splits/90_10.png',\n",
|
159 |
+
" '/code/Auto-GUI/dataset/blip/general_texts_splits/90_9.png',\n",
|
160 |
+
" '/code/Auto-GUI/dataset/blip/general_texts_splits/90_8.png',\n",
|
161 |
+
" '/code/Auto-GUI/dataset/blip/general_texts_splits/90_7.png'],\n",
|
162 |
+
" 'query': '<image>\\n'\n",
|
163 |
+
" 'Previous Actions: Goal: Show me my notifications; The action is '\n",
|
164 |
+
" '#Scrolling Up# ### The action is #Scrolling Up# ### The action is '\n",
|
165 |
+
" '#Scrolling Up# ### The action is #Scrolling Down# ### The action '\n",
|
166 |
+
" 'is #Scrolling Down# ### The action is #Scrolling Down# ### The '\n",
|
167 |
+
" 'action is #Scrolling Down# ; <image> The action is #Scrolling '\n",
|
168 |
+
" 'Down# ; <image> The action is #Scrolling Down# ; <image> The '\n",
|
169 |
+
" 'action is #DUAL_POINT# ; <image> touch_point: 0.4488, 0.5619, '\n",
|
170 |
+
" 'lift_point: 0.4488, 0.5619',\n",
|
171 |
+
" 'response': 'The action is #DUAL_POINT#; touch_point: 0.4166, 0.4973, '\n",
|
172 |
+
" 'lift_point: 0.4166, 0.4973'}\n"
|
173 |
+
]
|
174 |
+
}
|
175 |
+
],
|
176 |
+
"source": [
|
177 |
+
"\n",
|
178 |
+
"# data[0]\n",
|
179 |
+
"\n",
|
180 |
+
"pprint.pprint(new_data[15]) "
|
181 |
+
]
|
182 |
+
},
|
183 |
+
{
|
184 |
+
"cell_type": "code",
|
185 |
+
"execution_count": 36,
|
186 |
+
"metadata": {},
|
187 |
+
"outputs": [],
|
188 |
+
"source": [
|
189 |
+
"if flag == 'A100' :\n",
|
190 |
+
" new_path = path.split('.')[0] + '_swift_multi_A100.json'\n",
|
191 |
+
"elif flag == 'A6000' :\n",
|
192 |
+
" new_path = path.split('.')[0] + '_swift_multi_A6000.json'\n",
|
193 |
+
" \n",
|
194 |
+
"elif flag == '4090' :\n",
|
195 |
+
" new_path = path.split('.')[0] + '_swift_multi_4090.json'\n",
|
196 |
+
"\n",
|
197 |
+
"\n",
|
198 |
+
"write_json(new_path, new_data)"
|
199 |
+
]
|
200 |
+
},
|
201 |
+
{
|
202 |
+
"cell_type": "code",
|
203 |
+
"execution_count": null,
|
204 |
+
"metadata": {},
|
205 |
+
"outputs": [],
|
206 |
+
"source": []
|
207 |
+
},
|
208 |
+
{
|
209 |
+
"cell_type": "code",
|
210 |
+
"execution_count": null,
|
211 |
+
"metadata": {},
|
212 |
+
"outputs": [],
|
213 |
+
"source": []
|
214 |
+
}
|
215 |
+
],
|
216 |
+
"metadata": {
|
217 |
+
"kernelspec": {
|
218 |
+
"display_name": "llava",
|
219 |
+
"language": "python",
|
220 |
+
"name": "python3"
|
221 |
+
},
|
222 |
+
"language_info": {
|
223 |
+
"codemirror_mode": {
|
224 |
+
"name": "ipython",
|
225 |
+
"version": 3
|
226 |
+
},
|
227 |
+
"file_extension": ".py",
|
228 |
+
"mimetype": "text/x-python",
|
229 |
+
"name": "python",
|
230 |
+
"nbconvert_exporter": "python",
|
231 |
+
"pygments_lexer": "ipython3",
|
232 |
+
"version": "3.10.14"
|
233 |
+
}
|
234 |
+
},
|
235 |
+
"nbformat": 4,
|
236 |
+
"nbformat_minor": 2
|
237 |
+
}
|
Ipynb/deal_symbol.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
Ipynb/deal_transfer_symbol.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
Ipynb/phi35_to_aitw.ipynb
ADDED
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import json\n",
|
10 |
+
"\n",
|
11 |
+
"def read_json(file_path): \n",
|
12 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
13 |
+
" data = json.load(file)\n",
|
14 |
+
" return data\n",
|
15 |
+
"\n",
|
16 |
+
"def write_json(file_path, data):\n",
|
17 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
18 |
+
" json.dump(data, file, ensure_ascii=False, indent=4)\n"
|
19 |
+
]
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"cell_type": "code",
|
23 |
+
"execution_count": 2,
|
24 |
+
"metadata": {},
|
25 |
+
"outputs": [],
|
26 |
+
"source": [
|
27 |
+
"import json\n",
|
28 |
+
"\n",
|
29 |
+
"# 读取 jsonl 文件\n",
|
30 |
+
"def read_jsonl(file_path):\n",
|
31 |
+
" data = []\n",
|
32 |
+
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
33 |
+
" for line in file:\n",
|
34 |
+
" data.append(json.loads(line.strip()))\n",
|
35 |
+
" return data\n",
|
36 |
+
"\n",
|
37 |
+
"# 写入到 jsonl 文件\n",
|
38 |
+
"def write_jsonl(data, file_path):\n",
|
39 |
+
" with open(file_path, 'w', encoding='utf-8') as file:\n",
|
40 |
+
" for entry in data:\n",
|
41 |
+
" json_str = json.dumps(entry, ensure_ascii=False)\n",
|
42 |
+
" file.write(json_str + '\\n')\n"
|
43 |
+
]
|
44 |
+
},
|
45 |
+
{
|
46 |
+
"cell_type": "code",
|
47 |
+
"execution_count": 3,
|
48 |
+
"metadata": {},
|
49 |
+
"outputs": [],
|
50 |
+
"source": [
|
51 |
+
"file_path = \"/code/LLaVA/data/phi35.jsonl\"\n",
|
52 |
+
"\n",
|
53 |
+
"data = read_jsonl('/code/LLaVA/data/phi35.jsonl')"
|
54 |
+
]
|
55 |
+
},
|
56 |
+
{
|
57 |
+
"cell_type": "code",
|
58 |
+
"execution_count": 8,
|
59 |
+
"metadata": {},
|
60 |
+
"outputs": [
|
61 |
+
{
|
62 |
+
"data": {
|
63 |
+
"text/plain": [
|
64 |
+
"({'system': None,\n",
|
65 |
+
" 'query': \"<<image>\\nPrevious Actions: Goal: What's the latest video from GameSpot News?>55555\",\n",
|
66 |
+
" 'response': 'Action Plan: [DUAL_POINT,DUAL_POINT,DUAL_POINT,TYPE,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT,DUAL_POINT]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.7794, 0.6882]\", \"lift_point\": \"[0.7794, 0.6882]\", \"typed_text\": \"\"',\n",
|
67 |
+
" 'label': 'Action Plan: [DUAL_POINT,TYPE,DUAL_POINT,DUAL_POINT,DUAL_POINT,STATUS_TASK_COMPLETE]\\n; Action Decision: \"action_type\": \"DUAL_POINT\", \"touch_point\": \"[0.8836, 0.5836]\", \"lift_point\": \"[0.8836, 0.5836]\", \"typed_text\": \"\"',\n",
|
68 |
+
" 'history': [],\n",
|
69 |
+
" 'images': ['/code/Auto-GUI/dataset/blip/general_texts_splits/83383_1.png']},\n",
|
70 |
+
" 677)"
|
71 |
+
]
|
72 |
+
},
|
73 |
+
"execution_count": 8,
|
74 |
+
"metadata": {},
|
75 |
+
"output_type": "execute_result"
|
76 |
+
}
|
77 |
+
],
|
78 |
+
"source": [
|
79 |
+
"data[0],len(data)"
|
80 |
+
]
|
81 |
+
},
|
82 |
+
{
|
83 |
+
"cell_type": "code",
|
84 |
+
"execution_count": 6,
|
85 |
+
"metadata": {},
|
86 |
+
"outputs": [],
|
87 |
+
"source": [
|
88 |
+
"new_data = []\n",
|
89 |
+
"\n",
|
90 |
+
"for i in data:\n",
|
91 |
+
" temp = {}\n",
|
92 |
+
" temp['gt'] = i['label']\n",
|
93 |
+
" temp['pred'] = i['response']\n",
|
94 |
+
" new_data.append(temp)\n"
|
95 |
+
]
|
96 |
+
},
|
97 |
+
{
|
98 |
+
"cell_type": "code",
|
99 |
+
"execution_count": 7,
|
100 |
+
"metadata": {},
|
101 |
+
"outputs": [
|
102 |
+
{
|
103 |
+
"data": {
|
104 |
+
"text/plain": [
|
105 |
+
"677"
|
106 |
+
]
|
107 |
+
},
|
108 |
+
"execution_count": 7,
|
109 |
+
"metadata": {},
|
110 |
+
"output_type": "execute_result"
|
111 |
+
}
|
112 |
+
],
|
113 |
+
"source": [
|
114 |
+
"len(new_data)"
|
115 |
+
]
|
116 |
+
},
|
117 |
+
{
|
118 |
+
"cell_type": "code",
|
119 |
+
"execution_count": 9,
|
120 |
+
"metadata": {},
|
121 |
+
"outputs": [],
|
122 |
+
"source": [
|
123 |
+
"write_json('/code/LLaVA/data/pred/general_blip_test_llava_all_e1_phi35_lre4_0831.json',new_data)"
|
124 |
+
]
|
125 |
+
},
|
126 |
+
{
|
127 |
+
"cell_type": "code",
|
128 |
+
"execution_count": null,
|
129 |
+
"metadata": {},
|
130 |
+
"outputs": [],
|
131 |
+
"source": []
|
132 |
+
}
|
133 |
+
],
|
134 |
+
"metadata": {
|
135 |
+
"kernelspec": {
|
136 |
+
"display_name": "base",
|
137 |
+
"language": "python",
|
138 |
+
"name": "python3"
|
139 |
+
},
|
140 |
+
"language_info": {
|
141 |
+
"codemirror_mode": {
|
142 |
+
"name": "ipython",
|
143 |
+
"version": 3
|
144 |
+
},
|
145 |
+
"file_extension": ".py",
|
146 |
+
"mimetype": "text/x-python",
|
147 |
+
"name": "python",
|
148 |
+
"nbconvert_exporter": "python",
|
149 |
+
"pygments_lexer": "ipython3",
|
150 |
+
"version": "3.10.13"
|
151 |
+
}
|
152 |
+
},
|
153 |
+
"nbformat": 4,
|
154 |
+
"nbformat_minor": 2
|
155 |
+
}
|
Ipynb/phi3_to_llava.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|