- FaceMesh - KeypointsThis sketch demonstrates how to render all of the 468 keypoints detected by the FaceMesh model.
- FaceMesh - PartThis sketch demonstrates how to render the keypoints of a specific part of the FaceMesh model.
- FaceMesh - Custom List (Lips)This sketch demonstrates how to render the keypoints of custom list of keypoints like the lip contours.
- FaceMesh - Centered FaceThis sketch demonstrates how to use the bounding box of the detected face to center the face in the canvas.
- FaceMesh - TrianglesThis sketch demonstrates how to render the triangular mesh of the FaceMesh model.
- FaceMesh - Texture MapThis sketch demonstrates how to texture map an image onto the FaceMesh triangles.
- FaceMesh - 3DThis sketch demonstrates how to render the face mesh in 3D.
- FaceMesh - Blow BubblesThis sketch demonstrates how to emit particles when the mouth is open.
- FaceMesh - Stretch and SkewThis sketch demonstrates how to distort the facemesh triangles with a sine wave.
In this video, I explore the FaceMesh model using ml5.js. I demonstrate how to track all 468 face landmark positions as well as texture map an image onto the triangular mesh with uv coordinates.
ml5.js website with model documentation and other supporting material.
Jack B. Du's interactive synthesizer controlled by mouth movements
Google Research blog post covering the technical details of the Face and hand tracking models.
Paper describing the method for inferring 3D mesh representation of a human face from single camera input.
Model card for the Face Mesh model with information on the model's intended use, training data, and more.
Diagram with all keypoints labeled and mapped to the UV coordinates of the Face Mesh model.
MDN Web Docs reference for JavaScript destructuring syntax.
Creative Commons image from a plane window used in the texture mapping example.
Patt Vira's interactive dandelion project using ml5.js and p5.js.
This video looks at how to access the pixels of an HTML5 canvas in p5.js.
- Editing
by Mathieu Blanchette
- Animations
by Jason Heglund