이재빈

송신모듈 추가

...@@ -2,8 +2,10 @@ import socket ...@@ -2,8 +2,10 @@ import socket
2 import cv2 2 import cv2
3 import numpy as np 3 import numpy as np
4 from multiprocessing import Queue 4 from multiprocessing import Queue
5 - 5 +from queue import Queue
6 -from labeling_module import LabelingModule 6 +from _thread import *
7 +from labeling_module import LabelingModule as lm
8 +enclose_q = Queue()
7 #socket에서 수신한 버퍼를 반환 9 #socket에서 수신한 버퍼를 반환
8 def recvall(sock, count): 10 def recvall(sock, count):
9 # 바이트 문자열 11 # 바이트 문자열
...@@ -14,34 +16,59 @@ def recvall(sock, count): ...@@ -14,34 +16,59 @@ def recvall(sock, count):
14 buf += newbuf 16 buf += newbuf
15 count -= len(newbuf) 17 count -= len(newbuf)
16 return buf 18 return buf
17 - 19 +def send_threaded(Client_socket, addr, queue):
20 + print("Connected by : ", addr[0], " : ", addr[1])
21 + while True:
22 + try :
23 + data = Client_socket.recv(1024)
24 + if not data:
25 + print("Disconnected")
26 + break
27 + StringData = queue.get()
28 + Client_socket.send(str(len(StringData)).ljust(16).encode())
29 + Client_socket.send(StringData)
30 + except ConnectionResetError as e:
31 + print("Disconnected")
32 + Client_socket.close()
18 33
19 if __name__ == "__main__": 34 if __name__ == "__main__":
20 lm.predict_process.start() 35 lm.predict_process.start()
21 - HOST='127.0.0.1' 36 + RECV_HOST='127.0.0.1'
22 - PORT=9999 37 + RECV_PORT=9999 #RECV PORT
23 38
24 #TCP 사용 39 #TCP 사용
25 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 40 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
26 print('Socket created') 41 print('Socket created')
27 42
28 #CoreCloud IP, PortNumber set 43 #CoreCloud IP, PortNumber set
29 - s.bind((HOST,PORT)) 44 + s.bind((RECV_HOST,RECV_PORT))
30 print('Socket bind complete') 45 print('Socket bind complete')
31 - # Edge Cloud 접속wait (클라이언트 연결을 10개까지 받는다) 46 + # Edge Cloud 접속wait (클라이언트 연결을 10개까지 받)
32 s.listen(10) 47 s.listen(10)
33 print('Socket now listening') 48 print('Socket now listening')
34 49
35 #연결, conn 소켓 객체, addr socket binded addr 50 #연결, conn 소켓 객체, addr socket binded addr
36 conn,addr=s.accept() 51 conn,addr=s.accept()
52 +
53 + SEND_HOST = '127.0.0.1'
54 + SEND_PORT = 9998 #SEND PORT
55 +
56 + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
57 + server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
58 + server_socket.bind((SEND_HOST, SEND_PORT))
59 + server_socket.listen()
37 while True: 60 while True:
38 # client에서 받은 stringData length (==(str(len(stringData))).encode().ljust(16)) 61 # client에서 받은 stringData length (==(str(len(stringData))).encode().ljust(16))
39 length = recvall(conn, 16) 62 length = recvall(conn, 16)
40 stringData = recvall(conn, int(length)) 63 stringData = recvall(conn, int(length))
41 data = np.fromstring(stringData, dtype = 'uint8') 64 data = np.fromstring(stringData, dtype = 'uint8')
42 -
43 #data decode 65 #data decode
44 cropped = cv2.imdecode(data, cv2.IMREAD_COLOR) 66 cropped = cv2.imdecode(data, cv2.IMREAD_COLOR)
45 cropped = cv2.resize(cropped, (48,48)) #Crop Image Resize 67 cropped = cv2.resize(cropped, (48,48)) #Crop Image Resize
46 - lm.new_tensor(cropped) # Predict result
47 - lm.predict_process.join() # thread join
...\ No newline at end of file ...\ No newline at end of file
68 + result = lm.new_tensor(cropped) # Predict result
69 + lm.predict_process.join() # thread join
70 + edge_socket, addr = server_socket.accept()
71 + enclose_q.put(result)
72 + start_new_thread(send_threaded, (edge_socket, addr, enclose_q,))
73 + if(conn): #연결 끊어질 경우 loop 탈출
74 + break
...\ No newline at end of file ...\ No newline at end of file
......