-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathfastapi_server.py
More file actions
68 lines (56 loc) · 3.61 KB
/
Copy pathfastapi_server.py
File metadata and controls
68 lines (56 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from fastapi import FastAPI, WebSocket
from track_3 import track_data, country_balls_amount
import asyncio
import glob
app = FastAPI(title='Tracker assignment')
imgs = glob.glob('imgs/*')
country_balls = [{'cb_id': x, 'img': imgs[x % len(imgs)]} for x in range(country_balls_amount)]
print('Started')
def tracker_soft(el):
"""
Необходимо изменить у каждого словаря в списке значение поля 'track_id' так,
чтобы как можно более длительный период времени 'track_id' соответствовал
одному и тому же кантри болу.
Исходные данные: координаты рамки объектов
Ограничения:
- необходимо использовать как можно меньше ресурсов (представьте, что
вы используете embedded устройство, например Raspberri Pi 2/3).
-значение по ключу 'cb_id' является служебным, служит для подсчета метрик качества
вашего трекера, использовать его в алгоритме трекера запрещено
- запрещается присваивать один и тот же track_id разным объектам на одном фрейме
"""
return el
def tracker_strong(el):
"""
Необходимо изменить у каждого словаря в списке значение поля 'track_id' так,
чтобы как можно более длительный период времени 'track_id' соответствовал
одному и тому же кантри болу.
Исходные данные: координаты рамки объектов, скриншоты прогона
Ограничения:
- вы можете использовать любые доступные подходы, за исключением
откровенно читерных, как например захардкодить заранее правильные значения
'track_id' и т.п.
- значение по ключу 'cb_id' является служебным, служит для подсчета метрик качества
вашего трекера, использовать его в алгоритме трекера запрещено
- запрещается присваивать один и тот же track_id разным объектам на одном фрейме
P.S.: если вам нужны сами фреймы, измените в index.html значение make_screenshot
на true для первого прогона, на повторном прогоне можете читать фреймы из папки
и по координатам вырезать необходимые регионы.
"""
return el
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
print('Accepting client connection...')
await websocket.accept()
# отправка служебной информации для инициализации объектов
# класса CountryBall на фронте
await websocket.send_text(str(country_balls))
for el in track_data:
await asyncio.sleep(0.5)
# TODO: part 1
el = tracker_soft(el)
# TODO: part 2
# el = tracker_strong(el)
# отправка информации по фрейму
await websocket.send_json(el)
print('Bye..')