kiokpam commited on
Commit
4fc910b
·
1 Parent(s): 386e23b
Files changed (3) hide show
  1. app.py +105 -0
  2. label400.txt +400 -0
  3. model-400.tflite +3 -0
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tensorflow as tf
2
+ import cv2
3
+ import gradio as gr
4
+ import random
5
+ import numpy as np
6
+ tflite_filename = 'model-400.tflite'
7
+ interpreter = tf.lite.Interpreter(model_path=tflite_filename)
8
+ runner = interpreter.get_signature_runner()
9
+ init_states = {
10
+ name: tf.zeros(x['shape'], dtype=x['dtype'])
11
+ for name, x in runner.get_input_details().items()
12
+ }
13
+ del init_states['image']
14
+
15
+ with open('labels.txt', 'r') as f:
16
+ CLASSES = f.read().splitlines()
17
+
18
+ def format_frames(frame, output_size):
19
+ """
20
+ Pad and resize an image from a video.
21
+
22
+ Args:
23
+ frame: Image that needs to resized and padded.
24
+ output_size: Pixel size of the output frame image.
25
+
26
+ Return:
27
+ Formatted frame with padding of specified output size.
28
+ """
29
+ frame = tf.image.convert_image_dtype(frame, tf.float32)
30
+ frame = tf.image.resize_with_pad(frame, *output_size)
31
+ return frame
32
+ def frames_from_video_file(video_path, n_frames, output_size = (224,224)):
33
+ """
34
+ Creates frames from each video file present for each category.
35
+
36
+ Args:
37
+ video_path: File path to the video.
38
+ n_frames: Number of frames to be created per video file.
39
+ output_size: Pixel size of the output frame image.
40
+
41
+ Return:
42
+ An NumPy array of frames in the shape of (n_frames, height, width, channels).
43
+ """
44
+ # Read each video frame by frame
45
+ result = []
46
+ src = cv2.VideoCapture(str(video_path))
47
+
48
+ video_length = src.get(cv2.CAP_PROP_FRAME_COUNT)
49
+
50
+ frame_step = max(1, int(video_length / n_frames))
51
+
52
+ need_length = 1 + (n_frames - 1) * frame_step
53
+
54
+ if need_length > video_length:
55
+ start = 0
56
+ else:
57
+ max_start = video_length - need_length
58
+ start = random.randint(0, max_start + 1)
59
+
60
+ src.set(cv2.CAP_PROP_POS_FRAMES, start)
61
+ # ret is a boolean indicating whether read was successful, frame is the image itself
62
+ ret, frame = src.read()
63
+ result.append(format_frames(frame, output_size))
64
+
65
+ for _ in range(n_frames - 1):
66
+ for _ in range(frame_step):
67
+ ret, frame = src.read()
68
+ if ret:
69
+ frame = format_frames(frame, output_size)
70
+ result.append(frame)
71
+ else:
72
+ result.append(np.zeros_like(result[0]))
73
+ src.release()
74
+ result = np.array(result)[..., [2, 1, 0]].reshape((1, n_frames, *output_size, 3))
75
+
76
+ return result
77
+
78
+ def get_top_k(probs, k=5, label_map=CLASSES):
79
+ """Outputs the top k model labels and probabilities on the given video."""
80
+ top_predictions = tf.argsort(probs, axis=-1, direction='DESCENDING')[:k]
81
+ top_labels = tf.gather(label_map, top_predictions, axis=-1)
82
+ top_labels = [label.decode('utf8') for label in top_labels.numpy()]
83
+ top_probs = tf.gather(probs, top_predictions, axis=-1).numpy()
84
+ return tuple(zip(top_labels, top_probs))
85
+
86
+ def inferenece(video):
87
+ init_states = {
88
+ name: tf.zeros(x['shape'], dtype=x['dtype'])
89
+ for name, x in runner.get_input_details().items()
90
+ }
91
+ del init_states['image']
92
+ video = frames_from_video_file(video, 20)
93
+ clips = tf.split(video, video.shape[1], axis=1)
94
+ for clip in clips:
95
+ # Input shape: [1, 1, 172, 172, 3]
96
+ outputs = runner(**states, image=clip)
97
+ logits = outputs.pop('logits')[0]
98
+ states = outputs
99
+ probs = tf.nn.softmax(logits)
100
+ top_k = get_top_k(probs)
101
+ result_str = '\n'.join([f'{label}: {prob:.4f}' for label, prob in top_k])
102
+ return result_str
103
+
104
+ demo = gr.interface(fn=inferenece, inputs='video', outputs='text')
105
+ demo.launch()
label400.txt ADDED
@@ -0,0 +1,400 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 0,Anh
2
+ 1,Ba lô
3
+ 2,Bia
4
+ 3,Buổi chiều
5
+ 4,Buổi sáng
6
+ 5,Buổi trưa
7
+ 6,Buổi tối
8
+ 7,Bà ngoại
9
+ 8,Bà nội
10
+ 9,Bàn phím
11
+ 10,Bác
12
+ 11,Bác sĩ
13
+ 12,Bánh bao
14
+ 13,Bánh chưng
15
+ 14,Bánh tét
16
+ 15,Bánh xèo
17
+ 16,Báo cáo
18
+ 17,Bây giờ
19
+ 18,Bình minh
20
+ 19,Bóng bàn
21
+ 20,Bóng chuyền
22
+ 21,Bóng rổ
23
+ 22,Bóng đá
24
+ 23,Bún
25
+ 24,Bút bi
26
+ 25,Bút chì
27
+ 26,Bơi lội
28
+ 27,Bảng
29
+ 28,Bảo vệ
30
+ 29,Bận
31
+ 30,Bắt buộc
32
+ 31,Bắt chước
33
+ 32,Bệnh viện
34
+ 33,Bố
35
+ 34,Ca sĩ
36
+ 35,Cao (người)
37
+ 36,Cao (đồ vật)
38
+ 37,Cay
39
+ 38,Cho
40
+ 39,Chua
41
+ 40,Cháu
42
+ 41,Chìa khóa
43
+ 42,Chú
44
+ 43,Chú ý
45
+ 44,Chăm chỉ
46
+ 45,Chơi cờ
47
+ 46,Chạy
48
+ 47,Chậm chạp
49
+ 48,Chật
50
+ 49,Chết
51
+ 50,Chị
52
+ 51,Chồng
53
+ 52,Chợ
54
+ 53,Chụp hình
55
+ 54,Chủ nhật
56
+ 55,Chủ tịch
57
+ 56,Con bò
58
+ 57,Con chó
59
+ 58,Con dê
60
+ 59,Con gà
61
+ 60,Con gái
62
+ 61,Con heo
63
+ 62,Con mèo
64
+ 63,Con rùa
65
+ 64,Con thỏ
66
+ 65,Con trai
67
+ 66,Con trâu
68
+ 67,Con vịt
69
+ 68,Cung cấp
70
+ 69,Cà phê
71
+ 70,Cái bàn
72
+ 71,Cái chảo
73
+ 72,Cái cửa
74
+ 73,Cái ghế
75
+ 74,Cái kéo
76
+ 75,Cái nồi
77
+ 76,Cái quần
78
+ 77,Cái áo
79
+ 78,Cái đèn
80
+ 79,Có
81
+ 80,Cô
82
+ 81,Công ty
83
+ 82,Công viên
84
+ 83,Cũ
85
+ 84,Cười
86
+ 85,Cảm thấy
87
+ 86,Cảm ơn
88
+ 87,Cần
89
+ 88,Cầu lông
90
+ 89,Cậu
91
+ 90,Cắm trại
92
+ 91,Cục tẩy
93
+ 92,Cứng
94
+ 93,Cửa sổ
95
+ 94,Diễn viên
96
+ 95,Dài
97
+ 96,Dây chuyền
98
+ 97,Dép
99
+ 98,Dì
100
+ 99,Dũng cảm
101
+ 100,Dơ
102
+ 101,Dễ
103
+ 102,Dỗi
104
+ 103,Dở
105
+ 104,Dụng cụ học tập
106
+ 105,Dừng lại
107
+ 106,Dữ
108
+ 107,Em
109
+ 108,Ghét
110
+ 109,Già
111
+ 110,Giàu
112
+ 111,Giày
113
+ 112,Giám đốc
114
+ 113,Giáng sinh
115
+ 114,Giây
116
+ 115,Gió
117
+ 116,Giúp đỡ
118
+ 117,Giường
119
+ 118,Giấy nháp
120
+ 119,Giặt đồ
121
+ 120,Giỏi
122
+ 121,Giới thiệu
123
+ 122,Giờ
124
+ 123,Gạo
125
+ 124,Gần
126
+ 125,Gọi
127
+ 126,Gối (đầu)
128
+ 127,Gội đầu
129
+ 128,Hay (khen)
130
+ 129,Hiền
131
+ 130,Hiệu trưởng
132
+ 131,Hoàng hôn
133
+ 132,Hy vọng
134
+ 133,Hài hước
135
+ 134,Hàn Quốc
136
+ 135,Hát
137
+ 136,Hôi
138
+ 137,Hư
139
+ 138,Hẹp
140
+ 139,Họ hàng
141
+ 140,Học
142
+ 141,Học sinh
143
+ 142,Hứa
144
+ 143,Kem
145
+ 144,Khoe khoang
146
+ 145,Khám bệnh
147
+ 146,Khó
148
+ 147,Khóc
149
+ 148,Khô
150
+ 149,Không cho
151
+ 150,Không cần
152
+ 151,Không nghe lời
153
+ 152,Không nên
154
+ 153,Không quen
155
+ 154,Khăn quàng cổ
156
+ 155,Khỏe
157
+ 156,Kính lúp
158
+ 157,Kẹo
159
+ 158,Kẹp tóc
160
+ 159,Kế toán
161
+ 160,Laptop
162
+ 161,Luật sư
163
+ 162,Làm bài tập
164
+ 163,Làm việc
165
+ 164,Lùn
166
+ 165,Lười biếng
167
+ 166,Lạnh
168
+ 167,Lễ tân
169
+ 168,Mua bán
170
+ 169,Muốn
171
+ 170,Màu cam
172
+ 171,Màu hồng
173
+ 172,Màu nâu
174
+ 173,Màu trắng
175
+ 174,Màu tím
176
+ 175,Màu vàng
177
+ 176,Màu xanh da trời
178
+ 177,Màu xanh lá cây
179
+ 178,Màu đen
180
+ 179,Màu đỏ
181
+ 180,Mách
182
+ 181,Mát mẻ
183
+ 182,Máy bay
184
+ 183,Máy chiếu
185
+ 184,Máy giặt
186
+ 185,Máy tính cầm tay
187
+ 186,Máy điều hoà
188
+ 187,Mì gói
189
+ 188,Mùa hè
190
+ 189,Mùa khô
191
+ 190,Mùa mưa
192
+ 191,Mùa thu
193
+ 192,Mùa xuân
194
+ 193,Mùa đông
195
+ 194,Múa
196
+ 195,Mũ
197
+ 196,Mũ bảo hiểm
198
+ 197,Mưa
199
+ 198,Mạnh
200
+ 199,Mập
201
+ 200,Mặn
202
+ 201,Mẹ
203
+ 202,Mềm
204
+ 203,Mền
205
+ 204,Mệt
206
+ 205,Mới
207
+ 206,Mỹ
208
+ 207,Nghe
209
+ 208,Nghèo
210
+ 209,Nghề nghiệp
211
+ 210,Nghỉ ngơi
212
+ 211,Ngoan
213
+ 212,Ngon miệng
214
+ 213,Ngu ngốc
215
+ 214,Ngày
216
+ 215,Ngày Nhà giáo Việt Nam
217
+ 216,Ngày Quốc tế Lao động
218
+ 217,Ngày Quốc tế Phụ nữ
219
+ 218,Ngày Quốc tế Thiếu nhi
220
+ 219,Ngân hàng
221
+ 220,Ngắn
222
+ 221,Ngọt
223
+ 222,Ngủ
224
+ 223,Ngửi
225
+ 224,Nhanh
226
+ 225,Nhà
227
+ 226,Nhà hàng
228
+ 227,Nhà sách
229
+ 228,Nhà trọ
230
+ 229,Nhân viên phục vụ
231
+ 230,Nhân viên văn phòng
232
+ 231,Nhạt
233
+ 232,Nhảy cao
234
+ 233,Nhảy dây
235
+ 234,Nhầm lẫn
236
+ 235,Nhật Bản
237
+ 236,Nhẹ
238
+ 237,Nên
239
+ 238,Nói
240
+ 239,Nói chuyện
241
+ 240,Nóng
242
+ 241,Nông dân
243
+ 242,Năm
244
+ 243,Nước
245
+ 244,Nướng
246
+ 245,Nấu
247
+ 246,Nắng
248
+ 247,Nặng
249
+ 248,Nếm
250
+ 249,Nồi cơm điện
251
+ 250,Phút
252
+ 251,Phơi đồ
253
+ 252,Phở
254
+ 253,Quan sát
255
+ 254,Quen
256
+ 255,Quán cà phê
257
+ 256,Quạt (đứng)
258
+ 257,Quả bơ
259
+ 258,Quả cam
260
+ 259,Quả chuối
261
+ 260,Quả dâu
262
+ 261,Quả dứa
263
+ 262,Quả dừa
264
+ 263,Quả mận
265
+ 264,Quả xoài
266
+ 265,Quả đu đủ
267
+ 266,Quả đào
268
+ 267,Quả địa cầu
269
+ 268,Quần thun
270
+ 269,Quần tây
271
+ 270,Quần đùi
272
+ 271,Rượu
273
+ 272,Rạp chiếu phim
274
+ 273,Rẻ
275
+ 274,Rộng
276
+ 275,Rửa chén
277
+ 276,Rửa mặt
278
+ 277,Rửa tay
279
+ 278,Sai
280
+ 279,Sinh viên
281
+ 280,Siêu thị
282
+ 281,Sách
283
+ 282,Sáng tạo
284
+ 283,Sạch sẽ
285
+ 284,Sớm
286
+ 285,Sữa
287
+ 286,Taxi
288
+ 287,Tham lam
289
+ 288,Tham ăn
290
+ 289,Thay đổi
291
+ 290,Thuyền
292
+ 291,Thành phố
293
+ 292,Thái Lan
294
+ 293,Tháng
295
+ 294,Tháng ba
296
+ 295,Tháng bảy
297
+ 296,Tháng chín
298
+ 297,Tháng hai
299
+ 298,Tháng mười
300
+ 299,Tháng mười hai
301
+ 300,Tháng mười một
302
+ 301,Tháng một
303
+ 302,Tháng năm
304
+ 303,Tháng sáu
305
+ 304,Tháng tám
306
+ 305,Tháng tư
307
+ 306,Thèm
308
+ 307,Thích
309
+ 308,Thông minh
310
+ 309,Thú vị
311
+ 310,Thơm
312
+ 311,Thư ký
313
+ 312,Thước kẻ
314
+ 313,Thấp (đồ vật)
315
+ 314,Thể dục (thể thao)
316
+ 315,Thịt
317
+ 316,Thời gian
318
+ 317,Thời tiết
319
+ 318,Thứ ba
320
+ 319,Thứ bảy
321
+ 320,Thứ hai
322
+ 321,Thứ năm
323
+ 322,Thứ sáu
324
+ 323,Thứ tư
325
+ 324,Thức dậy
326
+ 325,Thử
327
+ 326,Tivi
328
+ 327,Tiếp tục
329
+ 328,Trung Quốc
330
+ 329,Trung thu
331
+ 330,Trà
332
+ 331,Trường Cao đẳng
333
+ 332,Trường học
334
+ 333,Trường Đại học
335
+ 334,Trẻ
336
+ 335,Trễ
337
+ 336,Trứng
338
+ 337,Trực thăng
339
+ 338,Tàu hỏa
340
+ 339,Tìm
341
+ 340,Túi xách
342
+ 341,Tường
343
+ 342,Tắm rửa
344
+ 343,Tết Âm lịch
345
+ 344,Tỉnh
346
+ 345,Tốt bụng
347
+ 346,Tủ lạnh
348
+ 347,Từ chối
349
+ 348,Uống
350
+ 349,Viên phấn
351
+ 350,Viết
352
+ 351,Việt Nam
353
+ 352,Vâng lời
354
+ 353,Vòng tay
355
+ 354,Võ
356
+ 355,Vở
357
+ 356,Vợ
358
+ 357,Xa
359
+ 358,Xe buýt
360
+ 359,Xe máy
361
+ 360,Xe tải
362
+ 361,Xe đạp
363
+ 362,Xem
364
+ 363,Xin
365
+ 364,Xin lỗi
366
+ 365,Xôi
367
+ 366,Xấu
368
+ 367,Xấu (người)
369
+ 368,Y tá
370
+ 369,Yên tĩnh
371
+ 370,Yêu thương
372
+ 371,Yếu
373
+ 372,Áo sơ mi
374
+ 373,Áo thun
375
+ 374,Áo đầm
376
+ 375,Ô tô
377
+ 376,Ông ngoại
378
+ 377,Ông nội
379
+ 378,Ăn
380
+ 379,Đau
381
+ 380,Đi
382
+ 381,Điền kinh
383
+ 382,Điện thoại
384
+ 383,Đá cầu
385
+ 384,Đúng
386
+ 385,Đầu bếp
387
+ 386,Đậm
388
+ 387,Đắng
389
+ 388,Đắt
390
+ 389,Đẹp
391
+ 390,Đẹp (người)
392
+ 391,Đọc
393
+ 392,Đồ buộc tóc
394
+ 393,Đồ dùng
395
+ 394,Đồng hồ đeo tay
396
+ 395,Đồng ý
397
+ 396,Ướt
398
+ 397,Ấm
399
+ 398,Ốm
400
+ 399,Ồn ào
model-400.tflite ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6102c3d8d9803eba50c99c8aae01391fab60866f4a1f6c37bf7ed0660e490803
3
+ size 27961024