tag:github.com,2008:https://github.com/pupil-labs/pupil/releases Release notes from pupil 2023-02-16T16:10:34Z tag:github.com,2008:Repository/12173486/v3.6 2023-02-16T16:10:34Z v3.6 <p>v3.6</p> mikelgg93 tag:github.com,2008:Repository/12173486/v3.5 2022-11-11T10:21:54Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v3.5</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a>! πŸ˜„</p> <h2>Overview</h2> <p>In Pupil v3.5, we cleaned up log messages, improved software stability, fixations are now cached between Pupil Player sessions, and we have fine tuned 3d pupil confidence.</p> <p>Pupil v3.5 is the first release that supports the new macOS Monterey (with a small caveat). Read more below.</p> <p><strong>New</strong></p> <ul> <li>Recording-specific annotation hotkeys</li> <li>Add option to filter out low-confidence values in raw data export</li> <li>Add option to disable world video recording</li> <li>macOS Monterey support</li> </ul> <p><strong>Improved</strong></p> <ul> <li>Reduced number of user-facing log messages</li> <li>Export-in-progress file-name suffixes</li> <li>Windows: Handle exceptions during driver installation gracefully</li> <li>Windows: Option to skip automatic driver installation</li> <li>Windows: Create start menu entries and desktop shortcuts for all users on install</li> <li>Add Euler angles to headpose tracker result</li> <li>Normalize IMU pitch/roll values to [-180, 180] degrees</li> <li>Confidence adjustment for pye3d results</li> <li>Cache post-hoc fixation detector results</li> <li>Documentation</li> </ul> <h2>New</h2> <h3>Recording-specific annotation hotkeys - <a href="https://github.com/pupil-labs/pupil/pull/2170" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2170/hovercard">#2170</a></h3> <p>Until now, the <a href="https://docs.pupil-labs.com/core/software/pupil-player/#keyboard-shortcuts" rel="nofollow">keyboard-shortcut setup</a> for <a href="https://docs.pupil-labs.com/core/software/pupil-player/#annotation-export" rel="nofollow">annotations</a> was stored in Pupil Player's session settings. These were reset if you updated Pupil Core software to a new version.</p> <p>Starting with this version, annotation keyboard shortcuts will be stored persistently within the recording.</p> <p>The definitions are stored in <code>&lt;recording dir&gt;/offline_data/annotation_definitions.json</code> with the format:</p> <div class="highlight highlight-source-json notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="{ &quot;version&quot;: 1, &quot;definitions&quot;: { &quot;&lt;label&gt;&quot;: &quot;&lt;hotkey&gt;&quot; } }"><pre>{ <span class="pl-ent">"version"</span>: <span class="pl-c1">1</span>, <span class="pl-ent">"definitions"</span>: { <span class="pl-ent">"&lt;label&gt;"</span>: <span class="pl-s"><span class="pl-pds">"</span>&lt;hotkey&gt;<span class="pl-pds">"</span></span> } }</pre></div> <p>This file can be shared between recordings.</p> <p>When Pupil Player is opened, it will attempt to load the annotation definitions from the recording-specific file. If the file is not found or is invalid, Pupil Player will fallback to the session settings which contain the last known annotation definitions.</p> <h3>Add option to filter out low-confidence values in raw data export - <a href="https://github.com/pupil-labs/pupil/pull/2210" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2210/hovercard">#2210</a></h3> <p>Pupil Core software assigns "confidence" values to its pupil detections and gaze estimations. They indicate the quality of the measurement. For visualization and some analysis Plugins, Pupil Player hides gaze data below the "Minimum data confidence" threshold (adjustable in the general settings menu).</p> <p>Prior to this release, the raw data exporter plugin exported all data, independently of its confidence. New users, therefore, often wonder why their exported data looks noisier than what they have seen in Pupil Player.</p> <p>Starting with this release, users will have the option to filter out low-confidence data (i.e. <strong>below</strong> the "Minimum data confidence" threshold) in the export. The option can be enabled in the raw data exporter's menu.</p> <h3>Add option to disable world video recording - <a href="https://github.com/pupil-labs/pupil/pull/2169" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2169/hovercard">#2169</a></h3> <p>If you are not interested in recording the scene video, you can now disable the scene video recording in the <code>Recorder</code> menu of Pupil Capture's <code>world</code> window.</p> <h3>macOS Monterey support</h3> <p>Due to new <a href="https://github.com/libusb/libusb/issues/1014" data-hovercard-type="issue" data-hovercard-url="/libusb/libusb/issues/1014/hovercard">technical limitations</a>, Pupil Capture and Pupil Service need to be started with administrator privileges to get access to the video camera feeds. To do that, copy the applications into your <code>/Applications</code> folder and run the corresponding command from the terminal:</p> <ul> <li>Pupil Capture: <code>sudo /Applications/Pupil\ Capture.app/Contents/MacOS/pupil_capture</code></li> <li>Pupil Service: <code>sudo /Applications/Pupil\ Service.app/Contents/MacOS/pupil_service</code></li> </ul> <p><strong>Note</strong>: The terminal will prompt you for your administrator password. It will not preview any typed keys. Simply hit enter once the password has been typed.</p> <p><strong>Note</strong>: When recording with administrator privileges, the resulting folder inherits admin file permissions. Pupil Player will detect these and ask you for the administrator password to reset the file permissions. This will be only necessary once per recording.</p> <h2>Improved</h2> <h3>Export-in-progress file-name suffixes - <a href="https://github.com/pupil-labs/pupil/pull/2167" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2167/hovercard">#2167</a>, <a href="https://github.com/pupil-labs/pupil/pull/2186" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2186/hovercard">#2186</a></h3> <p>Exporting video can take a long time. Pupil Player displays the progress as a growing circle around the menu icon while writing the result incrementally to disk. Specifically, it writes the result directly to the final export location. While the export is ongoing, the video file is invalid but still available to the user. This can lead to users opening the video before it has finished exporting and then encountering playback issues.</p> <p>Starting with this release, Pupil Core software changes the video exports to include a <code>.writing</code> file name suffix during the export. This prevents other applications from recognizing the partially exported video file as complete. Once the export is done, the suffix is removed and other applications are able to recognize the file type as video.</p> <h3>Reduced number of user-facing log messages - <a href="https://github.com/pupil-labs/pupil/pull/2190" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2190/hovercard">#2190</a></h3> <p>Over the years, Pupil Capture's functionality has grown and with it the number of user-facing log messages. They can be overwhelming to the point where important log messages are overlooked or ignored. For this release, we have reviewed the log messages that are being displayed in the UI during typical actions, e.g. calibration and recordings, and have reduced them significantly.</p> <h3>Windows: Handle exceptions during driver installation gracefully - <a href="https://github.com/pupil-labs/pupil/pull/2173" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2173/hovercard">#2173</a></h3> <p>Previously, errors during the driver installation could cause the software to crash. Now, errors will be logged to the log file and the user will be asked to install the drivers manually.</p> <h3>Windows: Option to skip automatic driver installation - <a href="https://github.com/pupil-labs/pupil/issues/2207" data-hovercard-type="issue" data-hovercard-url="/pupil-labs/pupil/issues/2207/hovercard">#2207</a></h3> <p>Using the <code>-skip-driv</code> or <code>--skip-driver-installation</code> flags, one can now launch Pupil Capture and Pupil Service without running the automatic driver installation on Windows. This can be helpful to speed up the start up time or to avoid unwanted driver installations.</p> <h3>Windows: Create start menu entries and desktop shortcuts for all users on install - <a href="https://github.com/pupil-labs/pupil/pull/2166" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2166/hovercard">#2166</a></h3> <p>Pupil Core software is installed to <code>C:\Program Files (x86)\Pupil-Labs</code> by default. This directory should be accessible by all users but the start menu entry and desktop shortcut are only installed for the current user. Starting with this release, the installer will create start menu entries and desktop shortcuts for all users on install.</p> <h3>Add Euler angles to headpose tracker result - <a href="https://github.com/pupil-labs/pupil/pull/2175" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2175/hovercard">#2175</a></h3> <p>Next to camera poses as Rodrigues' rotation vectors, the headpose tracker now also exports the camera orientation in Euler angles.</p> <p>We also fixed a typo in the exported file name.</p> <div class="highlight highlight-source-diff notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="- head_pose_tacker_model.csv + head_pose_tracker_model.csv"><pre><span class="pl-md"><span class="pl-md">-</span> head_pose_tacker_model.csv</span> <span class="pl-mi1"><span class="pl-mi1">+</span> head_pose_tracker_model.csv</span></pre></div> <h3>Normalize IMU pitch/roll values to [-180, 180] - <a href="https://github.com/pupil-labs/pupil/pull/2171" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2171/hovercard">#2171</a></h3> <p>Orientation values exported by the <a href="https://docs.pupil-labs.com/core/software/pupil-player/#imu-timeline" rel="nofollow">IMU Timeline plugin</a> will now be normalized to a range of [-180, 180] degrees.</p> <h3>Confidence adjustment for pye3d results - <a href="https://github.com/pupil-labs/pupil/pull/2195" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2195/hovercard">#2195</a></h3> <p>In some cases, pye3d was overestimating the confidence of its pupil detections. These were visible as noisy gaze estimations in the Pupil Core applications. This release includes an updated version of pye3d with adjusted confidence estimations. As a result, the gaze signal should look more stable during lower confidence situations, e.g. while squinting or looking down. For more information, see the <em>Developer notes</em> below.</p> <h3>Cache post-hoc fixation detector results - <a href="https://github.com/pupil-labs/pupil/pull/2194" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2194/hovercard">#2194</a></h3> <p>Post-hoc fixation detector results no longer need to be recalculated if you close and reopen a recording. Pupil Player stores the results together with the used configuration (version of the gaze data and fixation detection parameters) within the recording directory. The cached data will be restored if the Player configuration matches the configuration stored on disk. If it does not match, Player will recalculate the fixations to avoid inconsistencies.</p> <h3>Documentation</h3> <p>We have improved our documentation in several places:</p> <ul> <li>Pupillometry best practices - <a href="https://github.com/pupil-labs/pupil-docs/pull/453" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil-docs/pull/453/hovercard">pupil-docs#453</a></li> <li>Blink detection - <a href="https://github.com/pupil-labs/pupil-docs/pull/463" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil-docs/pull/463/hovercard">pupil-docs#463</a></li> <li>Pupil Core API - <a href="https://github.com/pupil-labs/pupil-docs/pull/455" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil-docs/pull/455/hovercard">pupil-docs#455</a></li> </ul> <h2>Fixed</h2> <ul> <li>Fixed typo in exported headpose tracker files - <a href="https://github.com/pupil-labs/pupil/pull/2185/files">#2185</a></li> <li>Fix confidence graphs in Pupil Player for pre-2.0 recordings - <a href="https://github.com/pupil-labs/pupil/pull/2191" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2191/hovercard">#2191</a></li> <li>Use correct socket API to retrieve local IP address for Service - <a href="https://github.com/pupil-labs/pupil/pull/2201" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2201/hovercard">#2201</a></li> <li>Fix loading 200 Hz gaze data in Pupil Invisible recordings - <a href="https://github.com/pupil-labs/pupil/pull/2204" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2204/hovercard">#2204</a></li> <li>Fix loading short audio streams - <a href="https://github.com/pupil-labs/pupil/pull/2206" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2206/hovercard">#2206</a></li> </ul> <h2>Known issues</h2> <ul> <li>Windows: Connecting remotely to Pupil Remote on Pupil Service does not work in some cases</li> <li>Pupil Groups: Users have reported issues with Pupil Groups connectivity when running Pupil Capture on different devices.</li> </ul> <p>We are investigating these issues and will try to resolve them with an update as soon as possible.</p> <h2>Developer notes</h2> <h3>Dependencies updates</h3> <p>Python dependencies can be updated using <code>pip</code> and the <code>requirements.txt</code> file:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <h4>pye3d v0.2.0 and v0.3.0</h4> <p>Version 0.2.0 of <code>pye3d</code> has lowered 3d-search-result confidence by 40%. When the confidence of the input 2d pupil datum is lower than a specific threshold (0.7), pye3d attempts to reconstruct the 2d pupil ellipse based on its existing 3d eye model. We noticed that the confidence for these results was systematically overestimated given the actual detection result quality and have therefore adjusted the overall confidence assignment for them. See <a href="https://github.com/pupil-labs/pye3d-detector/pull/36" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pye3d-detector/pull/36/hovercard">pye3d-detector#36</a> for reference.</p> <p>Version 0.3.0 uses a new serialization format for the refractionizer parameters but is otherwise functionally equivalent to version 0.2.0.</p> <h4>pyglui v1.31.0</h4> <p>This new version of <code>pyglui</code> introduces support for multi-line thumb and icon labels.</p> <p>Example:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="from pyglui import ui context = {&quot;state&quot;: False} ui.Icon( &quot;state&quot;, context, label=&quot;Multi\nLine&quot;, label_offset_size=-10, # smaller font label_offset_x=0, # no horizontal adjustments label_offset_y=-10, # move label upwards label_line_height=0.8, # reduce line height )"><pre><span class="pl-k">from</span> <span class="pl-s1">pyglui</span> <span class="pl-k">import</span> <span class="pl-s1">ui</span> <span class="pl-s1">context</span> <span class="pl-c1">=</span> {<span class="pl-s">"state"</span>: <span class="pl-c1">False</span>} <span class="pl-s1">ui</span>.<span class="pl-c1">Icon</span>( <span class="pl-s">"state"</span>, <span class="pl-s1">context</span>, <span class="pl-s1">label</span><span class="pl-c1">=</span><span class="pl-s">"Multi<span class="pl-cce">\n</span>Line"</span>, <span class="pl-s1">label_offset_size</span><span class="pl-c1">=</span><span class="pl-c1">-</span><span class="pl-c1">10</span>, <span class="pl-c"># smaller font</span> <span class="pl-s1">label_offset_x</span><span class="pl-c1">=</span><span class="pl-c1">0</span>, <span class="pl-c"># no horizontal adjustments</span> <span class="pl-s1">label_offset_y</span><span class="pl-c1">=</span><span class="pl-c1">-</span><span class="pl-c1">10</span>, <span class="pl-c"># move label upwards</span> <span class="pl-s1">label_line_height</span><span class="pl-c1">=</span><span class="pl-c1">0.8</span>, <span class="pl-c"># reduce line height</span> )</pre></div> <h4>zeromq-pyre &gt;= v0.3.4</h4> <p>Starting with version v0.3.4, <code>zeromq-pyre</code> is able to handle cases gracefully where it is not able to access any network interfaces. See <a href="https://github.com/pupil-labs/pupil/pull/2187" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2187/hovercard">#2187</a> for reference.</p> <h3>Plugin API</h3> <h4>Easy plugin icon customization - <a href="https://github.com/pupil-labs/pupil/pull/2196" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2196/hovercard">#2196</a></h4> <p>Plugins can now overwrite the following class attributes to customize the menu icon:</p> <ul> <li><code>icon_pos_delta</code>: relative positioning</li> <li><code>icon_size_delta</code>: relative font resizing</li> <li><code>icon_line_height</code> (multi-line icons only): line distance</li> </ul> <p>Requires pyglui v1.31.0 or higher</p> <h3>Real-time Network API</h3> <h4>Add <code>surf_to_dist_img_trans</code> and <code>dist_img_to_surf_trans</code> to surface events <a href="https://github.com/pupil-labs/pupil/pull/2168" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2168/hovercard">#2168</a></h4> <p>These two homographies are necessary to transform points from the <a href="https://docs.pupil-labs.com/core/terminology/#surface-aoi-coordinate-system" rel="nofollow">surface coordinate system</a> to the <a href="https://docs.pupil-labs.com/core/terminology/#coordinate-system" rel="nofollow">2d image space</a> of the scene camera, and <em>vice versa</em>. They have been available as part of the surface location exports in Pupil Player. With this release, they also become available to other plugins in Pupil Capture or via its Network API.</p> <p>Example plugin that access the new homographies in real-time:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import numpy as np from plugin import Plugin class Example(Plugin): def recent_events(self, events): # access surfaces or fallback to empty list if not available surfaces = events.get(&quot;surfaces&quot;, []) for surface in surfaces: # access raw homography data, a list of lists homography = surface[&quot;surf_to_dist_img_trans&quot;] # convert to a matrix homography = np.array(homography) # use homography, e.g. printing it print(f&quot;{surface['name']}: {homography}&quot;)"><pre><span class="pl-k">import</span> <span class="pl-s1">numpy</span> <span class="pl-k">as</span> <span class="pl-s1">np</span> <span class="pl-k">from</span> <span class="pl-s1">plugin</span> <span class="pl-k">import</span> <span class="pl-v">Plugin</span> <span class="pl-k">class</span> <span class="pl-v">Example</span>(<span class="pl-v">Plugin</span>): <span class="pl-k">def</span> <span class="pl-en">recent_events</span>(<span class="pl-s1">self</span>, <span class="pl-s1">events</span>): <span class="pl-c"># access surfaces or fallback to empty list if not available</span> <span class="pl-s1">surfaces</span> <span class="pl-c1">=</span> <span class="pl-s1">events</span>.<span class="pl-c1">get</span>(<span class="pl-s">"surfaces"</span>, []) <span class="pl-k">for</span> <span class="pl-s1">surface</span> <span class="pl-c1">in</span> <span class="pl-s1">surfaces</span>: <span class="pl-c"># access raw homography data, a list of lists</span> <span class="pl-s1">homography</span> <span class="pl-c1">=</span> <span class="pl-s1">surface</span>[<span class="pl-s">"surf_to_dist_img_trans"</span>] <span class="pl-c"># convert to a matrix</span> <span class="pl-s1">homography</span> <span class="pl-c1">=</span> <span class="pl-s1">np</span>.<span class="pl-c1">array</span>(<span class="pl-s1">homography</span>) <span class="pl-c"># use homography, e.g. printing it</span> <span class="pl-en">print</span>(<span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">surface</span>[<span class="pl-s">'name'</span>]<span class="pl-kos">}</span></span>: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">homography</span><span class="pl-kos">}</span></span>"</span>)</pre></div> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, such as <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a> or <a href="https://www.7-zip.org/" rel="nofollow">7-Zip</a> (both are available for free).</p> <h4>Supported operating systems</h4> <ul> <li>macOS Mojave 10.14, macOS Catalina 10.15, macOS Big Sur 11</li> <li>macOS Monterey 12 requires administrator privileges to access the video cameras</li> <li>Ubuntu 16.04 or newer</li> <li>Windows 10</li> </ul> <h4>Checksums</h4> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="$ shasum -a 256 pupil_v3.5* 41428173c33d07171bb7bf8f0c83b7debfabb66a1dfc7530d1ae302be70ccc9c pupil_v3.5-1-g1cdbe38_windows_x64.msi.rar 608aceaf4bf450254812b3fcaf8ea553450fcf2d626ae9c2ed0404348918d6ad pupil_v3.5-7-g651931ba_macos_x64.dmg 786feb5e937a68a21821ab6b6d86be915bcbb7c5e24c11664dbf8a95e5fcb8cc pupil_v3.5-8-g0c019f6_linux_x64.zip"><pre>$ shasum -a 256 pupil_v3.5<span class="pl-k">*</span> 41428173c33d07171bb7bf8f0c83b7debfabb66a1dfc7530d1ae302be70ccc9c pupil_v3.5-1-g1cdbe38_windows_x64.msi.rar 608aceaf4bf450254812b3fcaf8ea553450fcf2d626ae9c2ed0404348918d6ad pupil_v3.5-7-g651931ba_macos_x64.dmg 786feb5e937a68a21821ab6b6d86be915bcbb7c5e24c11664dbf8a95e5fcb8cc pupil_v3.5-8-g0c019f6_linux_x64.zip</pre></div> papr tag:github.com,2008:Repository/12173486/v3.4 2021-10-27T08:26:46Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v3.4</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a>! πŸ˜„</p> <h2>Overview</h2> <p>Pupil v3.4 introduces a new color scheme for pupil detection algorithms, improved gaze-estimation stability for frozen eye models, and a new IMU visualization and export plugin for Pupil Invisible recordings within Pupil Player.</p> <p><strong>New</strong></p> <ul> <li>Dynamic pye3d model confidence</li> <li>Pupil detection color scheme</li> <li>Added IMU Timeline plugin</li> </ul> <p><strong>Improved</strong></p> <ul> <li>Gaze-estimation stability with frozen eye models</li> <li>Annotation log message</li> <li>Prevent log flood in Surface Tracker related to finding homographies</li> <li>Support upgrading legacy recordings</li> </ul> <h2>New</h2> <h3>Dynamic pye3d model confidence</h3> <p>Pupil Core software version v3.4 ships the new <code>pye3d</code> version 0.1.1.</p> <p>In the previous versions of <em>pye3d</em> <code>model_confidence</code> was fixed to a value of <code>1.0</code>. Starting with version 0.1.0, <em>pye3d</em> assigns different <code>model_confidence</code> values based on the long-term model's parameters. Specifically, <code>model_confidence</code> is set to <code>1.0</code> by default and set to <code>0.1</code> if at least one model output exceeds its physiologically reasonable range. If the ranges are exceeded, it is likely that the model is either not fit well or the 2d input ellipse was a false detection.</p> <p>The assumed physiological bounds are:</p> <ul> <li>phi: [-80, 80] degrees</li> <li>theta: [-80, 80] degrees</li> <li>pupil diameter: [1.0, 9.0] mm</li> <li>eyeball center x: [-10, 10] mm</li> <li>eyeball center y: [-10, 10] mm</li> <li>eyeball center z: [20, 75] mm</li> </ul> <p>Phi and theta ranges are relative to the eye camera's optical axis. The eye ball center ranges are defined relative to the origin of the eye camera's 3d coordinate system.</p> <p>The <code>model_confidence</code> will be set to <code>0.0</code> if the gaze direction cannot be calculated.</p> <h3>Pupil detection color scheme</h3> <p>The new pupil detection color scheme makes use of the dynamic model confidence values by visualizing within-bounds and out-of-bounds models in different colors.</p> <p>Color legend:</p> <ul> <li><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/4fcb115f1f42c90a611f1a5e0833346f4a2fcbdc8901e1ef772a5d36ea2fbbc7/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4641433830302f3030303030303f746578743d2b"><img src="https://camo.githubusercontent.com/4fcb115f1f42c90a611f1a5e0833346f4a2fcbdc8901e1ef772a5d36ea2fbbc7/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4641433830302f3030303030303f746578743d2b" alt="#FAC800" data-canonical-src="https://via.placeholder.com/15/FAC800/000000?text=+" style="max-width: 100%;"></a> <code>#FAC800</code>: Pupil ellipse (2d)</li> <li><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/97f0d15ac174996e60174e03dac1d548977618eaa0a8a2fb19d4562fbc236359/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4639323530302f3030303030303f746578743d2b"><img src="https://camo.githubusercontent.com/97f0d15ac174996e60174e03dac1d548977618eaa0a8a2fb19d4562fbc236359/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4639323530302f3030303030303f746578743d2b" alt="#F92500" data-canonical-src="https://via.placeholder.com/15/F92500/000000?text=+" style="max-width: 100%;"></a> <code>#F92500</code>: Pupil ellipse (3d)</li> <li><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/da26b3825690bae5f8be2fc276daea23aea9e0cc81442d7f96f7f5eb7d058956/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f3037373746412f3030303030303f746578743d2b"><img src="https://camo.githubusercontent.com/da26b3825690bae5f8be2fc276daea23aea9e0cc81442d7f96f7f5eb7d058956/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f3037373746412f3030303030303f746578743d2b" alt="#0777FA" data-canonical-src="https://via.placeholder.com/15/0777FA/000000?text=+" style="max-width: 100%;"></a> <code>#0777FA</code>: Long-term model outline (within-bounds)</li> <li><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/962f788882d0a619df8012d34514338e4054eb71a2cd8fd6a0824f9dc1547ac5/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f3830453046462f3030303030303f746578743d2b"><img src="https://camo.githubusercontent.com/962f788882d0a619df8012d34514338e4054eb71a2cd8fd6a0824f9dc1547ac5/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f3830453046462f3030303030303f746578743d2b" alt="#80E0FF" data-canonical-src="https://via.placeholder.com/15/80E0FF/000000?text=+" style="max-width: 100%;"></a> <code>#80E0FF</code>: Long-term model outline (out-of-bounds)</li> </ul> <p><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/168390/125443494-f5aaf0e8-bcf6-4544-b218-79877531e81f.png"><img src="https://user-images.githubusercontent.com/168390/125443494-f5aaf0e8-bcf6-4544-b218-79877531e81f.png" alt="pupil detection color preview" style="max-width: 100%;"></a></p> <p><strong>Note:</strong> Even though the detected pupil ellipses fit the pupil well on the right-side picture, the model is outside of the physiological ranges defined above. This can lead to errors in gaze-direction and pupil-size estimates. You can improve such a model by looking into different directions.</p> <p>While the 3d debug window is opened, pye3d also visualizes the short- and ultra-long-term model outlines:</p> <ul> <li><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/22a5b885a93e0187ff5a3d946f49afff976b7d94f932980d76dc8c97c5de37f8/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4646423837362f3030303030303f746578743d2b"><img src="https://camo.githubusercontent.com/22a5b885a93e0187ff5a3d946f49afff976b7d94f932980d76dc8c97c5de37f8/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4646423837362f3030303030303f746578743d2b" alt="#FFB876" data-canonical-src="https://via.placeholder.com/15/FFB876/000000?text=+" style="max-width: 100%;"></a> <code>#FFB876</code>: Short-term model outline</li> <li><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c9600e878c225243cd6a7be0ea10fe62c1ea7f3a35ce44b3fb367274f8270efc/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4646354331362f3030303030303f746578743d2b"><img src="https://camo.githubusercontent.com/c9600e878c225243cd6a7be0ea10fe62c1ea7f3a35ce44b3fb367274f8270efc/68747470733a2f2f7669612e706c616365686f6c6465722e636f6d2f31352f4646354331362f3030303030303f746578743d2b" alt="#FF5C16" data-canonical-src="https://via.placeholder.com/15/FF5C16/000000?text=+" style="max-width: 100%;"></a> <code>#FF5C16</code>: Ultra-long-term model outline</li> </ul> <h3>Added IMU Timeline plugin - <a href="https://github.com/pupil-labs/pupil/pull/2151" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2151/hovercard">#2151</a></h3> <p>This is a new plugin designed to visualize and export IMU data available in Pupil Invisible recordings.</p> <p>In addition to the raw angular velocity and linear acceleration, the plugin also uses <a href="https://www.x-io.co.uk/res/doc/madgwick_internal_report.pdf" title="Madgwick's algorithm" rel="nofollow">Madgwick's algorithm</a> to estimate pitch and roll.</p> <p>To export the data, the plugin must be enabled and a raw data export must be triggered. Once the export is complete, there should be a <code>imu_timeline.csv</code> file with the following columns:</p> <table> <thead> <tr> <th align="center">Key</th> <th align="left">Description</th> </tr> </thead> <tbody> <tr> <td align="center"><code>imu_timestamp</code></td> <td align="left">Timestamp of the IMU reading</td> </tr> <tr> <td align="center"><code>world_index</code></td> <td align="left">Associated_frame: closest world video frame</td> </tr> <tr> <td align="center"><code>gyro_x</code></td> <td align="left">Angular velocity about the x axis in degrees/s</td> </tr> <tr> <td align="center"><code>gyro_y</code></td> <td align="left">Angular velocity about the y axis in degrees/s</td> </tr> <tr> <td align="center"><code>gyro_z</code></td> <td align="left">Angular velocity about the z axis in degrees/s</td> </tr> <tr> <td align="center"><code>accel_x</code></td> <td align="left">Linear acceleration along the x axis in G (9.80665 m/s^2)</td> </tr> <tr> <td align="center"><code>accel_y</code></td> <td align="left">Linear acceleration along the y axis in G (9.80665 m/s^2)</td> </tr> <tr> <td align="center"><code>accel_z</code></td> <td align="left">Linear acceleration along the z axis in G (9.80665 m/s^2)</td> </tr> <tr> <td align="center"><code>pitch</code></td> <td align="left">Orientation expressed as Euler angles</td> </tr> <tr> <td align="center"><code>roll</code></td> <td align="left">Orientation expressed as Euler angles</td> </tr> </tbody> </table> <h2>Improved</h2> <h3>Improve gaze-estimation stability with frozen eye models</h3> <p>Freezing the eye models is the best way to reduce noisy data when in a controlled environment. Prior to this release, freezing the eye model only affected eye ball center and pupil diameter measurements. Starting with this version, freezing the eye model also stabilizes gaze direction estimates.</p> <p>In order to adapt to slippage, <a href="https://docs.pupil-labs.com/developer/core/pye3d/#pye3d-pupil-detection" rel="nofollow"><code>pye3d</code> estimates eyeball positions on different time scales</a>. These serve specific downstream purposes. By default, the short-term model, which integrates only the most recent pupil observations, is used for calculating raw gaze-direction estimates.</p> <p>In highly controlled environments with few eye movements (e.g. subject uses head rest and is asked to fixate a static target), the most recent pupil observations might not be sufficient to build a stable short-term model. If this is the case, the gaze direction varies more than one would expect given the controlled environment.<br> Starting in <code>pye3d</code> version 0.1.0, the gaze direction will be inferred from the long-term model <em>if it is frozen</em>.</p> <p>Freezing the eye model is only recommended in controlled environments as this prevents the model from adapting to slippage. In turn, it is able to provide very stable data.</p> <h3>Improve annotation log message - <a href="https://github.com/pupil-labs/pupil/pull/2148" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2148/hovercard">#2148</a></h3> <p>When creating a new annotation, the log message will no longer show the Pupil Timestamp. Instead, Pupil Capture will show how old the annotation is, while Pupil Player will show the frame index of the world video.</p> <p>This change should help avoid the confusion associated with displaying <a href="https://docs.pupil-labs.com/core/terminology/#_2-pupil-time" rel="nofollow">Pupil Timestamp</a>.</p> <h3>Prevent log flood in Surface Tracker related to finding homographies - <a href="https://github.com/pupil-labs/pupil/pull/2150" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2150/hovercard">#2150</a></h3> <p>Previously, failing to locate a surface because of missing homographies would print an error message in the main window. In some cases, this would result in a flood of error logs.</p> <p>This change ensures that failures of such type are only issued once, and are written to the log file directly.</p> <h3>Support upgrading legacy recordings - <a href="https://github.com/pupil-labs/pupil/pull/2161" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2161/hovercard">#2161</a></h3> <p>Pupil Core software version v1.16 is no longer necessary to upgrade deprecated recording formats. Instead, Pupil v3.4 performs all necessary upgrades by itself. This release also includes a bug fix for an issue with pre v0.7.4 recordings.</p> <p>In <a href="https://github.com/pupil-labs/pupil/releases/v1.16">v1.16</a>, recordings made with <code>Pupil Capture v1.2</code> or earlier, and<br> <code>Pupil Mobile r0.22.x</code> or earlier have been deprecated due to the fact that these recordings are missing meta information that is required for the upgrade to the Pupil Player Recording Format 2.0. For details see "Missing Meta Information" in the <a href="https://github.com/pupil-labs/pupil/releases/v1.16">v1.16 release notes</a>.</p> <h2>Fixed</h2> <ul> <li>Use UTF-8 decoding for known UTF-8 encoded text files - <a href="https://github.com/pupil-labs/pupil/pull/2146" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2146/hovercard">#2146</a></li> <li>Update circle drawing to display correctly on Apple Silicon devices - <a href="https://github.com/pupil-labs/pupil/pull/2147" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2147/hovercard">#2147</a></li> <li>Fix crash on surface tracker export if filling the marker cache is not complete - <a href="https://github.com/pupil-labs/pupil/pull/2157" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2157/hovercard">#2157</a></li> <li>Fix surface tracker marker export to use export range - <a href="https://github.com/pupil-labs/pupil/pull/2158" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2158/hovercard">#2158</a></li> </ul> <h2>Developer notes</h2> <h3>Dependencies updates</h3> <p>Python dependencies can be updated using <code>pip</code> and the <code>requirements.txt</code> file:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <h4>pyglui v1.30.0</h4> <p>This new version of <code>pyglui</code> includes the menu icon for the new IMU timeline plugin as well as the new <code>Color_Legend</code> UI element.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="from pyglui import ui color_rgb_red = (1.0, 0.0, 0.0) label = &quot;red color label&quot; ui.Color_Legend(color_rgb_red, label)"><pre><span class="pl-k">from</span> <span class="pl-s1">pyglui</span> <span class="pl-k">import</span> <span class="pl-s1">ui</span> <span class="pl-s1">color_rgb_red</span> <span class="pl-c1">=</span> (<span class="pl-c1">1.0</span>, <span class="pl-c1">0.0</span>, <span class="pl-c1">0.0</span>) <span class="pl-s1">label</span> <span class="pl-c1">=</span> <span class="pl-s">"red color label"</span> <span class="pl-s1">ui</span>.<span class="pl-c1">Color_Legend</span>(<span class="pl-s1">color_rgb_red</span>, <span class="pl-s1">label</span>)</pre></div> <h4>pye3d v0.1.1</h4> <p>This version improves gaze-estimation stability for frozen eye models. For details see above and the <a href="https://github.com/pupil-labs/pye3d-detector/blob/master/CHANGELOG.md"><code>pye3d</code> changelog</a>.</p> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, such as <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a> or <a href="https://www.7-zip.org/" rel="nofollow">7-Zip</a> (both are available for free).</p> <h4>Supported operating systems</h4> <ul> <li>Windows 10</li> <li>Ubuntu 16.04+</li> <li>macOS Mojave 10.14+</li> <li>macOS Monterey 12 is <strong>not</strong> supported by this release</li> </ul> papr tag:github.com,2008:Repository/12173486/v3.3 2021-06-25T10:23:25Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v3.3</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a>! πŸ˜„</p> <h2>Overview</h2> <p>Pupil v3.3 focuses on improving software usability, stability and performance. We have made improvements to how product-specific plugins are loaded in Pupil Player, updated keyboard shortcuts, and fixed several stability issues. Additionally, the surface tracker now exports marker detection results.</p> <p>Note: Prior to this release,<code>diameter_3d</code> data for all Pupil Core v3 recordings <em>did not</em> have corneal refraction applied. See pye3d v0.0.7 notes below for updates and post-hoc fixes.</p> <h2>Improved</h2> <h3>pye3d v0.0.7</h3> <p>This release comes with our latest pye3d version including the following improvements</p> <ul> <li>Performance improvements - <a href="https://github.com/pupil-labs/pye3d-detector/pull/27" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pye3d-detector/pull/27/hovercard">#27</a></li> <li>Simplification of <code>Conic</code> parameter calculation - <a href="https://github.com/pupil-labs/pye3d-detector/pull/26" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pye3d-detector/pull/26/hovercard">#26</a></li> <li>Correctly apply corneal-refraction correction to <code>diameter_3d</code> result - <a href="https://github.com/pupil-labs/pye3d-detector/pull/28" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pye3d-detector/pull/28/hovercard">#28</a></li> </ul> <p>All pye3d versions prior to 0.0.7 do not correctly apply corneal refraction to the <code>diameter_3d</code> field. To check if you are affected by this bug, take a look at the <code>method</code> column of your <code>pupil_positions.csv</code> export.</p> <p>You have two options to get correctly calculated pupil size data:</p> <ol> <li>Use the <code>circle_3d_radius</code> values and multiply them by 2, or</li> <li>Re-run the post-hoc pupil detection in Pupil Player v3.3 or later</li> </ol> <h3>Marker detection export - <a href="https://github.com/pupil-labs/pupil/pull/2140" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2140/hovercard">#2140</a></h3> <p>The <a href="https://docs.pupil-labs.com/core/software/pupil-capture/#surface-tracking" rel="nofollow">Surface Tracker plugin</a> requires fiducial markers for defining and tracking areas of interest. Until now, the detection result of these was only stored as an intermediate result. With this release, the data is also stored as a CSV file next to other surface-tracking related exports.</p> <p>The data is exported to <code>surfaces/marker_detections.csv</code>.</p> <table> <thead> <tr> <th>Column name</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>world_index</td> <td>Scene video frame index</td> </tr> <tr> <td>marker_uid</td> <td>Label for identifying the marker</td> </tr> <tr> <td>corner_0/1/2/3_x/y</td> <td>Corner coordinates in pixels</td> </tr> </tbody> </table> <h3>Improve surface detection consistency - <a href="https://github.com/pupil-labs/pupil/pull/2139" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2139/hovercard">#2139</a></h3> <p>Surfaces can now be defined as long as one or more markers are detected in the scene video. Previously, this was only sufficient in some cases -- usually, at least two markers were needed.</p> <p>Note: Surface tracking works best if you use multiple markers spread-out over the area of interest to define and track your surface. The surface position export files contains information about how many markers were detected for each surface position. You can use this information as an estimation of the tracking stability.</p> <h3>Product-specific plugin loading in Pupil Player, part 2 - <a href="https://github.com/pupil-labs/pupil/pull/2125" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2125/hovercard">#2125</a></h3> <p>We continue work on finetuning the list of enabled plugins for Pupil Invisible recordings.</p> <p>Starting with this release we have removed the β€œPupil from recording” option, as there is no pupillometry data to load from Pupil Invisible recordings. Pupil Player will no longer generate an empty <code>pupil_positions.csv</code> file after export.</p> <h3>Keyboard shortcuts update - <a href="https://github.com/pupil-labs/pupil/pull/2129" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2129/hovercard">#2129</a></h3> <p>The default annotation keyboard shortcut was changed to <code>x</code> in both Pupil Capture and Pupil Player to avoid collision with other plugin shortcuts.</p> <p>We've posted tables of keyboard shortcuts for Pupil Capture and Pupil Player below. You can find these tables in our <a href="https://docs.pupil-labs.com/core/software/pupil-capture/#keyboard-shortcuts" title="Pupil Capture keyboard shortcuts" rel="nofollow">Capture</a> and <a href="https://docs.pupil-labs.com/core/software/pupil-player/#keyboard-shortcuts" title="Pupil Player keyboard shortcuts" rel="nofollow">Player</a> documentation.</p> <h2>Fixed</h2> <ul> <li>Fixed HMD calibration crashing Pupil Service - <a href="https://github.com/pupil-labs/pupil/pull/2120" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2120/hovercard">#2120</a></li> <li>Fixed Pupil Groups serialization issue - <a href="https://github.com/pupil-labs/pupil/pull/2124" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2124/hovercard">#2124</a></li> <li>Fixed toggling pupil detection on and off - <a href="https://github.com/pupil-labs/pupil/pull/2126" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2126/hovercard">#2126</a></li> <li>Fixed calibration area calculation errors - <a href="https://github.com/pupil-labs/pupil/pull/2128" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2128/hovercard">#2128</a></li> <li>Fixed video source replacement in eye process - <a href="https://github.com/pupil-labs/pupil/pull/2131" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2131/hovercard">#2131</a></li> <li>Fixed gaze visualization on Apple Silicon computers - <a href="https://github.com/pupil-labs/pupil/pull/2132" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2132/hovercard">#2132</a></li> <li>Fixed Pupil Invisible timestamp update procedure precision loss - <a href="https://github.com/pupil-labs/pupil/pull/2134" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2134/hovercard">#2134</a></li> <li>Made pye3d plugin's debug visualization colors consistent - <a href="https://github.com/pupil-labs/pupil/pull/2136" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2136/hovercard">#2136</a></li> <li>Fixed validation crash when not enough reference data is collected - <a href="https://github.com/pupil-labs/pupil/pull/2137" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2137/hovercard">#2137</a></li> <li>Fixed a crash when using Time Sync on macOS - <a href="https://github.com/pupil-labs/pupil/pull/2138" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2138/hovercard">#2138</a></li> </ul> <h2>Developer notes</h2> <h3>Dependencies updates</h3> <p>Python dependencies can be updated using <code>pip</code> and the <code>requirements.txt</code> file:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <p>We have specifically updated the version requirement for pye3d.</p> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, such as <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a> or <a href="https://www.7-zip.org/" rel="nofollow">7-Zip</a> (both are available for free).</p> papr tag:github.com,2008:Repository/12173486/v3.2 2021-03-21T18:56:20Z Pupil Capture, Player, and Service release (Updated) <p>We are pleased to announce the release of <strong>Pupil Core software v3.2</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a>! πŸ˜„</p> <h2>Overview</h2> <p>Pupil v3.2 focuses on quality-of-life and stability.</p> <h3>New</h3> <ul> <li>We added accuracy calculation and visualisation for VR/AR calibrations.</li> <li>Enable plugins in Pupil Player only if they are able to be used with the product that created the recordings.</li> </ul> <h3>Improved</h3> <ul> <li>Pupil Player has improved playback for Pupil Invisible recordings.</li> </ul> <h2>New</h2> <h3>Accuracy visualisation and calculation for HMD calibrations - <a href="https://github.com/pupil-labs/pupil/pull/2112" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2112/hovercard">#2112</a></h3> <p>Prior to this release, when performing HMD calibration, accuracy was not calculated nor visualised in Pupil Capture. This release makes accuracy calculation and visualisation consistent across setups.</p> <h3>Product specicific Pupil Player plugin loading - <a href="https://github.com/pupil-labs/pupil/pull/2100" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2100/hovercard">#2100</a></h3> <p>Load plugins in Pupil Player <em>only</em> if they are able to be used with the product that created the recordings.</p> <p>Pupil Player is a very flexible tool. It can load, playback, visualize, and export data from recordings made with Pupil Core, Pupil Mobile, and Pupil Invisible! Each of these products has different capabilities and data formats for their recordings.</p> <p>We have evaluated all Pupil Player plugins and their validity for each product. Starting with this release, Pupil Player will only enable plugins that are suitable for the active recording type.</p> <p>Here is a list of what plugins are available based on the product that generated the recording:</p> <table> <thead> <tr> <th align="center">Pupil Player Plugin</th> <th align="center">Pupil Core</th> <th align="center">Pupil Invisible</th> <th align="center">Pupil Mobile</th> </tr> </thead> <tbody> <tr> <td align="center">Blink detection</td> <td align="center">βœ”οΈ</td> <td align="center">βž–</td> <td align="center">βœ”οΈ</td> </tr> <tr> <td align="center">Fixation detection</td> <td align="center">βœ”οΈ</td> <td align="center">βž–</td> <td align="center">βœ”οΈ</td> </tr> <tr> <td align="center">Post-hoc pupil detection</td> <td align="center">βœ”οΈ</td> <td align="center">βž–</td> <td align="center">βœ”οΈ</td> </tr> <tr> <td align="center">Post-hoc gaze calibration</td> <td align="center">βœ”οΈ</td> <td align="center">βž–</td> <td align="center">βœ”οΈ</td> </tr> <tr> <td align="center">Pupil from recording</td> <td align="center">βœ”οΈ</td> <td align="center">βž–</td> <td align="center">βž–</td> </tr> <tr> <td align="center">Gaze from recording</td> <td align="center">βœ”οΈ</td> <td align="center">βœ”οΈ</td> <td align="center">βž–</td> </tr> </tbody> </table> <h2>Improved</h2> <h3>pye3d detection speed improvement</h3> <p>We are aware that pye3d requires more computational resources than its predecessor, and are actively working to improve the speed. For some users, it has become more difficult to reach a consistent detection rate of 200Hz.</p> <p>The first step we have taken to speed up pye3d is to disable some optional computations that are not currently used by Pupil Capture and Pupil Player (jump to developer notes for details).</p> <h2>Fixed</h2> <ul> <li>Support recordings with decoding issues - <a href="https://github.com/pupil-labs/pupil/pull/2107" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2107/hovercard">#2107</a></li> <li>Support recordings when an audio device fails - <a href="https://github.com/pupil-labs/pupil/pull/2103" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2103/hovercard">#2103</a></li> <li>Fixed laggy playback after seeking on Pupil Invisible recordings - <a href="https://github.com/pupil-labs/pupil/pull/2108" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2108/hovercard">#2108</a></li> </ul> <h2>Developer notes</h2> <h3>Dependencies updates</h3> <p>Python dependencies can be updated using <code>pip</code> and the <code>requirements.txt</code> file:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <h4>pye3d v0.0.6</h4> <p>pye3d v0.0.6 allows disabling optional computations. Pupil Core is not making use of these optional computations, they have been disabled, effectively reducing the computational load of pye3d pupil detections. Read about the changes <a href="https://github.com/pupil-labs/pye3d-detector/blob/v0.0.6/CHANGELOG.md" title="pye3d changelog">here</a>.</p> <h2>Release Note Updates</h2> <h3>15.03.2021 - v3.2-16</h3> <ul> <li>Fixes an issue causing Pupil Player to crash on Windows when enabling the eye video overlay or post-hoc pupil detection - <a href="https://github.com/pupil-labs/pupil/pull/2117" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2117/hovercard">#2117</a></li> </ul> <h3>21.03.2021 - v3.2-20</h3> <ul> <li>Improves HMD Calibration stability in Pupil Service, fixes <a href="https://github.com/pupil-labs/pupil/issues/2119" data-hovercard-type="issue" data-hovercard-url="/pupil-labs/pupil/issues/2119/hovercard">#2119</a> - <a href="https://github.com/pupil-labs/pupil/commit/eb8c2324f3fd558858ce33f3816972d93e02fcc6">eb8c232</a></li> </ul> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, such as <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a> or <a href="https://www.7-zip.org/" rel="nofollow">7-Zip</a> (both are available for free).</p> papr tag:github.com,2008:Repository/12173486/v3.1 2021-02-10T10:43:03Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v3.1</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a>! πŸ˜„</p> <h2>Motivation</h2> <p>Pupil Core software is now compatible with macOS 11 Big Sur! In addition, we have added support in Pupil Player for 200Hz gaze data downloaded from Pupil Cloud.</p> <h2>Improvements</h2> <h3>macOS 11 Big Sur compatibility - <a href="https://github.com/pupil-labs/pupil/pull/2086" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2086/hovercard">#2086</a>, <a href="https://github.com/pupil-labs/pupil/pull/2087" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2087/hovercard">#2087</a>, <a href="https://github.com/pupil-labs/pupil/pull/2090" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2090/hovercard">#2090</a>, <a href="https://github.com/pupil-labs/pupil/pull/2095" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2095/hovercard">#2095</a></h3> <p>macOS 11 Big Sur introduced backwards-incompatible changes that caused earlier versions of Pupil Core and other software to not run properly.</p> <p>There is currently only a single Python version, Python 3.9.1, that is fully compatible with macOS Big Sur. As a result, our new macOS Pupil Core bundle ships with this new Python version. This may have an effect on user plugin dependencies. For more information, check out the developer notes below.</p> <h3>Support for Pupil Cloud's 200Hz gaze recordings - <a href="https://github.com/pupil-labs/pupil/pull/2082" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2082/hovercard">#2082</a></h3> <p>Due to the computational limitations on the Companion Device, gaze data is recorded at 66Hz. Recent updates to Pupil Cloud automatically "upgrades" the gaze data recordings when they are uploaded to <a href="https://cloud.pupil-labs.com" title="Pupil Cloud" rel="nofollow">Pupil Cloud</a> providing you with 200Hz gaze data. In version 3.1, Pupil Player can read and export the new data.</p> <p>Note: Recordings that were downloaded prior to this Pupil Cloud update need to be re-downloaded in order to include the 200Hz gaze data.</p> <h2>Changes</h2> <h3>Visual calibration marker appearance - <a href="https://github.com/pupil-labs/pupil/pull/2095" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2095/hovercard">#2095</a></h3> <p>The visual appearance of the calibration marker changed slightly, due to how we render the calibration marker on screen. The change was necessary to support screen-based calibrations on Apple Silicon Macs. As a result, the marker edges do not appear as smooth as the previous version. The overall design and detection process remains the same.</p> <h2>Bug Fixes</h2> <ul> <li>Gracefully handle Pupil Invisible video files starting with a null frame - <a href="https://github.com/pupil-labs/pupil/pull/2077" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2077/hovercard">#2077</a>, <a href="https://github.com/pupil-labs/pupil/pull/2089" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2089/hovercard">#2089</a></li> <li>Handle zero-byte video files when looking up Pupil Mobile intrinsics <a href="https://github.com/pupil-labs/pupil/pull/2083" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2083/hovercard">#2083</a></li> </ul> <h2>Developer notes</h2> <h3>Dependencies updates</h3> <p>Python dependencies can be updated using <code>pip</code> and the <code>requirements.txt</code> file:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <h4>Support latest GLEW 2.2 - <a href="https://github.com/pupil-labs/pyglui/pull/117" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pyglui/pull/117/hovercard">pyglui #117</a></h4> <p>This release also adds support for the latest version of GLEW. This means that the <code>pyglui</code> dependency needs to be updated to version <code>1.29</code>.</p> <h4>pye3d v0.0.5</h4> <p>We have included <code>pye3d==0.0.5</code> which fixes compatibility issues with <code>numpy==1.20</code> and <code>scikit-learn==0.24.1</code>.</p> <h3>macOS bundle shipping with Python 3.9.1</h3> <p>To simplify the usage of the application bundles, each bundle is shipped with their own Python environment. All plugins and their dependencies will run in the context of this environment.</p> <p>Especially compiled dependencies, e.g. pyrealsense2, are always compiled against a specific Python version. If you are running custom user plugins, you will have to reinstall compiled dependencies in order to make them work with the new Python version.</p> <p>Bundles ship with the following Python versions:</p> <ul> <li>macOS: Python 3.9.1</li> <li>Windows bundle: Python 3.6</li> <li>Linux bundle: Python 3.6</li> </ul> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, such as <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a> or <a href="https://www.7-zip.org/" rel="nofollow">7-Zip</a> (both are available for free).</p> <h4>macOS compatibility - <a href="https://github.com/pupil-labs/pupil/pull/2086" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2086/hovercard">#2086</a>, <a href="https://github.com/pupil-labs/pupil/pull/2087" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2087/hovercard">#2087</a></h4> <p><em>Note</em>: This is the first release to support macOS 11 Big Sur. We no longer support macOS 10.13 High Sierra since the <a href="https://brew.sh/" rel="nofollow">macOS package manager homebrew</a> no longer provides pre-compiled binaries for Pupil Core software dependencies.</p> papr tag:github.com,2008:Repository/12173486/v3.0 2021-01-07T09:23:21Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v3.0</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a>! πŸ˜„</p> <h2>Motivation</h2> <p>We are excited to introduce <a href="https://github.com/pupil-labs/pye3d-detector/" title="pye3d Github reposiotry"><code>pye3d</code></a> - a complete overhaul of the 3D pupil detector employed by Pupil Core software. In building <a href="https://github.com/pupil-labs/pye3d-detector/" title="pye3d Github reposiotry"><code>pye3d</code></a>, we have left no stone unturned, reimagining many of the algorithmic building blocks constituting the final gaze-estimation pipeline. <a href="https://github.com/pupil-labs/pye3d-detector/" title="pye3d Github reposiotry"><code>pye3d</code></a> is the result of three years of hard work and we are excited to get it into your hands!</p> <h2>Improvements</h2> <h3>Improved built-in 3D pupil detector - <a href="https://github.com/pupil-labs/pupil/pull/2011" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2011/hovercard">#2011</a>, <a href="https://github.com/pupil-labs/pupil/pull/2065" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2065/hovercard">#2065</a></h3> <p><a href="https://github.com/pupil-labs/pye3d-detector/" title="pye3d Github reposiotry"><code>pye3d</code></a> implements a novel eye-model fitting strategy that incorporates a corneal refraction-correction step, accounting for nonlinear effects in ocular optics. Gaze estimates and pupil diameter estimates are now more accurate than ever before [2,3]. Thanks to a new sphere center estimation methodology [3], it is also considerably faster than our previous 3D detector [1] in regards to fitting robust and accurate eye models. Read more about how it works in our <a href="https://docs.pupil-labs.com/developer/core/pye3d" rel="nofollow">documentation</a>.</p> <h4>Academic references</h4> <p><code>[1]</code> <a href="https://www.researchgate.net/publication/264658852_A_fully-automatic_temporal_approach_to_single_camera_glint-free_3D_eye_model_fitting" rel="nofollow">L. Świrski and N. A. Dodgson. A Fully-Automatic, Temporal Approach to Single Camera, Glint-Free 3D Eye Model Fitting. In Proceedings of ECEM 2013. "L. Świrski and N. A. Dodgson. A Fully-Automatic, Temporal Approach to Single Camera, Glint-Free 3D Eye Model Fitting. In Proceedings of ECEM 2013."</a><br> <code>[2]</code> <a href="https://www.researchgate.net/publication/325634500_A_novel_approach_to_single_camera_glint-free_3D_eye_model_fitting_including_corneal_refraction" title="K. Dierkes, M. Kassner, A. Bullling, A novel approach to single camera, glint-free 3D eye model fitting including corneal refraction. In ETRA ’18: Symposium on Eye Tracking Research and Applications, 2018." rel="nofollow">K. Dierkes, M. Kassner, A. Bullling, A novel approach to single camera, glint-free 3D eye model fitting including corneal refraction. In ETRA ’18: Symposium on Eye Tracking Research and Applications, 2018.</a><br> <code>[3]</code> <a href="https://www.researchgate.net/publication/333490770_A_fast_approach_to_refraction-aware_eye-model_fitting_and_gaze_prediction" title="K. Dierkes, M. Kassner, A. Bulling. A fast approach to refraction-aware eye-model fitting and gaze prediction. In ETRA ’19: Symposium on Eye Tracking Research and Applications, 2019." rel="nofollow">K. Dierkes, M. Kassner, A. Bulling. A fast approach to refraction-aware eye-model fitting and gaze prediction. In ETRA ’19: Symposium on Eye Tracking Research and Applications, 2019.</a></p> <h2>Changes</h2> <h3>Removal of old Pupil 3D detector</h3> <p>With this release, we also stop the maintainance of the previous 3D detector. Starting with the new <code>2.0</code> release, our <a href="https://github.com/pupil-labs/pupil-detectors" title="pupil-detectos Github repository"><code>pupil-detectors</code></a> package no longer includes the previous 3D detector. This allows us to remove Ceres as a dependency, making the project much easier to maintain and build from source.</p> <p>Should you rely on this detector, you can still download <a href="https://github.com/pupil-labs/pupil/releases?after=v2.6" title="previous Pupil Core software releases">previous Pupil Core software releases</a> or install previous <a href="https://pypi.org/project/pupil-detectors/#history" title="pupil-detectors PyPI project" rel="nofollow"><code>pupil-detectors</code> via PyPI</a>.</p> <h2>Bug Fixes</h2> <ul> <li>Fixed issue that would leave an unresponsive eye window due to plugin crash - <a href="https://github.com/pupil-labs/pupil/pull/2059" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2059/hovercard">#2059</a></li> <li>Fixed crash on canceling single marker calibration window mode - <a href="https://github.com/pupil-labs/pupil/pull/2062" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2062/hovercard">#2062</a></li> <li>Fixed crash on post-hoc pupil detection when the frame count is zero - <a href="https://github.com/pupil-labs/pupil/pull/2063" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2063/hovercard">#2063</a></li> </ul> <h2>Developer notes</h2> <h3>Network API Changes</h3> <h4>Reworked pupil detector plugin and network API</h4> <p>In this release we reworked the <a href="https://github.com/pupil-labs/pupil/blob/master/pupil_src/shared_modules/pupil_detector_plugins/detector_base_plugin.py">pupil detector plugin base class</a>. It is now easier than ever to implement a custom pupil detector and accompanying pupil detector plugin.</p> <p>We have also introduced breaking changes to our network API for pupil detector plugins. Here is a list of possible notification payload descriptions that are handled by detector plugins:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="# Notification for enabling/disabling any or all pupil detector plugins { 'topic': 'notify.pupil_detector.set_enabled', 'subject': 'pupil_detector.set_enabled', 'value': &lt;is_enabled: bool&gt;, 'eye_id': &lt;eye_id: int&gt;, # optional; possible values: 0 or 1 'detector_plugin_class_name': &lt;detector_plugin_class_name: str&gt;, # optional } # Notification for setting the Region-Of-Interest (ROI) for any or all pupil detector plugins { 'topic': 'notify.pupil_detector.set_roi', 'subject': 'pupil_detector.set_roi', 'value': &lt;roi: (min_x: int, min_y: int, max_x: int, max_y: int)&gt;, 'eye_id': &lt;eye_id: int&gt;, # optional; possible values: 0 or 1 'detector_plugin_class_name': &lt;detector_plugin_class_name: str&gt;, # optional } # Notification for updating a partial set of pupil detector properties for a specific pupil detector plugin { 'topic': 'notify.pupil_detector.set_properties', 'subject': 'pupil_detector.set_properties', 'values': &lt;detector_properties: dict&gt;, 'eye_id': &lt;eye_id: int&gt;, # required; possible values: 0 or 1 'detector_plugin_class_name': &lt;detector_plugin_class_name: str&gt;, # required } # Notification for requesting pupil detector properties broadcast for any or all pupil detector plugins { 'topic': 'notify.pupil_detector.broadcast_properties', 'subject': 'pupil_detector.broadcast_properties', 'eye_id': &lt;eye_id: int&gt;, # optional; possible values: 0 or 1 'detector_plugin_class_name': &lt;detector_plugin_class_name: str&gt;, # optional }"><pre><span class="pl-c"># Notification for enabling/disabling any or all pupil detector plugins</span> { <span class="pl-s">'topic'</span>: <span class="pl-s">'notify.pupil_detector.set_enabled'</span>, <span class="pl-s">'subject'</span>: <span class="pl-s">'pupil_detector.set_enabled'</span>, <span class="pl-s">'value'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">is_enabled</span>: <span class="pl-s1">bool</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'eye_id'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">eye_id</span>: <span class="pl-s1">int</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># optional; possible values: 0 or 1</span> <span class="pl-s">'detector_plugin_class_name'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">detector_plugin_class_name</span>: <span class="pl-s1">str</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># optional</span> } <span class="pl-c"># Notification for setting the Region-Of-Interest (ROI) for any or all pupil detector plugins</span> { <span class="pl-s">'topic'</span>: <span class="pl-s">'notify.pupil_detector.set_roi'</span>, <span class="pl-s">'subject'</span>: <span class="pl-s">'pupil_detector.set_roi'</span>, <span class="pl-s">'value'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">roi</span>: (<span class="pl-s1">min_x</span>: <span class="pl-s1">int</span>, <span class="pl-s1">min_y</span>: <span class="pl-s1">int</span>, <span class="pl-s1">max_x</span>: <span class="pl-s1">int</span>, <span class="pl-s1">max_y</span>: <span class="pl-s1">int</span>)<span class="pl-c1">&gt;</span>, <span class="pl-s">'eye_id'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">eye_id</span>: <span class="pl-s1">int</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># optional; possible values: 0 or 1</span> <span class="pl-s">'detector_plugin_class_name'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">detector_plugin_class_name</span>: <span class="pl-s1">str</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># optional</span> } <span class="pl-c"># Notification for updating a partial set of pupil detector properties for a specific pupil detector plugin</span> { <span class="pl-s">'topic'</span>: <span class="pl-s">'notify.pupil_detector.set_properties'</span>, <span class="pl-s">'subject'</span>: <span class="pl-s">'pupil_detector.set_properties'</span>, <span class="pl-s">'values'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">detector_properties</span>: <span class="pl-s1">dict</span><span class="pl-c1">&gt;</span>, <span class="pl-s">'eye_id'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">eye_id</span>: <span class="pl-s1">int</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># required; possible values: 0 or 1</span> <span class="pl-s">'detector_plugin_class_name'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">detector_plugin_class_name</span>: <span class="pl-s1">str</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># required</span> } <span class="pl-c"># Notification for requesting pupil detector properties broadcast for any or all pupil detector plugins</span> { <span class="pl-s">'topic'</span>: <span class="pl-s">'notify.pupil_detector.broadcast_properties'</span>, <span class="pl-s">'subject'</span>: <span class="pl-s">'pupil_detector.broadcast_properties'</span>, <span class="pl-s">'eye_id'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">eye_id</span>: <span class="pl-s1">int</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># optional; possible values: 0 or 1</span> <span class="pl-s">'detector_plugin_class_name'</span>: <span class="pl-c1">&lt;</span><span class="pl-s1">detector_plugin_class_name</span>: <span class="pl-s1">str</span><span class="pl-c1">&gt;</span>, <span class="pl-c"># optional</span> }</pre></div> <p>For more information about custom pupil detector plugins, please read the <a href="https://docs.pupil-labs.com/developer/core/plugin-api/#pupil-detection-plugins" rel="nofollow">documentation</a>. You can also see examples of custom pupil detection plugins <a href="https://github.com/pupil-labs/pupil-community/blob/master/README.md#pupil-detector-plugins">here</a>.</p> <p>For an example script that showcases the network API, please consult <a href="https://github.com/pupil-labs/pupil-helpers/blob/master/python/pupil_detector_network_api.py">this helper script</a>.</p> <h4>Changed 3D pupil datum format</h4> <p><code>pye3d</code> uses a slightly different pupil format than our previous 3D detector. Because <code>pye3d</code> continously updates a single model instead of fitting multiple parallel ones, the new 3D pupil datum no longer contains the following keys: <code>model_id</code> and <code>model_birth_timestamp</code>.</p> <p>Our latest <a href="https://github.com/pupil-labs/hmd-eyes/releases/tag/v1.4">Hmd-eyes release</a> handles this by falling back to "0" and 0.0, respectively.</p> <h4>Binocular 3D gaze data with string-only keys - <a href="https://github.com/pupil-labs/pupil/pull/2068" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2068/hovercard">#2068</a></h4> <p>In order to be compatible with the msgpack-python <code>v1.0.0</code> (specifially the new <code>strict_map_key=True</code> default), this release uses strings only as dictionary keys for all msgpack-encoded data that is published via the Network API.</p> <p>This change affects primarily binocular 3D gaze data which used to contain integer dictionary keys.</p> <h3>Raw Data Exporter - Optional <code>model_id</code> key - <a href="https://github.com/pupil-labs/pupil/pull/2061" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2061/hovercard">#2061</a></h3> <p>Some of the fields in the pupil datum related to the 3D model no longer exist in <code>pye3d</code> (see above). This change ensures the raw data export handles missing fields and outputs a compatible csv file.</p> <h3>Updated <code>msgpack</code> dependency to version <code>1.0</code> - <a href="https://github.com/pupil-labs/pupil/pull/2068" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2068/hovercard">#2068</a></h3> <p>We continue to streamline and simplify the installation of Pupil Core dependencies. In this release we updated the <code>msgpack</code> to the latest <code>1.0</code>. To ensure you have the latest required versions of all dependencies, please install them via <code>requirements.txt</code>.</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <h3>Added support for custom receiver high-water mark for HMD Streaming source - <a href="https://github.com/pupil-labs/pupil/pull/2058" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2058/hovercard">#2058</a></h3> <p>This change adds the ability to set a custom ZMQ high watermark value for HMD Streaming source. This gives users more control over the streaming behaviour when using Pupil Core with an HMD headset.</p> <h3>Added <code>launcher_process.should_stop </code> notification handling <a href="https://github.com/pupil-labs/pupil/pull/2070" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2070/hovercard">#2070</a></h3> <p>This change adds the ability to request stopping Capture, Player or Service with the same notification.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import zmq import msgpack # create and connect PUB socket to IPC pub_socket = zmq.Socket(zmq.Context(), zmq.PUB) pub_socket.connect(ipc_pub_url) subject = &quot;launcher_process.should_stop&quot; topic = &quot;notify.&quot; + subject payload = { 'topic': topic, 'subject': subject, } pub_socket.send_string(topic, flags=zmq.SNDMORE) pub_socket.send(msgpack.dumps(payload, use_bin_type=True))"><pre><span class="pl-k">import</span> <span class="pl-s1">zmq</span> <span class="pl-k">import</span> <span class="pl-s1">msgpack</span> <span class="pl-c"># create and connect PUB socket to IPC</span> <span class="pl-s1">pub_socket</span> <span class="pl-c1">=</span> <span class="pl-s1">zmq</span>.<span class="pl-c1">Socket</span>(<span class="pl-s1">zmq</span>.<span class="pl-c1">Context</span>(), <span class="pl-s1">zmq</span>.<span class="pl-c1">PUB</span>) <span class="pl-s1">pub_socket</span>.<span class="pl-c1">connect</span>(<span class="pl-s1">ipc_pub_url</span>) <span class="pl-s1">subject</span> <span class="pl-c1">=</span> <span class="pl-s">"launcher_process.should_stop"</span> <span class="pl-s1">topic</span> <span class="pl-c1">=</span> <span class="pl-s">"notify."</span> <span class="pl-c1">+</span> <span class="pl-s1">subject</span> <span class="pl-s1">payload</span> <span class="pl-c1">=</span> { <span class="pl-s">'topic'</span>: <span class="pl-s1">topic</span>, <span class="pl-s">'subject'</span>: <span class="pl-s1">subject</span>, } <span class="pl-s1">pub_socket</span>.<span class="pl-c1">send_string</span>(<span class="pl-s1">topic</span>, <span class="pl-s1">flags</span><span class="pl-c1">=</span><span class="pl-s1">zmq</span>.<span class="pl-c1">SNDMORE</span>) <span class="pl-s1">pub_socket</span>.<span class="pl-c1">send</span>(<span class="pl-s1">msgpack</span>.<span class="pl-c1">dumps</span>(<span class="pl-s1">payload</span>, <span class="pl-s1">use_bin_type</span><span class="pl-c1">=</span><span class="pl-c1">True</span>))</pre></div> <h3>Simplified running from source on Windows - <a href="https://github.com/pupil-labs/pupil/pull/2073" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2073/hovercard">#2073</a></h3> <p>We have removed the necessity to run Pupil from source using the <code>run_&lt;app&gt;.bat</code> files on Windows. Instead of extending the PATH environment variable via the <code>.bat</code> file, we extend it via the application launcher. This also makes it easier to attach a debugger, e.g. via Visual Studio Code.</p> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, such as <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a> or <a href="https://www.7-zip.org/" rel="nofollow">7-Zip</a> (both are available for free).</p> <h4>macOS (11) Big Sur compatibility - <a href="https://github.com/pupil-labs/pupil/issues/2079" data-hovercard-type="issue" data-hovercard-url="/pupil-labs/pupil/issues/2079/hovercard">#2079</a></h4> <p><em>Note</em>: Pupil Core is not currently supported on Mac OS Big Sur. We aim to release a compatability update within the next few weeks. πŸ‘·</p> papr tag:github.com,2008:Repository/12173486/v3.0.dev1 2020-12-09T09:37:54Z v3.0.dev1 <p>v3.0.dev1</p> papr tag:github.com,2008:Repository/12173486/v2.6 2020-11-16T16:58:36Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v2.6</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a> πŸ˜„</p> <h2>Motivation</h2> <p>In v2.6, we are taking a big step towards our modularity goal. We now support custom user pupil detector plugins. This change makes it easier than ever for you to modify the existing pupil detection algorithms or to build your own! You will no longer have to run Pupil Core software from source to get started with your custom pupil detector! <a href="https://docs.pupil-labs.com/developer/core/plugin-api/#pupil-detection-plugins" rel="nofollow">Read more about it in our documentation</a>.</p> <h2>Improvements</h2> <h3>Support custom pupil detection plugins - <a href="https://github.com/pupil-labs/pupil/pull/2033" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2033/hovercard">#2033</a></h3> <p>You can now run your own pupil detection plugins that run in the eye processes. These plugins can be used to implement custom algorithms for extracting pupillometry data from the eye images and feeding it to the rest of the gaze mapping pipeline.</p> <p>Pupil detection plugins are supported in Pupil Capture, Pupil Player, and Pupil Service. Similar to regular user plugins, custom pupil detection plugins should be placed inside <code>pupil_capture_settings/plugins</code> for Pupil Capture, <code>pupil_player_settings/plugins</code> for Pupil Player, and <code>pupil_service_settings/plugin</code> for Pupil Service. The plugins are automatically loaded when the applications starts.</p> <p><a href="https://docs.pupil-labs.com/developer/core/plugin-api/#pupil-detection-plugins" rel="nofollow">Read more about it in our documentation</a>.</p> <h3>Support HMD Streaming Source in eye process - <a href="https://github.com/pupil-labs/pupil/pull/2052" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2052/hovercard">#2052</a></h3> <p>We have added support for using HMD Streaming Source in the eye process. This also adds support for BGR and Gray frame format for HMD streams.</p> <h3>Support Pupil Invisible recording format v1.4 - <a href="https://github.com/pupil-labs/pupil/pull/2054" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2054/hovercard">#2054</a></h3> <p>This new recording format has been introduced in Pupil Companion <code>1.0.0</code>. This version provides support for the OnePus 8 phone and Android 11. On the OnePlus 8, eye videos will be h264-encoded.</p> <h2>Bug Fixes</h2> <ul> <li>Removed <code>import *</code> statements - <a href="https://github.com/pupil-labs/pupil/pull/2036" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2036/hovercard">#2036</a></li> <li>Fixed typo in circle detector benchmark - <a href="https://github.com/pupil-labs/pupil/pull/2038" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2038/hovercard">#2038</a></li> <li>Fixed CPU graph and UI refresh performance - <a href="https://github.com/pupil-labs/pupil/pull/2040" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2040/hovercard">#2040</a>, <a href="https://github.com/pupil-labs/pupil/pull/2041" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2041/hovercard">#2041</a></li> <li>Fixed gaze with negative z-component - <a href="https://github.com/pupil-labs/pupil/pull/2043" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2043/hovercard">#2043</a></li> <li>Fixed issue when minimizing 3D pupil detector debug window on Windows - <a href="https://github.com/pupil-labs/pupil/pull/2047" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2047/hovercard">#2047</a></li> <li>Fixed UVC camera auto-selection priority in case of multiple pattern matches - <a href="https://github.com/pupil-labs/pupil/pull/2051" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2051/hovercard">#2051</a></li> </ul> <h2>Developer Notes</h2> <h3>Added ability to stop eye process plugins via notifications - <a href="https://github.com/pupil-labs/pupil/pull/2039" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2039/hovercard">#2039</a></h3> <p>Another small improvement for eye process plugin management in this release is the ability to stop plugins via notifications. This gives better control over the list of plugins running in the eye process.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="import zmq import msgpack # class name of the plugin to stop plugin_name = &quot;...&quot; # create and connect PUB socket to IPC pub_socket = zmq.Socket(zmq.Context(), zmq.PUB) pub_socket.connect(ipc_pub_url) for eye_id in (0, 1): subject = &quot;stop_eye_plugin&quot; topic = &quot;notify.&quot; + subject payload = { 'topic': topic 'subject': subject, 'target': f&quot;eye{eye_id}&quot;, 'name': plugin_name, } pub_socket.send_string(topic, flags=zmq.SNDMORE) pub_socket.send(msgpack.dumps(payload, use_bin_type=True))"><pre><span class="pl-k">import</span> <span class="pl-s1">zmq</span> <span class="pl-k">import</span> <span class="pl-s1">msgpack</span> <span class="pl-c"># class name of the plugin to stop</span> <span class="pl-s1">plugin_name</span> <span class="pl-c1">=</span> <span class="pl-s">"..."</span> <span class="pl-c"># create and connect PUB socket to IPC</span> <span class="pl-s1">pub_socket</span> <span class="pl-c1">=</span> <span class="pl-s1">zmq</span>.<span class="pl-c1">Socket</span>(<span class="pl-s1">zmq</span>.<span class="pl-c1">Context</span>(), <span class="pl-s1">zmq</span>.<span class="pl-c1">PUB</span>) <span class="pl-s1">pub_socket</span>.<span class="pl-c1">connect</span>(<span class="pl-s1">ipc_pub_url</span>) <span class="pl-k">for</span> <span class="pl-s1">eye_id</span> <span class="pl-c1">in</span> (<span class="pl-c1">0</span>, <span class="pl-c1">1</span>): <span class="pl-s1">subject</span> <span class="pl-c1">=</span> <span class="pl-s">"stop_eye_plugin"</span> <span class="pl-s1">topic</span> <span class="pl-c1">=</span> <span class="pl-s">"notify."</span> <span class="pl-c1">+</span> <span class="pl-s1">subject</span> <span class="pl-s1">payload</span> <span class="pl-c1">=</span> { <span class="pl-s">'topic'</span>: <span class="pl-s1">topic</span> <span class="pl-s">'subject'</span>: <span class="pl-s1">subject</span>, <span class="pl-s">'target'</span>: <span class="pl-s">f"eye<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">eye_id</span><span class="pl-kos">}</span></span>"</span>, <span class="pl-s">'name'</span>: <span class="pl-s1">plugin_name</span>, } <span class="pl-s1">pub_socket</span>.<span class="pl-c1">send_string</span>(<span class="pl-s1">topic</span>, <span class="pl-s1">flags</span><span class="pl-c1">=</span><span class="pl-s1">zmq</span>.<span class="pl-c1">SNDMORE</span>) <span class="pl-s1">pub_socket</span>.<span class="pl-c1">send</span>(<span class="pl-s1">msgpack</span>.<span class="pl-c1">dumps</span>(<span class="pl-s1">payload</span>, <span class="pl-s1">use_bin_type</span><span class="pl-c1">=</span><span class="pl-c1">True</span>))</pre></div> <h3>Added <code>requirements.txt</code> file - <a href="https://github.com/pupil-labs/pupil/pull/2029" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2029/hovercard">#2029</a></h3> <p>We continue to streamline and simplify the installation of Pupil Core dependencies. You can now use the <a href="https://github.com/pupil-labs/pupil/blob/master/requirements.txt"><code>requirements.txt</code></a> file from the root of the <code>pupil</code> repository to install and update all Python dependencies.</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="python -m pip install --upgrade pip wheel pip install -r requirements.txt"><pre>python -m pip install --upgrade pip wheel pip install -r requirements.txt</pre></div> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, e.g. <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a>.</p> papr tag:github.com,2008:Repository/12173486/v2.5 2020-10-20T09:00:17Z Pupil Capture, Player, and Service release <p>We are pleased to announce the release of <strong>Pupil Core software v2.5</strong>!</p> <p>Download the latest bundle (scroll down to the end of the release notes and see <strong>Assets</strong>).</p> <p>Please feel free to get in touch with feedback and questions via the <a href="https://pupil-labs.com/chat" rel="nofollow">#pupil channel on Discord</a> πŸ˜„</p> <h2>Motivation</h2> <p>Pupil v2.5 focuses on further improvements to software stability. We have fixed multiple issues that prevented very old recordings from being opened in Pupil Player.</p> <h2>Improvements</h2> <h3>Replacing internal GLFW bindings with pyGLFW - <a href="https://github.com/pupil-labs/pupil/pull/2015" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2015/hovercard">#2015</a></h3> <p>In this release we replaced the internal <code>glfw.py</code> bindings to GLFW with the external <a href="https://github.com/FlorianRhiem/pyGLFW"><code>pyGLFW</code></a> package. This change simplifies our dependency list, making easier to install <code>GLFW</code> on Windows.</p> <h3>New default camera intrinsics - <a href="https://github.com/pupil-labs/pupil/pull/2023" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2023/hovercard">#2023</a></h3> <p>We use camera intrinsics in multiple places to transform between the 2d distorted image space and the 3d undistorted camera space. With this release, we have updated the default scene camera intrinsics to perform this tansformation more accuractely at the image borders.</p> <p><strong>Note:</strong> Each camera is slightly different. Therefore, it is recommended to run your own <a href="https://docs.pupil-labs.com/core/software/pupil-capture/#camera-intrinsics-estimation" rel="nofollow">camera intrinsics estimation</a> to get the best possible transformations for your camera.</p> <h2>Bug Fixes</h2> <ul> <li>Fixed a crash in Pupil Player when attempting to visualize invalid data - <a href="https://github.com/pupil-labs/pupil/pull/2021" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2021/hovercard">#2021</a></li> <li>Fixed an edge-case when handling recordings with negative time jumps - <a href="https://github.com/pupil-labs/pupil/pull/2026" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2026/hovercard">#2026</a>, <a href="https://github.com/pupil-labs/pupil/pull/2028" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2028/hovercard">#2028</a></li> <li>Fixed a frame drop issue on macOS when windows were occluded - <a href="https://github.com/pupil-labs/pupil/pull/2027" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2027/hovercard">#2027</a></li> <li>Fixed an issue that caused instabilities when starting the Head Pose tracker - <a href="https://github.com/pupil-labs/pupil/pull/2022" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2022/hovercard">#2022</a></li> <li>Surface Tracker stability improvements - <a href="https://github.com/pupil-labs/pupil/pull/2025" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2025/hovercard">#2025</a></li> </ul> <h2>Developer Notes</h2> <h3>Improved Observable class - <a href="https://github.com/pupil-labs/pupil/pull/2022" data-hovercard-type="pull_request" data-hovercard-url="/pupil-labs/pupil/pull/2022/hovercard">#2022</a></h3> <p>Improvements to the Observable class enable you to observe monkey patched methods (e.g. replaced methods that were not in the original class definition). Additionally, trying to add private methods as observers now fails with a more explicit error.</p> <h3>Changed Requirements</h3> <p>Please install the new external <code>glfw</code> dependency:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="pip install glfw"><pre class="notranslate"><code>pip install glfw </code></pre></div> <h3 id="user-content-downloads">Downloads</h3> <p>To open the RAR-archive on Windows, you will need to use decompression software, e.g. <a href="https://www.win-rar.com/predownload.html?spV=true&amp;subD=true&amp;f=winrar-x64-590.exe" rel="nofollow">WinRAR</a>.</p> papr