Created
May 13, 2020 13:36
-
-
Save papr/5caddb2405a06e6f8c667df05264fdea to your computer and use it in GitHub Desktop.
Replay HMD recording
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 79, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import collections\n", | |
"import sys\n", | |
"import time\n", | |
"\n", | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"from IPython.display import display, clear_output\n", | |
"\n", | |
"def update(*args):\n", | |
" clear_output(wait=True)\n", | |
" display(*args)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"sys.path.append(\"/Users/papr/work/pupil/pupil_src/shared_modules/\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import file_methods as fm\n", | |
"import zmq_tools" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Load recording" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 105, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"recording = \"\" # path to recording; empty string means that the notebook is in the recording folder\n", | |
"\n", | |
"N = fm.load_pldata_file(recording, \"notify\")\n", | |
"P = fm.load_pldata_file(recording, \"pupil\")\n", | |
"\n", | |
"messages = []\n", | |
"messages.extend(N.data)\n", | |
"messages.extend(P.data)\n", | |
"\n", | |
"# Filter 3d data\n", | |
"def is_not_pupil(msg):\n", | |
" return not msg[\"topic\"].startswith(\"pupil\")\n", | |
"\n", | |
"def is_pupil_3d(msg):\n", | |
"\n", | |
" return \"3d\" in msg[\"method\"]\n", | |
"\n", | |
"\n", | |
"messages = filter(lambda m: is_not_pupil(m) or is_pupil_3d(m), messages)\n", | |
"\n", | |
"# Filter calibration data\n", | |
"start, stop = N.timestamps[[0, -1]]\n", | |
"messages = filter(lambda m: start <= m[\"timestamp\"] <= stop, messages)\n", | |
"\n", | |
"# Sort by time\n", | |
"messages = sorted(messages, key=lambda m: m[\"timestamp\"])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Visualize calibration timestamps" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 107, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"ts = [m[\"timestamp\"] for m in messages]\n", | |
"topics_all = [m[\"topic\"] for m in messages]\n", | |
"topics = sorted(set(topics_all))\n", | |
"topic_idc = [topics.index(t) for t in topics_all]\n", | |
"\n", | |
"plt.scatter(ts, topic_idc)\n", | |
"plt.yticks(range(len(topics)), topics)\n", | |
"pass" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Replay recording" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 108, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"req_port = 50020\n", | |
"addr = \"tcp://localhost:{}\"\n", | |
"\n", | |
"zmq = zmq_tools.zmq\n", | |
"ctx = zmq.Context.instance()\n", | |
"req = ctx.socket(zmq.REQ)\n", | |
"\n", | |
"req.connect(addr.format(req_port))\n", | |
"req.send_string(\"SUB_PORT\")\n", | |
"sub_port = req.recv_string()\n", | |
"\n", | |
"req.connect(addr.format(req_port))\n", | |
"req.send_string(\"PUB_PORT\")\n", | |
"pub_port = req.recv_string()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Service v1.23" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 110, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'(Finished) Sending notify.calibration.should_stop'" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Calibration successful.\n" | |
] | |
} | |
], | |
"source": [ | |
"replay_speed = 2 # increasing too much might drop packages\n", | |
"\n", | |
"pub = zmq_tools.Msg_Streamer(ctx, addr.format(pub_port))\n", | |
"logs = zmq_tools.Msg_Receiver(\n", | |
" ctx,\n", | |
" addr.format(sub_port),\n", | |
" topics=(\"logging.\", \"notify.calibration.successful\"))\n", | |
"\n", | |
"try:\n", | |
" first_ts = messages[0][\"timestamp\"]\n", | |
" \n", | |
" pub.send(\n", | |
" {\n", | |
" \"topic\": \"notify.start_plugin\",\n", | |
" \"subject\": \"start_plugin\",\n", | |
" \"name\": \"HMD_Calibration_3D\",\n", | |
" }\n", | |
" )\n", | |
" \n", | |
" req.send_string(f\"T {first_ts}\")\n", | |
" print(req.recv_string())\n", | |
"\n", | |
" last_ts = first_ts\n", | |
" for idx, msg in enumerate(messages):\n", | |
" msg = msg._deep_copy_dict()\n", | |
" new_ts = msg[\"timestamp\"]\n", | |
" time_to_sleep = max(0.0, new_ts - last_ts)\n", | |
" time_to_sleep /= replay_speed\n", | |
" time.sleep(time_to_sleep)\n", | |
" last_ts = new_ts\n", | |
"\n", | |
" pub.send(msg)\n", | |
" \n", | |
" if idx % 100 == 0:\n", | |
" update(f\"({idx}) Sending {msg['topic']}\")\n", | |
"\n", | |
" update(f\"(Finished) Sending {msg['topic']}\")\n", | |
" \n", | |
"except KeyboardInterrupt:\n", | |
" del pub\n", | |
"\n", | |
"# Flush all recent logs\n", | |
"while logs.new_data:\n", | |
" topic, payload = logs.recv()\n", | |
" print(f'[{payload[\"levelname\"]}] {payload[\"name\"]} - {payload[\"msg\"]}')\n", | |
"\n", | |
"try:\n", | |
" while True:\n", | |
" topic, payload = logs.recv()\n", | |
" if topic == \"notify.calibration.successful\":\n", | |
" print(\"Calibration successful.\")\n", | |
" break\n", | |
" print(f'[{payload[\"levelname\"]}] {payload[\"name\"]} - {payload[\"msg\"]}')\n", | |
"except KeyboardInterrupt:\n", | |
" pass\n", | |
"\n", | |
"del logs" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Service 2.0" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 111, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# TODO" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Pupil", | |
"language": "python", | |
"name": "pupil" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.8.2" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment