javascript - 如何将照片与网络摄像头进行比较?FaceAPI.js
问题描述
我正在尝试开发一个通过网络摄像头检测人脸并将其与保存的图像进行比较的网络应用程序。为此,我FaceAPI.js
在浏览器中使用和 javascript
从这个YouTube 视频中汲取灵感
我还是个新手,这份工作是为了学校作业。希望有人能救救我,非常感谢。
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)
})
)
}
解决方案
推荐阅读
- clang - 为什么 clang.exe 和 clang++.exe 完全一样?
- php - 无法下载 laravel/socialite [laravel5.5]
- google-chrome-extension - 如何在列出扩展的 Chrome 扩展弹出窗口中添加扩展图标?
- reactjs - 安装 react-router-dom 后 React npm start 不起作用
- html - 如何将导航栏移动到 img 上?
- webpack - 如何处理 twilio-chat 和 webpack
- spring-boot - org/springframework/boot/bind/RelaxedPropertyResolver 未找到
- php - 我在 cpanel 上部署的应用程序出现 Laravel 文件权限错误
- java - 如何从.class 向@ServerEndpoint 发送消息
- html - 如何让我的网站在放大和缩小时不失真?