2017-01-28 15 views
0

파이썬 소켓과 OpenCV를 사용하여 HTTP를 통해 웹캠 이미지를 제공하려고하지만 올바르게 작동하지 않습니다. 서버가 웹캠에서 캡처 한 적절한 JPEG 이미지를 제공하지 않습니다. 일부 바이너리 배열 만 보여줍니다. HTTP를 통한 파이썬 웹캠 이미지 서버가 이미지를 표시하지 않습니다.

import io 
import socket 
import atexit 
from cv2 import * 
from PIL import Image 

def camServer(): 
    while True: 
     print("wait...") 
     conn, addr = server_socket.accept() 
     if conn: 
      print(conn) 
      print(addr) 
      connection = conn.makefile('wb') 
      break 

    print("Connecting") 
    try: 
     cam = VideoCapture(0) 
     s, imgArray = cam.read() 
     if s: 
      atexit.register(onExit) 
      img = io.BytesIO() 
      imgPIL = Image.fromarray(imgArray) 
      imgPIL.save(img, format="jpeg") 
      img.seek(0) 
      connection.write(img.read()) 
      img.seek(0) 
      img.truncate() 
    finally: 
     print("close connection") 
     connection.close() 

def onExit(): 
    connection.close() 
    server_socket.close() 
    print("exit") 

server_socket = socket.socket() 
server_socket.bind(('0.0.0.0', 8000)) 
server_socket.listen(0) 
server_socket.setblocking(1) 

while True: 
    camServer() 

는 여기에서 원래의 소스 코드를 발견 Python socket server to send camera image to client 내가 대신 PICamera의 OpenCV의를 사용하도록 수정.

Served HTML Server Log

+2

을! 지금 당장은 원시 이미지 만 제공됩니다. http 헤더와 응답 형식 등 http에 필요한 모든 것을 보내야합니다. –

답변

0

브라우저에서 이미지를 볼 수있는 능력이 필요하면, 콘텐츠 형식 보내 : 당신은 HTTP를 사용하지 않는

atexit.register(onExit) 
img = io.BytesIO() 
imgPIL = Image.fromarray(imgArray) 
imgPIL.save(img, format="jpeg") 
img.seek(0) 

connection.write('HTTP/1.0 200 OK\n') 
connection.write('Content-Type: image/png\n') 
connection.write('\n') 
connection.write(img.read()) 

img.seek(0) 
img.truncate()