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:


댓글 달기