이 질문이 이미 몇 번 나온 것을 알고 있으며 모두 읽었습니다 (희망합니다 ...)하지만 내 프로그램에서 내가 무엇을 시도해도 소켓을 통해 이미지를 보낸 후에는 이미지를 표시 할 수 없습니다.
클라이언트 측에서 Python 2.7을 사용하고 서버 측에서 Python 3.4를 사용하고 있습니다.
다음은 코드입니다.
섬기는 사람:
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(640,480),'RGB')
cam.start()
host='192.168.0.11'
port=8080
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
image = cam.get_raw()
data_64 = base64.b64encode(image)
data_utf = data_64.decode('utf-8')
print (data_utf)
print (len(data_utf))
s.sendall(data_utf)
s.close
고객:
host='192.168.0.11'
port=8080
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
conn, addr = s.accept()
string = ''
while True:
d = conn.recv(640*480)
if not d:
break
else:
d = d.decode('UTF-8')
string += d
print (string)
print (len(string))
fh = open("imageToSave.jpeg", "wb")
fh.write(string)
fh.close()
결국 나는 다른 형식 (.png, .gif 등)을 시도했지만 어떤 것도 나에게 단정 한 그림을 보여주지 않을 것입니다. 프로그램은 데이터가 포함 된 이미지 파일을 생성하지만 파일을 열거 나 사진을 볼 수 없습니다.
두 문자열은 인쇄물과 len ()에 따라 동일합니다. 길이는 819200입니다. 따라서 동일한 문자열이기 때문에 전송이 올바른 것 같습니다. 문제는 어떻게 문자열에서 그림을 가져 오는가입니다.
내 계획은 웹캠 스트림을 Tkinter GUI로 공급하는 것입니다.
나는 또한 서버 측에서 pygame.image.tostring (image, "RGB") 및 pygame.image.fromstring (string, (640,480), "RGB")와 같은 것을 시도했지만 여기서는 항상 "ValueError : String length does not 동일한 형식 및 해상도 크기 "를 사용합니다.
저는 파이썬을 처음 접했기 때문에 약간 복잡한 일을했을 수도 있습니다. 누군가 나를 올바른 방향으로 가리킬 수 있습니까? 며칠 동안 나는 여기에 갇혀 있습니다.
좋아, 내가 알아 냈어. 아래 코드로 작동합니다. Apperantly 나는 올바른 방식으로 문자열을 포맷하는 데 몇 가지 문제가있었습니다.
고객:
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(300,300),'RGB')
cam.start()
image = cam.get_image()
print = cam.get_size()
img_str = pygame.image.tostring(img,"RGB")
host='192.168.0.11'
port=8080
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.sendall(img_str)
s.close
주최자:
host='192.168.0.11'
port=8080
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
conn, addr = s.accept()
string = bytes('','UTF-8')
while True:
d = conn.recv(640*480)
if not d:
print ("break")
break
else:
string += d
pil_image = Image.fromstring("RGB",(352,288),string)
#(352,288) is the return of cam.get_size()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다