Skip to content

Releases: EasyEyes/remote-calibrator

Version 0.6.0

14 Apr 01:11
Compare
Choose a tag to compare

Added

  • Performance testing. Using .performance() to execute a series of computation demanding tasks for the CPU and GPU, including filling randoms numbers into an array of length of 5000 (repeatedly for a second), generating random numbers (repeatedly for a second), computing for and rendering stressful 2D canvas graphics. Results are reported as computeArrayFillMHz, computeRandomMHz, idealFps (canvas FPS without any heavy tasks), and stressFps in the returned value.
  • Check CPU cores with .concurrency. If the browser doesn't support, the value will be -1.
  • When showGazer is true, calling .getGazeNow() renders a fading-out red gaze dot on the screen.
  • .gazeLearning() takes one extra optional argument (e.g., { click: true, move: false }) to turn on/off learning from only click or move events.

Changed

  • (Breaking) The timestamp field of all results uses performance.now() instead of Date.
  • When calibrating gaze, the positions of the dot to click follow a certain clockwise sequence instead of randomized. Four more positions - 2 degrees to the top, right, bottom, and left of the screen center - are added. The center dot now appears three times, and each requires doubled click amount. The new positions (2 degrees relative to the center) depend on the viewing distance. Thus, measuring it first is highly recommended. Otherwise, 40 cm is assumed.

Fixed

  • Typos of internal parameter naming.
  • The video element (for gaze and distance tracking) may occlude the click to other content even when hidden.
  • undefined displayed as the results of some homepage example functions.
  • Frozen nudger when pausing distance tracking while nudger is on.

Version 0.5.1

24 Feb 02:33
1f4c48d
Compare
Choose a tag to compare

Update license text, dependencies, and translations.

Version 0.5.0

20 Feb 04:49
Compare
Choose a tag to compare

This major release introduces new features including latency measure, viewing distance nudging, and have the participants help check the accuracy of RC results.

Added

  • Latency for gaze and viewing distance tracking. The latency is calculated by comparing the timestamps of the moment when the video stream is fed into the model for estimation and when the result is produced and recorded. You can access it by data.value.latencyMs where data is the argument passed into the callback function of .trackGaze() and .trackDistance().
  • Viewing distance monitoring. 4 new options for .trackDistance() are added: desiredDistanceCm (default undefined), desiredDistanceTolerance (default 1.2), desiredDistanceMonitor (default false), and desiredDistanceMonitorCancelable (default false). If a number is given for desiredDistanceCm, the program will check the viewing distance and call for "Move CLOSER" or "Move FURTHER" to the participants, until the participant moves to the desired distance, and the experiment will resume. Setting desiredDistanceMonitor to true will repeat this process through the rest of the experiment.
  • debug and i18n options of .panel(). When set to true, The first one adds some useful options, e.g., to skip calibration, for you to use when debugging. The second one adds a language picker for participants to choose their own languages (the default choice is always the one set on initiation).
  • "Redo last response" button for the blind spot test.
  • Measurement repeatability check for the blind spot test. The data will be accepted only if the right eye measurement and the left eye measurement are close enough, i.e. their averages disagree by less than 20%. If not, the measurement will repeat until the averages agree with each other. After that, the median of all measures will be chosen as the final result.
  • The raw data of the blind spot test is also saved now. The new data structure is { value, timestamp, method, raw }. The raw data is an array of all kept measures (a measure is deleted after the participant chose to redo the last response).
  • Display the actual code used to trigger functions on the demo page (https://calibrator.app).
  • For viewing distance, one can now drag or use arrow keys to control the position of the red dot. To switch between control mode (proposed by EasyEyes) and automatic mode (Li et al., 2018), one can set control to true or false for .trackDistance() and .measureDistance() options.
  • Have the participant help check the accuracy of the calibration. In screen size, viewing distance, and distance tracking options, adding check: true will insert an extra routine after the participant finishes the respective calibration. They will be asked if they have a ruler or tape measure, and to measure corresponding lengths (if possible) to be compared to the Remote Calibrator results. (This feature is currently only available in English for version 0.5.0.)
  • Camera permission request and detection. If the camera permission is not yet granted, a popup window will tell participants why we need it and enable it when asked in the browser. If the camera access is denied, the current code can catch it and display a message, instead of running into fatal errors.
  • showCancelButton option for .measureDistance() and .trackDistance() functions.
  • Set the default virtual object for screen size calibration by the defaultObject option in .screenSize().

Changed

  • Discard old blind spot measures when rejected. A popup shows reasons and hints for participants.
  • Update near point tracking to be more accurate. The webcam is assumed to be at the top middle of the screen.
  • Rename "Head Tracking" to "Distance Tracking" globally.
  • Polish translations.
  • Elements, like .calibration-background, have a higher z-index to avoid being covered by external elements.
  • Repeat testing time of the blind spot test for viewing distance and distance tracking is changed to 1.
  • Submission key of blind spot test changed from Space to Enter.
  • Customized import of animate.css to reduce the package size.
  • Customized files field in package.json to boost installation performance.
  • Rename "Cancel" button to "Restart this calibration".

Fixed

  • Correct warning log when calling distance tracking lifecycle functions, while distance tracking is not initialized.

Removed

  • Redo last response button for blind spot measure.
  • Blind spot moving the dot will not wrap the position.

Version 0.3.0

16 Oct 05:35
Compare
Choose a tag to compare

Added

i18n!

  • Internationalization! A full list of supported languages can be found at https://docs.google.com/spreadsheets/d/1UFfNikfLuo8bSromE34uWDuJrMPFiJG3VpoQKdCGkII/edit#gid=0.
  • A few new getters related to languages:
    • .userLanguage
    • .language (e.g., en-US, zh-CN)
    • .languageNameEnglish (e.g., English, Chinese (Simplified))
    • .languageNameNative (e.g., 简体中文)
    • .languageDirection (LTR or RTL)
    • .languagePhraseSource (e.g., Denis Pelli & Peiling Jiang 2021.10.10)
    • .languageData gets the whole data history of languages.
    • .supportedLanguages gets an array of supported languages.
  • .newLanguage(lang = 'en-US') to set a new language for the calibrator.
  • Allows researchers to set language on initialization using the language option. Set to AUTO (default) will let the calibrator go with the user language.
  • .isMobile getter.
  • Call ._environment() and ._displaySize() automatically when initializing the calibrator.
  • Instructions in the viewing distance measurement (and head tracking setup) is scrollable to avoid overlapping with the canvas on small screen sizes.
  • Automatically minimize the mobile address bar when a calibration task starts.
  • Safer type check for callback functions to avoid fatal errors.
  • Version console log on loading.

Changed

  • Improved UI and performance for small screens and mobile devices.
  • Take Return instead of Space for confirming screen size measurement.
  • (Breaking) .fullScreenData getter is changed to .fullscreenData.
  • Viewing distance methods become BlindSpot or FaceMesh.

Fixed

  • Participants can now continue (restart) calibration tasks after quitting at the middle of the last one.
  • Various fixes and updates for the panel.
  • Gaze and head trackers stop working on Safari when the video preview is turned off. (#49)
  • Fatal error due to cannot detect devices for VR headsets.
  • Remove wrongly labelled camera icon for measuring viewing distance task in the panel.

Removed

  • (Breaking) .environment() and .displaySize(). Values can be accessed directly throw the getters.
  • The responsive arrow in the screen size calibration with credit card.

Version 0.2.3

06 Oct 02:53
Compare
Choose a tag to compare

This version contains breaking changes to the gaze tracking function. More specifically, .trackGaze([options, [callback]]) is changed to .trackGaze([options, [callbackOnCalibrationEnd, [callbackTrack]]]).

Added

  • (Breaking) Callback function of gaze tracking is split into two functions: callbackOnCalibrationEnd that will only be called once when calibration ends, and callbackTrack that will be called continuously as the tracking runs (with data parameter passed in).
  • sparkle option (default true) for measuring and tracking viewing distance. The red dot sparkles at 10 Hz to make it more prominent when absent from the view.
  • Ignore the Return key in screen size calibration.

Fixed

  • Panel final callback function is called multiple times if gaze tracking is the last calibration task.

Version 0.2.2

05 Oct 01:38
Compare
Choose a tag to compare

Added

  • Sound feedback (2000 Hz, 0.05 s) for responses in blind spot test.
  • showNextButton option for panel. If set to false (default), automatically proceed to the final callback after finishing the last task.
  • nextHeadline and nextDescription in panel options to change panel text after finishing all calibrations.
  • Blind spot floating instructions move along with the crosshair.
  • Add credit text for blind spot test and credit card trick on the corresponding pages.

Changed

  • Changed "cross" to "crosshair" in default task descriptions.
  • Slightly thinner crosshair line width.
  • When not tracking near point, nearPointCm is stored as [null, null] instead of null.

Fixed

  • Floating instructions don't show in blind spot test for head tracking, when near point is turned off.
  • Dependency security issues.

Version 0.2.1

15 Sep 02:49
Compare
Choose a tag to compare

Minor fixes and updates.

Version 0.2.0

15 Sep 01:50
Compare
Choose a tag to compare

This is a major release with breaking changes.

Added

  • .showNearPoint() to control the display of the near point on the screen (a green square).
  • .removePanel() and .resetPanel() functions to better control the panel element.
  • Animate transitions of the gaze calibration dot.

Changed

  • (Breaking) .panel() now becomes an async function and takes one more argument - resolveOnFinish that can be resolved after the "Done" button is pressed. This process is independent from the original callback function and provides one more way to deal with the end state of the calibration panel. The logic might be used for all other calibration and tracking functions soon.
  • The square part of the USB connectors will totally disappear when hovering on the slider and changing their sizes.
  • Default decimal place value (customized by decimalPlace in options) for head (1) and gaze (0) tracking data.
  • (Breaking) showVideo and showGazer parameters will only be effective after the initial calibration process. Participants would be able to see these visual feedbacks during the calibration even the parameters were set to false.
  • Refined design and default text of panel element.
  • Refined design of screen size measurement interface. It now works much better on smartphones.
  • Default instruction text in various functions.
  • A lighter default background color, changed from #ddd to #ccc.

Fixed

  • Avoid setting up multiple head trackings at the same time.
  • Cannot track near point when video is hidden.
  • After the initial measurement in head tracking, the float instruction block shrink to an ellipse.
  • No data error for video element when tracking viewing distance.
  • Panel final callback is not checked before running, which may cause error.
  • Video feedback box may be selected unexpectedly during gaze calibration.

Removed

  • Pop-up in various functions. Instructions will be displayed side-by-side with the actual tasks.
  • Disable checking gaze accuracy and setting thresholdDeg. Waiting for more robust solutions.

Version 0.1.1

25 Aug 03:22
Compare
Choose a tag to compare

Minor update.

Version 0.1.0

25 Aug 02:49
Compare
Choose a tag to compare

This release brings virtual buttons on the screen for smartphones, all data access, and a brand new design of the panel element, which becomes even more customizable.

Added

  • Add virtual clickable buttons to be fully functional on mobile devices without a keyboard.

Changed

  • (Breaking) In the parameter, options, and extension names, the unit name is capitalized only for the first letter, including Px, Cm, In, Ppi, Deg, e.g., RemoteCalibrator.viewingDistanceCm.
  • Redesigned panel for setting up calibration pipeline.
  • Changed default descriptions and instructions for various functions.
  • Viewing distance tracking is rephrased to Head Tracking in various context. The function handle .trackDistance() stays unchanged.

Fixed

  • Wrong keyword for framerate option for .trackDistance() in readme.