【发布时间】:2021-10-08 19:59:35
【问题描述】:
我正在尝试检索 face-api.js(实时网络摄像头)中的 68 个面部标志,并使用这些点在 p5.js 中绘制 curveVertex()。到目前为止,我可以检索地标,但在 draw() 中使用它时遇到问题。
我正在使用https://github.com/WebDevSimplified/Face-Detection-JavaScript 的此代码进行人脸检测,并尝试在其中添加一些 p5.js 代码:
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('playing', () => {
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)
landmarks = await faceapi.detectFaceLandmarks(video)
landmarkPositions = landmarks.positions
// console.log(landmarkPositions[0]);
}, 100)
})
//p5.js
function setup() {
var myCanvas = createCanvas(windowWidth, windowHeight);
myCanvas.parent("overlay");
angleMode(DEGREES);
}
function draw() {
// background(0);
stroke(255);
noFill();
strokeWeight(4);
beginShape();
//test
curveVertex(100, 200);
curveVertex(150, 50);
curveVertex(250, 60);
curveVertex(300, 200);
curveVertex(300, 200);
//get landmark positions
curveVertex(landmarkPositions[0]);
// curveVertex(landmarkPositions[1]),
// curveVertex(landmarkPositions[2]),
// curveVertex(landmarkPositions[3])
endShape(CLOSE);
}
body {
margin: 0;
padding: 0;
width: 100vw;
height: 100vh;
}
canvas {
position: absolute;
}
#overlay{
position: absolute;
z-index: 1;
}
<div id="overlay"></div>
<video id="video" width="720" height="560" autoplay muted></video>
如何在curveVertex()中实时使用landmarkPositions?
非常感谢任何帮助,在此先感谢!
【问题讨论】:
标签: javascript p5.js