Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. from struct import unpack_from
  2. import toml
  3. import json
  4. import numpy as np
  5. from websocket import create_connection
  6. import time
  7. from time import sleep, gmtime, strftime, localtime
  8. import datetime
  9. #from datetime import time, datetime,timezone, timedelta
  10. import sys
  11. import asyncio
  12. loop = asyncio.get_event_loop()
  13.  
  14. DTYPES = {0: np.int8, 1: np.uint8, 2: np.int16, 3: np.uint16, 4: np.int32, 5: np.uint32, 6: np.float32, 7: np.float64, }
  15.  
  16. ASCII_RS = '\u001e'
  17. ASCII_US = '\u001f'
  18.  
  19. config = toml.load("config_vayyar.toml")
  20.  
  21. def to_message(buffer):
  22. # parse MatNet messages from JSON / own binary format
  23. if isinstance(buffer, str):
  24. return json.loads(buffer)
  25. seek = 0
  26. # bufferSize = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek))
  27. fields_len = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 4))
  28. header_buff = buffer[seek + 8: seek + 8 + fields_len].decode('utf8')
  29. id, keys = header_buff.split(ASCII_RS)
  30. msg = {'ID': id, 'Payload': {}}
  31. seek += 8 + fields_len
  32. for key in keys.split(ASCII_US):
  33. # fieldSize = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek))
  34. dtype = DTYPES[np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 4))]
  35. ndims = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 8))
  36. dims = np.frombuffer(buffer, np.int32, ndims, seek + 12)
  37. seek += 12 + ndims * np.int32().nbytes
  38. data = np.frombuffer(buffer, dtype, np.prod(dims), seek)
  39. seek += np.prod(dims) * dtype().nbytes
  40. msg['Payload'][key] = data.reshape(dims) if ndims else np.asscalar(data)
  41. return msg
  42.  
  43. listener = create_connection("ws://"+config["connection"]["ip"])
  44. # retrieve current configuration
  45. listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'SET_PARAMS', 'Payload': { 'Cfg.MonitoredRoomDims': config["vayyar"]["rd"], 'Cfg.Common.sensorOrientation.mountPlane': config["vayyar"]["mp"], 'Cfg.Common.sensorOrientation.transVec': config["vayyar"]["tv"], 'Cfg.imgProcessing.substractionMode': config["vayyar"]["ips"], 'Cfg.TargetProperties.MaxPersonsInArena': config["vayyar"]["maxpia"], 'Cfg.TargetProperties.StandingMaxHeight': config["vayyar"]["stamaxh"], 'Cfg.TargetProperties.StandingMinHeight': config["vayyar"]["staminh"], 'Cfg.TargetProperties.SittingMinHeight': config["vayyar"]["lyiminh"], 'Cfg.TargetProperties.LyingMinHeight': config["vayyar"]["pr"], 'Cfg.TargetProperties.PersonRadius': config["vayyar"]["pr"], 'MPR.save_dir': config["vayyar"]["mprsd"], 'MPR.read_from_file': config["vayyar"]["mprrff"], 'MPR.save_to_file': config["vayyar"]["mprstf"], 'MPR.save_image_to_file': config["vayyar"]["mpsitf"], 'Cfg.OutputData.save_to_file': config["vayyar"]["odstf"], 'Cfg.ExternalGUI.FilterImage.TH': config["vayyar"]["egfi"], 'Cfg.ExternalGUI.FilterImage.numOfSd': config["vayyar"]["egfin"], 'Cfg.PeopleCounter.inCarIsLocked': config["vayyar"]["pcic"], 'Cfg.Zones.Beds': config["vayyar"]["zb"] } }))
  46.  
  47. # set outputs for each frame
  48. listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'SET_OUTPUTS', 'Payload': { 'binary_outputs': ['LocationMatrix','NumOfPeople','BreathingMatrix'], 'json_outputs':['PostureVector'] } }))
  49. # start the engine - if WebGUI is not running
  50. listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'START', 'Payload': {} }))
  51. listener.send(json.dumps({'Type': 'QUERY', 'ID': 'JSON_DATA'}))
  52.  
  53. print("Running! Waiting for messages...")
  54. async def send_data():
  55. while True:
  56. await asyncio.sleep(config["asynctimer"]["aast"])
  57. buffer = listener.recv()
  58. data = to_message(buffer)
  59. #print(data['ID'])
  60. #print(data)
  61. if data['ID'] == 'JSON_DATA':
  62. #datetime_object = datetime.datetime.now()
  63. #print(datetime_object)
  64. print(strftime("%H:%M:%S", localtime()))
  65. print("PostureVector: ", data['Payload']['PostureVector'])
  66. listener.send(json.dumps({'Type': 'QUERY', 'ID': 'JSON_DATA'}))
  67. #time.sleep(2)
  68.  
  69. if __name__ == '__main__':
  70. loop.run_until_complete(send_data())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement