-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsend_msg.py
124 lines (108 loc) · 3.83 KB
/
send_msg.py
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from queue import Queue
from threading import Thread
import json
import time
from socket import *
from collections import defaultdict
import cv2
import os
from urllib.parse import urljoin
import requests
import asyncio
import websockets
class StartTCP():
def __init__(self, ip_add, port):
self.tcp_server = socket(AF_INET, SOCK_STREAM)
self.address = (ip_add, port)
self.ip_add = ip_add
self.port = port
def start(self):
self.tcp_server.bind(self.address)
self.tcp_server.listen(128)
print('-------------- Start listening to {} --------------'.format(self.port))
while True:
client, addr = self.tcp_server.accept()
return client
class SendMsg():
def __init__(self, client, queueSize=1024):
self.Q = Queue(maxsize=queueSize)
self.stoped = False
self.client = client
def start(self):
t = Thread(target=self.send_msg, args=(), daemon=True)
t.start()
return self
def send_msg(self):
while True:
if self.stoped:
return
if not self.Q.empty():
keypoints = self.Q.get()
if keypoints is not None:
# print(keypoints)
msg = json.dumps(keypoints)
self.client.send(msg.encode('utf-8'))
else:
time.sleep(0.1)
def save(self, kpts):
self.Q.put(kpts)
def stop(self, stream):
self.stoped = True
for i in range(len(stream)):
stream[i].release()
self.client.close()
time.sleep(0.2)
class SendVideo():
def __init__(self, path):
self.path = path
self.frames_to_save = defaultdict(list)
self.flag = -1
def start(self):
t = Thread(target=self.connect, args=(), daemon=True)
t.start()
return self
async def websocket_client(self):
# uri = "ws://127.0.0.1:8000/camListener"
uri = "ws://10.11.140.36:8000/camListener"
async with websockets.connect(uri) as websocket:
async for message in websocket:
print(message)
if 'start' in message: # start recording video
self.flag = 0
print('start')
if 'stop' in message: # stop recording video and send the video path to server
self.flag = 1
print('stop')
if 'reset' in message:
self.flag = 2
print('reset')
if 'action' in message:
self.flag = 3
print('action')
def connect(self):
asyncio.run(self.websocket_client())
def send_video(self):
while True:
if self.frames_to_save is not None:
for l_i in self.frames_to_save:
size = (1920, 1080)
fps = 30
out_fn = os.path.join(self.path, f"{str(l_i)}.avi")
result = cv2.VideoWriter(out_fn,
cv2.VideoWriter_fourcc(*'DIVX'),
fps, size)
for i, frame in enumerate(self.frames_to_save[l_i]):
result.write(frame)
result.release()
url = urljoin('http://10.11.140.36:8000/', 'videoLocation/')
video_path = os.path.join(self.path, "0.avi")
data = {'video': video_path}
ret = requests.post(url, json=data)
self.flag = -1
break
else:
print("=====no data in video!=====")
time.sleep(2)
def save(self, frames_to_save):
self.frames_to_save = frames_to_save
self.send_video()