<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<div>
<img id=image hidden crossorigin="anonymous" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Google_team_group_photo_with_Vanhanen.jpg/640px-Google_team_group_photo_with_Vanhanen.jpg" >
<br>
<canvas id="canvas" width=640 height=480 style="width: 100%;"></canvas>
</div>
<button id="detect" onclick="detect()" class="btn btn-lg btn-primary">Detect faces</button>
<footer></footer>
</body>
</html>
body {
display: flex;flex-direction: column;
text-align: center;
}
var image = document.getElementById('image');
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext("2d");
var scale = 1;
image.onload = function() {
ctx.drawImage(image,
0, 0, image.width, image.height,
0, 0, canvas.width, canvas.height);
scale = canvas.width / image.width;
};
function detect() {
if (window.FaceDetector == undefined) {
console.error('Face Detection not supported');
return;
}
var faceDetector = new FaceDetector();
faceDetector.detect(image)
.then(faces => {
// Draw the faces on the <canvas>.
var ctx = canvas.getContext("2d");
ctx.lineWidth = 2;
ctx.strokeStyle = "red";
for(var i = 0; i < faces.length; i++) {
ctx.rect(Math.floor(faces[i].x * scale),
Math.floor(faces[i].y * scale),
Math.floor(faces[i].width * scale),
Math.floor(faces[i].height * scale));
ctx.stroke();
}
// Add the faces as strings to the <footer>
var footer = document.getElementsByTagName('footer')[0];
footer.innerHTML =
'<p>Detected ' + faces.length + ' faces</p><ul>';
for(var i = 0; i < faces.length; i++) {
footer.innerHTML +=
'<li>@ (' + faces[i].x + ',' + faces[i].y + '), size ' +
faces[i].width + 'x' + faces[i].height + '</li>';
}
footer.innerHTML += '</ul>';
})
.catch((e) => {
console.error("Boo, Face Detection failed: " + e);
});
}
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |