remote-calibrator 0.2.2-beta.2 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/lib/RemoteCalibrator.min.js +1 -1
  3. package/lib/RemoteCalibrator.min.js.LICENSE.txt +1 -1
  4. package/lib/RemoteCalibrator.min.js.map +1 -1
  5. package/media/measureDistance.png +0 -0
  6. package/media/panel.png +0 -0
  7. package/media/screenSize.png +0 -0
  8. package/media/trackGaze.png +0 -0
  9. package/package.json +4 -4
  10. package/src/components/sound.js +2 -2
  11. package/src/css/main.css +7 -6
  12. package/src/screenSize.js +1 -1
  13. package/src/WebGazer4RC/.gitattributes +0 -10
  14. package/src/WebGazer4RC/LICENSE.md +0 -15
  15. package/src/WebGazer4RC/README.md +0 -142
  16. package/src/WebGazer4RC/gnu-lgpl-v3.0.md +0 -163
  17. package/src/WebGazer4RC/gplv3.md +0 -636
  18. package/src/WebGazer4RC/package-lock.json +0 -1133
  19. package/src/WebGazer4RC/package.json +0 -28
  20. package/src/WebGazer4RC/src/dom_util.mjs +0 -27
  21. package/src/WebGazer4RC/src/facemesh.mjs +0 -150
  22. package/src/WebGazer4RC/src/index.mjs +0 -1213
  23. package/src/WebGazer4RC/src/mat.mjs +0 -301
  24. package/src/WebGazer4RC/src/params.mjs +0 -29
  25. package/src/WebGazer4RC/src/pupil.mjs +0 -109
  26. package/src/WebGazer4RC/src/ridgeReg.mjs +0 -104
  27. package/src/WebGazer4RC/src/ridgeRegThreaded.mjs +0 -161
  28. package/src/WebGazer4RC/src/ridgeWeightedReg.mjs +0 -125
  29. package/src/WebGazer4RC/src/ridgeWorker.mjs +0 -135
  30. package/src/WebGazer4RC/src/util.mjs +0 -348
  31. package/src/WebGazer4RC/src/util_regression.mjs +0 -240
  32. package/src/WebGazer4RC/src/worker_scripts/mat.js +0 -306
  33. package/src/WebGazer4RC/src/worker_scripts/util.js +0 -398
  34. package/src/WebGazer4RC/test/regression_test.js +0 -182
  35. package/src/WebGazer4RC/test/run_tests_and_server.sh +0 -24
  36. package/src/WebGazer4RC/test/util_test.js +0 -60
  37. package/src/WebGazer4RC/test/webgazerExtract_test.js +0 -40
  38. package/src/WebGazer4RC/test/webgazer_test.js +0 -160
  39. package/src/WebGazer4RC/test/www_page_test.js +0 -41
@@ -1,28 +0,0 @@
1
- {
2
- "name": "webgazer",
3
- "version": "2.1.0",
4
- "private": "true",
5
- "repository": {
6
- "type": "git",
7
- "url": "https://github.com/brownhci/WebGazer.git"
8
- },
9
- "license": "GPL-3.0-or-later",
10
- "main": "dist/webgazer.js",
11
- "module": "src/index.mjs",
12
- "files": [
13
- "/dist",
14
- "/src"
15
- ],
16
- "keywords": [
17
- "webgazer",
18
- "eyetracking",
19
- "webcam"
20
- ],
21
- "dependencies": {
22
- "@tensorflow-models/facemesh": "^0.0.5",
23
- "@tensorflow/tfjs": "^3.8.0",
24
- "localforage": "^1.9.0",
25
- "numeric": "1.2.6",
26
- "regression": "2.0.1"
27
- }
28
- }
@@ -1,27 +0,0 @@
1
- // helper functions
2
-
3
- /**
4
- * Provides requestAnimationFrame in a cross browser way.
5
- */
6
- window.requestAnimFrame = (function() {
7
- return window.requestAnimationFrame ||
8
- window.webkitRequestAnimationFrame ||
9
- window.mozRequestAnimationFrame ||
10
- window.oRequestAnimationFrame ||
11
- window.msRequestAnimationFrame ||
12
- function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
13
- return window.setTimeout(callback, 1000/60);
14
- };
15
- })();
16
-
17
- /**
18
- * Provides cancelRequestAnimationFrame in a cross browser way.
19
- */
20
- window.cancelRequestAnimFrame = (function() {
21
- return window.cancelCancelRequestAnimationFrame ||
22
- window.webkitCancelRequestAnimationFrame ||
23
- window.mozCancelRequestAnimationFrame ||
24
- window.oCancelRequestAnimationFrame ||
25
- window.msCancelRequestAnimationFrame ||
26
- window.clearTimeout;
27
- })();
@@ -1,150 +0,0 @@
1
- const FacemeshModel = require('@tensorflow-models/facemesh');
2
- /**
3
- * Constructor of TFFaceMesh object
4
- * @constructor
5
- * */
6
- const TFFaceMesh = function() {
7
- //Backend options are webgl, wasm, and CPU.
8
- //For recent laptops WASM is better than WebGL.
9
- //TODO: This hack makes loading the model block the UI. We should fix that
10
- // this.model = (async () => { return await facemesh.load({"maxFaces":1}) })();
11
- this.model = FacemeshModel.load({ "maxFaces": 1 });
12
- this.predictionReady = false;
13
- };
14
-
15
- // Global variable for face landmark positions array
16
- TFFaceMesh.prototype.positionsArray = null;
17
-
18
- /**
19
- * Isolates the two patches that correspond to the user's eyes
20
- * @param {Canvas} imageCanvas - canvas corresponding to the webcam stream
21
- * @param {Number} width - of imageCanvas
22
- * @param {Number} height - of imageCanvas
23
- * @return {Object} the two eye-patches, first left, then right eye
24
- */
25
- TFFaceMesh.prototype.getEyePatches = async function(imageCanvas, width, height) {
26
-
27
- if (imageCanvas.width === 0) {
28
- return null;
29
- }
30
-
31
- // Load the MediaPipe facemesh model.
32
- const model = await this.model;
33
-
34
- // Pass in a video stream (or an image, canvas, or 3D tensor) to obtain an
35
- // array of detected faces from the MediaPipe graph.
36
- const predictions = await model.estimateFaces(imageCanvas);
37
-
38
- if (predictions.length == 0){
39
- return false;
40
- }
41
-
42
- // Save positions to global variable
43
- this.positionsArray = predictions[0].scaledMesh;
44
- const positions = this.positionsArray;
45
-
46
- // Fit the detected eye in a rectangle. [20200626 xk] not clear which approach is better
47
- // https://raw.githubusercontent.com/tensorflow/tfjs-models/master/facemesh/mesh_map.jpg
48
-
49
- // // Maintains a relatively stable shape of the bounding box at the cost of cutting off parts of
50
- // // the eye when the eye is tilted.
51
- // var leftOriginX = Math.round(positions[130][0]);
52
- // var leftOriginY = Math.round(positions[27][1]);
53
- // var leftWidth = Math.round(positions[243][0] - leftOriginX);
54
- // var leftHeight = Math.round(positions[23][1] - leftOriginY);
55
- // var rightOriginX = Math.round(positions[463][0]);
56
- // var rightOriginY = Math.round(positions[257][1]);
57
- // var rightWidth = Math.round(positions[359][0] - rightOriginX);
58
- // var rightHeight = Math.round(positions[253][1] - rightOriginY);
59
-
60
- // Won't really cut off any parts of the eye, at the cost of warping the shape (i.e. height/
61
- // width ratio) of the bounding box.
62
- var leftOriginX = Math.round(Math.min(positions[247][0], positions[130][0], positions[25][0]));
63
- var leftOriginY = Math.round(Math.min(positions[247][1], positions[27][1], positions[190][1]));
64
- var leftWidth = Math.round(Math.max(positions[190][0], positions[243][0], positions[233][0]) - leftOriginX);
65
- var leftHeight = Math.round(Math.max(positions[25][1], positions[23][1], positions[112][1]) - leftOriginY);
66
- var rightOriginX = Math.round(Math.min(positions[414][0], positions[463][0], positions[453][0]));
67
- var rightOriginY = Math.round(Math.min(positions[414][1], positions[257][1], positions[467][1]));
68
- var rightWidth = Math.round(Math.max(positions[467][0], positions[359][0], positions[255][0]) - rightOriginX);
69
- var rightHeight = Math.round(Math.max(positions[341][1], positions[253][1], positions[255][1]) - rightOriginY);
70
-
71
- if (leftWidth === 0 || rightWidth === 0){
72
- console.log('an eye patch had zero width');
73
- return null;
74
- }
75
-
76
- if (leftHeight === 0 || rightHeight === 0){
77
- console.log('an eye patch had zero height');
78
- return null;
79
- }
80
-
81
- // Start building object to be returned
82
- var eyeObjs = {};
83
-
84
- var leftImageData = imageCanvas.getContext('2d').getImageData(leftOriginX, leftOriginY, leftWidth, leftHeight);
85
- eyeObjs.left = {
86
- patch: leftImageData,
87
- imagex: leftOriginX,
88
- imagey: leftOriginY,
89
- width: leftWidth,
90
- height: leftHeight
91
- };
92
-
93
- var rightImageData = imageCanvas.getContext('2d').getImageData(rightOriginX, rightOriginY, rightWidth, rightHeight);
94
- eyeObjs.right = {
95
- patch: rightImageData,
96
- imagex: rightOriginX,
97
- imagey: rightOriginY,
98
- width: rightWidth,
99
- height: rightHeight
100
- };
101
-
102
- this.predictionReady = true;
103
-
104
- return eyeObjs;
105
- };
106
-
107
- /**
108
- * Returns the positions array corresponding to the last call to getEyePatches.
109
- * Requires that getEyePatches() was called previously, else returns null.
110
- */
111
- TFFaceMesh.prototype.getPositions = function () {
112
- return this.positionsArray;
113
- }
114
-
115
- /**
116
- * Reset the tracker to default values
117
- */
118
- TFFaceMesh.prototype.reset = function(){
119
- console.log( "Unimplemented; Tracking.js has no obvious reset function" );
120
- }
121
-
122
- /**
123
- * Draw TF_FaceMesh_Overlay
124
- */
125
- TFFaceMesh.prototype.drawFaceOverlay= function(ctx, keypoints){
126
- // If keypoints is falsy, don't do anything
127
- if (keypoints) {
128
- ctx.fillStyle = '#32EEDB';
129
- ctx.strokeStyle = '#32EEDB';
130
- ctx.lineWidth = 0.5;
131
-
132
- for (let i = 0; i < keypoints.length; i++) {
133
- const x = keypoints[i][0];
134
- const y = keypoints[i][1];
135
-
136
- ctx.beginPath();
137
- ctx.arc(x, y, 1 /* radius */, 0, 2 * Math.PI);
138
- ctx.closePath();
139
- ctx.fill();
140
- }
141
- }
142
- }
143
-
144
- /**
145
- * The TFFaceMesh object name
146
- * @type {string}
147
- */
148
- TFFaceMesh.prototype.name = 'TFFaceMesh';
149
-
150
- export default TFFaceMesh;