+
95
-

回答

有三个js库可以是吸纳

face-api

点击打开链接

tracking.js

点击打开链接

tensorflow.js,注意由于是google的服务,可能你的网络无法直连,请确保你的网络能链接谷歌

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Face Detection</title>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/blazeface"></script>
</head>
<body>
    <video id="video" width="720" height="560" autoplay></video>
    <script>
        const video = document.getElementById('video');

        navigator.mediaDevices.getUserMedia({ video: {} })
            .then(stream => {
                video.srcObject = stream;
            })
            .catch(err => console.error(err));

        async function run() {
            const model = await blazeface.load();
            video.addEventListener('play', async () => {
                const canvas = document.createElement('canvas');
                document.body.append(canvas);
                canvas.width = video.width;
                canvas.height = video.height;
                const ctx = canvas.getContext('2d');

                setInterval(async () => {
                    const predictions = await model.estimateFaces(video, false);
                    ctx.clearRect(0, 0, canvas.width, canvas.height);
                    predictions.forEach(prediction => {
                        ctx.beginPath();
                        ctx.lineWidth = "4";
                        ctx.strokeStyle = "blue";
                        ctx.rect(
                            prediction.topLeft[0],
                            prediction.topLeft[1],
                            prediction.bottomRight[0] - prediction.topLeft[0],
                            prediction.bottomRight[1] - prediction.topLeft[1]
                        );
                        ctx.stroke();
                    });
                }, 100);
            });
        }

        run();
    </script>
</body>
</html>

网友回复

我知道答案,我要回答