2016-03-23 5 views
0

Ich möchte Frames von piCam über Websocket im Base64-Format senden.Raspberry Pi sendender Rahmen von piCam über Websocket

Ich habe den folgenden einfachen Code:

import websocket 
import time 
import picamera 
import io 
import base64 
import StringIO 

class MyClass: 
    ws = '' 
    picam = '' 
    stream = '' 

    def __init__(self): 
     self.init() 

    def on_message(self,ws , message): 
     print ws + "ok" 
     print message 

    def on_error(self, ws, error): 
     print error 

    def on_close(self, ws): 
     print "down" 
     exit() 

    def on_open(self, ws): 
     print "opening connection" 
     ws.send("Hello.") 
     self.main() 

    def main(self): 
     print "main" 
     output = StringIO.StringIO() 
     while True: 
      output.seek(0) 
      self.picam.capture(output, format="jpeg") 
      encoded_string = base64.b64encode(output.getvalue()) 
      self.ws.send("{\"Image\":\""+encoded_string+"\"}") 
      time.sleep(0.2) 
      output.flush() 

    def init(self): 
     print "init" 
     websocket.enableTrace(True) 
     self.picam = picamera.PiCamera() 
     self.picam.resolution = (640, 480) 
     self.stream = io.BytesIO() 
     self.picam.start_preview() 
     self.ws = websocket.WebSocketApp("ws://xxxxx.", 
           on_message = self.on_message, 
           on_error = self.on_error, 
           on_close = self.on_close, 
           on_open= self.on_open) 
     self.ws.run_forever() 

Nach dem Start es ein Bild in ~ 1-2 sec sendet.

  1. Wenn ich versuche, Klasse var base64 Bild Zeichenfolge zu platzieren in und senden es sendet diese jede ~ 0,2 sec.

  2. Wenn ich versuche, das Bild von piCam nur zu erfassen, ohne WebSocket zu senden, ist es in Ordnung, alle ~ 0,2 Sek. Erfasst.

Ich verstehe nicht, warum die Kombination so langsam arbeitet?

Antwort

0

versuchen, die use_video_port Option der Capture-Methode unter Verwendung von:

self.picam.capture(output, format="jpeg", use_video_port=True)