File "detection03.html"

Full Path: /home/analogde/www/New/update/detection03.html
File size: 5.14 KB
MIME-type: text/html
Charset: utf-8

<!doctype html>
<head>
	<title>motion detection</title>

	

</head>
<body>
	<video autoplay id="vid"></video>
<canvas id="canvas" width="640" height="480" style="border:1px solid #d3d3d3;"></canvas><br>


<script type="text/javascript">

    var video = document.querySelector("#vid");
    var canvas = document.querySelector('#canvas');
    var ctx = canvas.getContext('2d');
    var localMediaStream = null;
    //
    var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    var prevImageData = ctx.getImageData(0,0,canvas.width,canvas.height);
    //
    //
    var onCameraFail = function (e) {
        console.log('Camera did not work.', e);
    };

    function transformGrab() {
        //
        console.log("transform grab");
        //
        imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        //
        var input = document.querySelector('#setPixelSize');
        var p = parseFloat(input.value);
        console.log("p = " + p);
        pixellate(p);
    }

    function pixellate(size) {
        var x, y;
        for(x = 0; x < canvas.width; x += size) {
            for(y = 0; y < canvas.height; y += size) {
                //console.log("tick", y * canvas.width + x)
                ctx.fillStyle = getPixel(imageData, x, y);
                ctx.fillRect(x, y, size, size);
            }
        }
    }
     
    function getPixel(imageData, x, y) {
        var r, g, b, a, offset = x * 4 + y * 4 * imageData.width;
        r = imageData.data[offset];
        g = imageData.data[offset + 1];
        b = imageData.data[offset + 2];
        a = imageData.data[offset + 3];
        return "rgba(" + r + "," + g + "," + b + "," + a + ")";
    }

    function getPixel2(imageData, prevImageData, x, y) {
        //
        var cr, cg, cb, ca, pr, pg, pb, pa, offset = x * 4 + y * 4 * imageData.width;
        cr = imageData.data[offset];
        cg = imageData.data[offset + 1];
        cb = imageData.data[offset + 2];
        ca = imageData.data[offset + 3];
        //
        pr = prevImageData.data[offset];
        pg = prevImageData.data[offset + 1];
        pb = prevImageData.data[offset + 2];
        pa = prevImageData.data[offset + 3];
        //
        var diff = Math.abs(pr-cr) + Math.abs(pg-cg) + Math.abs(pb-cb);
        var str = new Object();
        if(diff > 20) {
            //str = "rgba(" + 255 + "," + 0 + "," + 0 + "," + 255 + ")";
            str.r = cr;
            str.g = cg;
            str.b = cb;
            str.a = 255;
        } else {
            //str = "rgba(" + 255 + "," + 255 + "," + 255 + "," + 255 + ")";
            str.r = 555;
            str.g = 555;
            str.b = 555;
            str.a = 255;
        }
        str.d = diff;
        //
        return str;
        //return "rgba(" + (255-(cr-pr)) + "," + (255-(cg-pg)) + "," + (255-(cb-pb)) + "," + 255 + ")";
    }

    function motionDetect() {
        //
        imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        //
        var size = 5;
        var startPoint = (Math.PI/180)*0;
        var endPoint = (Math.PI/180)*360;
        //
        ctx.clearRect(0,0,canvas.width, canvas.height);
        //
        var x, y;
        for(x = 0; x < canvas.width; x += size) {
            for(y = 0; y < canvas.height; y += size) {
                //
               //var obj1 = getPixel2(imageData, prevImageData, x, y);
               var cob = getPixel2(imageData, prevImageData, x, y);
               //console.log(cob.g);
               if(cob.g < 555) {
                    ctx.fillStyle = "rgba(" + cob.r + "," + cob.g + "," + cob.b + "," + 255 + ")";
                    //ctx.fillRect(x, y, size, size);
                    ctx.beginPath();
                    ctx.arc(x,y,cob.d/10, startPoint, endPoint,true);
                    ctx.fill();
                    ctx.closePath();
                } else {
                    //ctx.fillStyle = "rgba(" + cob.r + "," + cob.g + "," + cob.b + "," + 255 + ")";
                    //ctx.fillRect(x, y, size, size);
                }

               //console.log("obj", obj1.r);
            }
        }
        // update previous frame image data
        prevImageData = imageData;
    }

   function drawVideoAtCanvas(obj, context) {
        window.setInterval(function() { 
            // draw video image to canvas
            context.drawImage(obj, 0, 0);
            // update pixel data
            //imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
            // pixellate
            //var input = document.querySelector('#setPixelSize');
            //var p = parseFloat(input.value);
            //pixellate(p);
            //
            motionDetect();
            //
        }, 60);
        //
        
    }


    video.addEventListener('play', function() { drawVideoAtCanvas(video, ctx) }, false);


    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
    window.URL = window.URL || window.webkitURL;
    navigator.getUserMedia({video:true}, function (stream) {
        video.src = window.URL.createObjectURL(stream);
        localMediaStream = stream;
    }, onCameraFail);

</script>
</body>

</html>