问题描述
我正在尝试开发一个网络应用程序,通过网络摄像头检测人脸并将其与保存的图像进行比较。为此,我在浏览器中使用 FaceAPI.js
和 javascript
从这个YouTube video中汲取很多想法
我还是个新手,这份工作是为了学校作业。希望有人能救救我,非常感谢。
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<Meta http-equiv="X-UA-Compatible" content="IE=edge">
<Meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Prueba A</title>
</head>
<style>
body {
margin: 0;
padding: 0;
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
canvas {
position: absolute;
}
</style>
<body>
<video id="video" width="720" height="568" autoplay muted></video>
<script defer src="script/face-api.min.js"></script>
<script defer src="script/script.js"></script>
</body>
</html>
JavaScript
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/"),faceapi.nets.ssdMobilenetv1.loadFromUri('/models')
]).then(startVideo)
function startVideo() {
navigator.getUserMedia(
{video: {}},stream => video.srcObject = stream,err => console.error(err)
)
}
video.addEventListener('play',async () => {
const labeledFaceDescriptors = await loadLabeledImages()
const faceMatcher = new faceapi.FaceMatcher(labeledFaceDescriptors,0.6)
setInterval(async () => {
const displaySize = { width: video.width,height: video.height}
const detections = await faceapi.detectAllFaces(video,new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks().withFaceExpressions()
const resizedDetections = faceapi.resizeResults(detections,displaySize)
const results = resizedDetections.map(d => faceMatcher.findBestMatch(d.descriptor))
},100)
})
function loadLabeledImages() {
const labels = ['Alan','Mich','John']
return Promise.all(
labels.map(async label => {
const descriptions = []
for (let i = 1; i <= 2; i++) {
const img = await faceapi.fetchImage(`labeled_images/${label}/${i}.jpg`)
const detections = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor()
descriptions.push(detections.descriptor)
}
return new faceapi.LabeledFaceDescriptors(label,descriptions)
})
)
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)