Tastenkunst/brfv4_javascript_examples

brfManager.update is not a function?

neonleo opened this issue · 0 comments

I am using the minimalWebcam.html and try to put the blink detection code from blink_detection.js.
And had to override the handleTrackingResults (js\BRFv4DemoMinimalWebcam.js)
However, it show:
Uncaught TypeError: brfManager.update is not a function
So how to fix this issue?

`handleTrackingResults = function (
brfManager, // namespace
imageData, // tracked faces
draw // canvas context to draw into
) {

        brfManager.update(imageData);

        draw.clear();

        // Face detection results: a rough rectangle used to start the face tracking.

        draw.drawRects(brfManager.getAllDetectedFaces(), false, 1.0, 0x00a1ff, 0.5);
        draw.drawRects(brfManager.getMergedDetectedFaces(), false, 2.0, 0xffd200, 1.0);

        var faces = brfManager.getFaces(); // default: one face, only one element in that array.

        for (var i = 0; i < faces.length; i++) {

            var face = faces[i];

            if (face.state === brfv4.BRFState.FACE_TRACKING) {

                // simple blink detection

                // A simple approach with quite a lot false positives. Fast movement can't be
                // handled properly. This code is quite good when it comes to
                // staring contest apps though.

                // It basically compares the old positions of the eye points to the current ones.
                // If rapid movement of the current points was detected it's considered a blink.

                var v = face.vertices;

                if (_oldFaceShapeVertices.length === 0) storeFaceShapeVertices(v);

                var k, l, yLE, yRE;

                // Left eye movement (y)

                for (k = 36, l = 41, yLE = 0; k <= l; k++) {
                    yLE += v[k * 2 + 1] - _oldFaceShapeVertices[k * 2 + 1];
                }
                yLE /= 6;

                // Right eye movement (y)

                for (k = 42, l = 47, yRE = 0; k <= l; k++) {
                    yRE += v[k * 2 + 1] - _oldFaceShapeVertices[k * 2 + 1];
                }

                yRE /= 6;

                var yN = 0;

                // Compare to overall movement (nose y)

                yN += v[27 * 2 + 1] - _oldFaceShapeVertices[27 * 2 + 1];
                yN += v[28 * 2 + 1] - _oldFaceShapeVertices[28 * 2 + 1];
                yN += v[29 * 2 + 1] - _oldFaceShapeVertices[29 * 2 + 1];
                yN += v[30 * 2 + 1] - _oldFaceShapeVertices[30 * 2 + 1];
                yN /= 4;

                var blinkRatio = Math.abs((yLE + yRE) / yN);

                if ((blinkRatio > 12 && (yLE > 0.4 || yRE > 0.4))) {
                    console.log("blink " + blinkRatio.toFixed(2) + " " + yLE.toFixed(2) + " " +
                        yRE.toFixed(2) + " " + yN.toFixed(2));

                    blink();
                }

                // Let the color of the shape show whether you blinked.

                var color = 0x00a0ff;

                if (_blinked) {
                    color = 0xffd200;
                }

                // Face Tracking results: 68 facial feature points.

                draw.drawTriangles(face.vertices, face.triangles, false, 1.0, color, 0.4);
                draw.drawVertices(face.vertices, 2.0, false, color, 0.4);

                toastr.info("BRFv4 - advanced - face tracking - simple blink" +
                    "detection.\nDetects an eye  blink: " + (_blinked ? "Yes" : "No"));

                storeFaceShapeVertices(v);
            }
        }

    };

    function blink() {
        _blinked = true;

        if (_timeOut > -1) { clearTimeout(_timeOut); }

        _timeOut = setTimeout(resetBlink, 150);
    }

    function resetBlink() {
        _blinked = false;
    }

    function storeFaceShapeVertices(vertices) {
        for (var i = 0, l = vertices.length; i < l; i++) {
            _oldFaceShapeVertices[i] = vertices[i];
        }
    }

    var _oldFaceShapeVertices = [];
    var _blinked = false;
    var _timeOut = -1;`