face_fish_tank.html 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  6. <title>tracking.js - face tracking fish tank</title>
  7. <link rel="stylesheet" href="assets/demo.css">
  8. <script src="../build/tracking-min.js"></script>
  9. <script src="../build/data/face-min.js"></script>
  10. <script src="../../threejs/build/three.min.js"></script>
  11. <script src="assets/fish_tank/FishTankRenderer.js"></script>
  12. <style>
  13. body {
  14. overflow: hidden;
  15. }
  16. #video, #canvas {
  17. bottom: 0;
  18. position: absolute;
  19. z-index: 100;
  20. }
  21. #viewport {
  22. padding-top: 40px;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="demo-title">
  28. <p><a href="http://trackingjs.com" target="_parent">tracking.js</a> - get user's webcam and detect faces to control the scene</p>
  29. </div>
  30. <div id="viewport">
  31. <video id="video" width="320" height="240" preload autoplay loop muted></video>
  32. <canvas id="canvas" width="320" height="240"></canvas>
  33. </div>
  34. <script>
  35. var viewport = document.getElementById('viewport');
  36. var canvas = document.getElementById('canvas');
  37. var context = canvas.getContext('2d');
  38. var fishTankRenderer = new FishTankRenderer();
  39. fishTankRenderer.init(viewport);
  40. var faceX = 0;
  41. var faceY = 0;
  42. var tracker = new tracking.ObjectTracker('face');
  43. tracker.setInitialScale(4);
  44. tracker.setStepSize(2);
  45. tracking.track('#video', tracker, { camera: true });
  46. tracker.on('track', function(event) {
  47. var maxRectArea = 0;
  48. var maxRect;
  49. event.data.forEach(function(rect) {
  50. if (rect.width * rect.height > maxRectArea){
  51. maxRectArea = rect.width * rect.height;
  52. maxRect = rect;
  53. }
  54. context.clearRect(0, 0, canvas.width, canvas.height);
  55. context.strokeStyle = 'magenta';
  56. context.strokeRect(rect.x, rect.y, rect.width, rect.height);
  57. context.font = '11px Helvetica';
  58. context.fillStyle = "#fff";
  59. context.fillText('x: ' + rect.x + 'px', rect.x + rect.width + 5, rect.y + 11);
  60. context.fillText('y: ' + rect.y + 'px', rect.x + rect.width + 5, rect.y + 22);
  61. });
  62. if(maxRectArea > 0) {
  63. var rectCenterX = maxRect.x + (maxRect.width/2);
  64. var rectCenterY = maxRect.y + (maxRect.height/2);
  65. faceX = (rectCenterX - 160) * (window.innerWidth/320) * 50;
  66. faceY = (rectCenterY - 120) * (window.innerHeight/240) * 50;
  67. }
  68. fishTankRenderer.render(faceX, faceY);
  69. });
  70. </script>
  71. </body>
  72. </html>