Python 이미지 소켓통신
글쓴이: paragon / 작성시간: 금, 2019/03/15 - 1:09오전
이번 새롭게 가입한 Paragon입니다.
이미지관련해서 관심이 많아 다음과 같은 프로젝트를 하고 있습니다.
Pi(client)에서 PC(server)로 이미지 + 문자(예를 들어 날짜)를 동시에 받아 sqlite에 저장이 가능하도록 하고 있습니다.
일단 시험삼아 노트북 내에서 노트북에 내장되어 있는 카메라를 연결해서 이미지를 캡처를 하고 임의 데이터 3개를 붙여서 서버에 전송은 가능한데, 받은 후 split(',')해서 분리하는 작업이 오류가 납니다.
제가 잘못하고 있는 부분이나, 조언을 듣고 싶습니다.
# server # ... class EchoRequestHandler(socketserver.BaseRequestHandler): # Called before the handle() method to perform any initialization actions required. def setup(self): print (self.client_address[0], 'connected!!') def handle(self): try: la_con.configure(text="Connecting...", foreground="red") data = None while (True): c_data = self.request.recv(1024) print(c_data) except: la_con.configure(text="Disconnecting...",foreground="black") messagebox.showerror("Erorr", "connecting Failed") print(self.client_address[0], 'disconnected!!') def finish(self): self.request.close() class SocksServer(socketserver.ThreadingTCPServer): def __init__(self, listen_addr): socketserver.ThreadingTCPServer.__init__(self, listen_addr, EchoRequestHandler) # Whether the server will allow the reuse of an address. self.allow_reuse_address = True # self.daemon_threads = True # request_queue_size self.request_queue_size = 50 def stop(self): self.shutdown() def start(self): self.serve_forever() def clean_up_data(stringdata): stringdata.split(",") print(stringdata) def insert_data(in_data1, in_data2, in_data3, in_data4, in_data5, in_data6, in_data7): con, cur = None, None # Image,sensor1,sensor2,sensor3,sensor4,sensor5,date data1, data2, data3, data4, data5, data6, data7 = "", "", "", "", "", "", "" sql = "" con = sqlite3.connect("D:/PyProgram/Cvproject/userDB") # DB에 연결 cur = con.cursor() cur.execute("SELECT * FROM datatable") # 저장된 DB 출력 data1 = in_data1 data2 = in_data2 data3 = in_data3 data4 = in_data4 data5 = in_data5 data6 = in_data6 data7 = in_data7 sql = "INSERT INTO dataTable VALUES('" + data1 + "','"+ data2 + "','" + data3 + "'," + data4+ "'," + data5 + "'," + data6 + "'," + data7 + ")" cur.execute(sql) con.commit() # DB에 저장 con.close() # DB 종료 def runserve(host,port): ser = SocksServer((host, port)).start() def DataDB(): subprocess.call(["python.exe",filist]) def close(): plt.close(fig) server.destroy() ...
# client # import socket import time import cv2 import numpy as np def image(): cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) w = cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) h = cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 320) frame_size = (int(cap.get(w)), int(cap.get(h))) ret, frame = cap.read() encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90] jpg = cv2.imencode('.png', frame, encode_param)[1].tostring() data = str(len(jpg)).ljust(16) sampledata = str(jpg) + "," + str(60) + "," + str(20) + "," + data return sampledata def sending(): now = time.localtime() data7=("%04d-%02d-%02d %02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min)) return data7 def run(host, port): c = socket.socket(socket.AF_INET,socket.SOCK_STREAM) c.connect((host,port)) data = image() while(True): c.sendall(data.encode()) if data == None: break c.close() if __name__ == '__main__': run('192.168.0.16',9999)
Forums:
댓글 달기