-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
executable file
·41 lines (41 loc) · 1.72 KB
/
script.js
File metadata and controls
executable file
·41 lines (41 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const video = document.getElementById('video')
Promise.all([
faceapi.nets.tinyFaceDetector.loadFromUri('/models'),
faceapi.nets.faceLandmark68Net.loadFromUri('/models'),
faceapi.nets.faceRecognitionNet.loadFromUri('/models'),
faceapi.nets.faceExpressionNet.loadFromUri('/models')
]).then(startVideo)
function startVideo() {
navigator.getUserMedia(
{ video: {} },
stream => video.srcObject = stream,
err => console.error(err)
)
}
video.addEventListener('play', () => {
const canvas = faceapi.createCanvasFromMedia(video)
document.body.append(canvas)
const displaySize = { width: video.width, height: video.height }
faceapi.matchDimensions(canvas, displaySize)
setInterval(async () => {
const detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks()
const resizedDetections = faceapi.resizeResults(detections, displaySize)
canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height)
// faceapi.draw.drawFaceLandmarks(canvas, resizedDetections);
resizedDetections.forEach(rdetection => {
let lx = rdetection.landmarks.getLeftEye()[0].x;
let ly = rdetection.landmarks.getLeftEye()[0].y;
let rx = rdetection.landmarks.getRightEye()[0].x;
let ry = rdetection.landmarks.getRightEye()[0].y;
let nx = rdetection.landmarks.getNose()[4].x;
let ny = rdetection.landmarks.getNose()[4].y;
let ex = rdetection.landmarks.getLeftEyeBrow()[2].x;
let ey = rdetection.landmarks.getLeftEyeBrow()[2].y;
let ctx = canvas.getContext("2d");
ctx.font = "30px Replica";
// ctx.fillText("[", lx,ly + 10);
// ctx.fillText("]", rx,ry + 10);
ctx.fillText("[cloud]", ex,ey - 12);
})
}, 100)
})