Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- """
- Use this to print JSON directly to console from whatever camera.
- """
- import json
- import socketserver
- from functools import wraps, partial
- from argparse import ArgumentParser
- ap = ArgumentParser()
- ap.add_argument( "--port", default=55555, type=int )
- ap.add_argument( "--host", default="localhost" )
- class TCPHandler( socketserver.BaseRequestHandler ):
- """
- """
- def __init__( self, callback, *a, **kw ):
- self.callback = callback
- super().__init__( *a, **kw )
- def handle(self):
- while True:
- self.data = self.request.recv(4096)
- if not self.data:
- break
- self.callback( self.data )
- class ThreadedTCPServer( socketserver.ThreadingMixIn, socketserver.TCPServer ):
- pass
- class StreamHandler():
- def __init__(self, name='', on_except=None):
- self.name = name
- self.callbacks = list()
- if on_except:
- self.on_except = on_except
- else:
- def on_except(e):
- print( type(e).__name__, e )
- self.on_except = on_except
- def update(self, val):
- try:
- v = val.decode()
- for cb in self.callbacks:
- cb( v )
- except Exception as e:
- self.on_except(e)
- def new_callback( self, func ):
- charbuffer = ""
- json_strings = []
- @wraps( func )
- def callback( charstring ):
- nonlocal charbuffer
- nonlocal json_strings
- for c in charstring:
- charbuffer += c
- if charbuffer[-4:] in "\r\n\r\n\r":
- json_strings.append(charbuffer[:-4])
- charbuffer = ""
- for s in json_strings:
- obj = json.loads(s)
- func( obj )
- json_strings = []
- self.callbacks.append( callback )
- if __name__ == '__main__':
- args = vars(ap.parse_args())
- port = args["port"]
- host = args["host"]
- x = StreamHandler()
- @x.new_callback
- def vrm_printer( json_obj ):
- if "decodes" in json_obj:
- json_obj=json_obj["decodes"][0]
- vrm = json_obj.get("vrm") or json_obj.get("vrm2")
- meta_type = json_obj.get( "meta_type" ) or ""
- if vrm:
- print( vrm + " " + meta_type )
- server = ThreadedTCPServer((host, port), partial( TCPHandler, x.update ) )
- server.serve_forever()
- print("Cam stream closed.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement