diff --git a/samples/face-detection-wasm/css/style.css b/samples/css/style.css similarity index 100% rename from samples/face-detection-wasm/css/style.css rename to samples/css/style.css diff --git a/samples/face-detection-wasm/README.txt b/samples/face-detection-wasm/README.txt deleted file mode 100644 index 7bece37..0000000 --- a/samples/face-detection-wasm/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -A Pen created at CodePen.io. You can find this one at http://codepen.io/huningxin/pen/ZJyOBW. - - \ No newline at end of file diff --git a/samples/face-detection-wasm/js/index.js b/samples/face-detection-wasm/js/index.js deleted file mode 100644 index 417b892..0000000 --- a/samples/face-detection-wasm/js/index.js +++ /dev/null @@ -1,190 +0,0 @@ -let videoWidth, videoHeight; - -let qvga = {width: {exact: 320}, height: {exact: 240}}; - -let vga = {width: {exact: 640}, height: {exact: 480}}; - -let resolution = window.innerWidth < 640 ? qvga : vga; - -// whether streaming video from the camera. -let streaming = false; - -let video = document.getElementById('video'); -let canvasOutput = document.getElementById('canvasOutput'); -let canvasOutputCtx = canvasOutput.getContext('2d'); -let stream = null; - -let detectFace = document.getElementById('face'); -let detectEye = document.getElementById('eye'); - -let info = document.getElementById('info'); -if (!window.WebAssembly) { - info.innerHTML = 'WebAssembly is not supported.' -} - -function startCamera() { - if (streaming) return; - navigator.mediaDevices.getUserMedia({video: resolution, audio: false}) - .then(function(s) { - stream = s; - video.srcObject = s; - video.play(); - }) - .catch(function(err) { - console.log("An error occured! " + err); - }); - - video.addEventListener("canplay", function(ev){ - if (!streaming) { - videoWidth = video.videoWidth; - videoHeight = video.videoHeight; - video.setAttribute("width", videoWidth); - video.setAttribute("height", videoHeight); - canvasOutput.width = videoWidth; - canvasOutput.height = videoHeight; - streaming = true; - } - startVideoProcessing(); - }, false); -} - -let faceClassifier = null; -let eyeClassifier = null; - -let src = null; -let dstC1 = null; -let dstC3 = null; -let dstC4 = null; - -let canvasInput = null; -let canvasInputCtx = null; - -let canvasBuffer = null; -let canvasBufferCtx = null; - -function startVideoProcessing() { - if (!streaming) { console.warn("Please startup your webcam"); return; } - stopVideoProcessing(); - canvasInput = document.createElement('canvas'); - canvasInput.width = videoWidth; - canvasInput.height = videoHeight; - canvasInputCtx = canvasInput.getContext('2d'); - - canvasBuffer = document.createElement('canvas'); - canvasBuffer.width = videoWidth; - canvasBuffer.height = videoHeight; - canvasBufferCtx = canvasBuffer.getContext('2d'); - - srcMat = new cv.Mat(videoHeight, videoWidth, cv.CV_8UC4); - grayMat = new cv.Mat(videoHeight, videoWidth, cv.CV_8UC1); - - faceClassifier = new cv.CascadeClassifier(); - faceClassifier.load('haarcascade_frontalface_default.xml'); - - eyeClassifier = new cv.CascadeClassifier(); - eyeClassifier.load('haarcascade_eye.xml'); - - requestAnimationFrame(processVideo); -} - -function processVideo() { - stats.begin(); - canvasInputCtx.drawImage(video, 0, 0, videoWidth, videoHeight); - let imageData = canvasInputCtx.getImageData(0, 0, videoWidth, videoHeight); - srcMat.data.set(imageData.data); - cv.cvtColor(srcMat, grayMat, cv.COLOR_RGBA2GRAY); - let faces = []; - let eyes = []; - let size; - if (detectFace.checked) { - let faceVect = new cv.RectVector(); - let faceMat = new cv.Mat(); - if (detectEye.checked) { - cv.pyrDown(grayMat, faceMat); - size = faceMat.size(); - } else { - cv.pyrDown(grayMat, faceMat); - if (videoWidth > 320) - cv.pyrDown(faceMat, faceMat); - size = faceMat.size(); - } - faceClassifier.detectMultiScale(faceMat, faceVect); - for (let i = 0; i < faceVect.size(); i++) { - let face = faceVect.get(i); - faces.push(new cv.Rect(face.x, face.y, face.width, face.height)); - if (detectEye.checked) { - let eyeVect = new cv.RectVector(); - let eyeMat = faceMat.getRoiRect(face); - eyeClassifier.detectMultiScale(eyeMat, eyeVect); - for (let i = 0; i < eyeVect.size(); i++) { - let eye = eyeVect.get(i); - eyes.push(new cv.Rect(face.x + eye.x, face.y + eye.y, eye.width, eye.height)); - } - eyeMat.delete(); - eyeVect.delete(); - } - } - faceMat.delete(); - faceVect.delete(); - } else { - if (detectEye.checked) { - let eyeVect = new cv.RectVector(); - let eyeMat = new cv.Mat(); - cv.pyrDown(grayMat, eyeMat); - size = eyeMat.size(); - eyeClassifier.detectMultiScale(eyeMat, eyeVect); - for (let i = 0; i < eyeVect.size(); i++) { - let eye = eyeVect.get(i); - eyes.push(new cv.Rect(eye.x, eye.y, eye.width, eye.height)); - } - eyeMat.delete(); - eyeVect.delete(); - } - } - canvasOutputCtx.drawImage(canvasInput, 0, 0, videoWidth, videoHeight); - drawResults(canvasOutputCtx, faces, 'red', size); - drawResults(canvasOutputCtx, eyes, 'yellow', size); - stats.end(); - requestAnimationFrame(processVideo); -} - -function drawResults(ctx, results, color, size) { - for (let i = 0; i < results.length; ++i) { - let rect = results[i]; - let xRatio = videoWidth/size.width; - let yRatio = videoHeight/size.height; - ctx.lineWidth = 3; - ctx.strokeStyle = color; - ctx.strokeRect(rect.x*xRatio, rect.y*yRatio, rect.width*xRatio, rect.height*yRatio); - } -} - -function stopVideoProcessing() { - if (src != null && !src.isDeleted()) src.delete(); - if (dstC1 != null && !dstC1.isDeleted()) dstC1.delete(); - if (dstC3 != null && !dstC3.isDeleted()) dstC3.delete(); - if (dstC4 != null && !dstC4.isDeleted()) dstC4.delete(); -} - -function stopCamera() { - if (!streaming) return; - stopVideoProcessing(); - document.getElementById("canvasOutput").getContext("2d").clearRect(0, 0, width, height); - video.pause(); - video.srcObject=null; - stream.getVideoTracks()[0].stop(); - streaming = false; -} - -function initUI() { - stats = new Stats(); - stats.showPanel(0); - document.getElementById('container').appendChild(stats.dom); -} - -function opencvIsReady() { - console.log('OpenCV.js is ready'); - info.innerHTML = ''; - initUI(); - startCamera(); -} diff --git a/samples/face-detection-wasm/license.txt b/samples/face-detection-wasm/license.txt deleted file mode 100644 index c8a5051..0000000 --- a/samples/face-detection-wasm/license.txt +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/samples/face-detection/css/style.css b/samples/face-detection/css/style.css deleted file mode 100644 index 1cbf60d..0000000 --- a/samples/face-detection/css/style.css +++ /dev/null @@ -1,25 +0,0 @@ -canvas { - border: 1px solid black; -} -.invisible { - display: none; -} -.text-center { - text-align: center; -} -div { - margin: 10px; -} -#info { - font: 16px 'Lucida Grande', sans-serif; -} -.center-block { - display: block; - margin: auto; -} -label { - padding-right: 10px; - width: 25%; - vertical-align: top; - font: 16px 'Lucida Grande', sans-serif; -} \ No newline at end of file diff --git a/samples/face-detection-wasm/index.html b/samples/face-detection/index-wasm.html similarity index 88% rename from samples/face-detection-wasm/index.html rename to samples/face-detection/index-wasm.html index 8dbfa6f..f9d010e 100644 --- a/samples/face-detection-wasm/index.html +++ b/samples/face-detection/index-wasm.html @@ -4,7 +4,7 @@