Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.63 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. """
  4.  
  5. Use this to print JSON directly to console from whatever camera.
  6.  
  7. """
  8.  
  9. import json
  10. import socketserver
  11. from functools import wraps, partial
  12. from argparse import ArgumentParser
  13.  
  14. ap = ArgumentParser()
  15. ap.add_argument( "--port", default=55555, type=int )
  16. ap.add_argument( "--host", default="localhost" )
  17.  
  18.  
  19.  
  20. class TCPHandler( socketserver.BaseRequestHandler ):
  21.     """
  22.    """
  23.  
  24.     def __init__( self, callback, *a, **kw ):
  25.         self.callback = callback
  26.         super().__init__( *a, **kw )
  27.    
  28.     def handle(self):
  29.  
  30.         while True:
  31.             self.data = self.request.recv(4096)
  32.             if not self.data:
  33.                 break
  34.             self.callback( self.data )
  35.  
  36.            
  37. class ThreadedTCPServer( socketserver.ThreadingMixIn, socketserver.TCPServer ):
  38.     pass
  39.        
  40.  
  41.  
  42. class StreamHandler():
  43.    
  44.     def __init__(self, name='', on_except=None):
  45.         self.name = name
  46.         self.callbacks = list()
  47.         if on_except:
  48.             self.on_except = on_except
  49.         else:
  50.             def on_except(e):
  51.                 print( type(e).__name__, e )
  52.             self.on_except = on_except
  53.    
  54.    
  55.     def update(self, val):
  56.         try:
  57.             v = val.decode()
  58.             for cb in self.callbacks:
  59.                 cb( v )
  60.         except Exception as e:
  61.             self.on_except(e)
  62.        
  63.    
  64.     def new_callback( self, func ):
  65.        
  66.         charbuffer = ""
  67.         json_strings = []
  68.        
  69.         @wraps( func )
  70.         def callback( charstring ):
  71.             nonlocal charbuffer
  72.             nonlocal json_strings
  73.             for c in charstring:
  74.                 charbuffer += c
  75.                 if charbuffer[-4:] in "\r\n\r\n\r":
  76.                     json_strings.append(charbuffer[:-4])
  77.                     charbuffer = ""
  78.             for s in json_strings:
  79.                 obj = json.loads(s)
  80.                 func( obj )
  81.             json_strings = []
  82.        
  83.         self.callbacks.append( callback )
  84.  
  85.  
  86. if __name__ == '__main__':
  87.    
  88.     args = vars(ap.parse_args())
  89.     port = args["port"]
  90.     host = args["host"]
  91.    
  92.     x = StreamHandler()
  93.    
  94.     @x.new_callback
  95.     def vrm_printer( json_obj ):
  96.         if "decodes" in json_obj:
  97.             json_obj=json_obj["decodes"][0]
  98.         vrm = json_obj.get("vrm") or json_obj.get("vrm2")
  99.         meta_type = json_obj.get( "meta_type" ) or ""
  100.         if vrm:
  101.             print( vrm + " " + meta_type )
  102.        
  103.     server = ThreadedTCPServer((host, port), partial( TCPHandler, x.update ) )    
  104.     server.serve_forever()
  105.        
  106.     print("Cam stream closed.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement