网页调用摄像头

该博客展示了使用HTML实现调用摄像头进行人脸识别登录的代码。通过HTML标签创建视频和画布元素,利用JavaScript调用摄像头获取视频流,将视频帧绘制到画布上,再将图像数据发送到指定servlet进行人脸识别,根据返回结果判断登录状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>调用摄像头</title>
        <script src="js/jq/jquery-3.2.1.js"></script>
        <script src="js/jq/jquery-3.2.1.min.js"></script>
    </head>

    <body>
        <video id="v" width="400" height="300"></video>
        <!-- 图像画布 -->
        <canvas width="200" height="150"></canvas>
        <button id="" onclick="face_login()" class="btn btn-info"><i class="icon-play"></i>&nbsp;登录</button>
        <script>
            function $(elem) {
                return document.querySelector(elem);
            }
            var canvas = $('canvas'),
                context = canvas.getContext('2d'),
                video = $('video'),
                snap = $('#snap'),
                upload = $('#upload'),
                uploaded = $('#uploaded'),
                mediaStreamTrack;
            //人脸识别参考文档:https://cloud.baidu.com/doc/FACE/
            function face_login() {
                context.drawImage(video, 0, 0, 200, 150);
                jQuery.post('faceLogin', {      //指定发送图片到的servlet
                    snapData: canvas.toDataURL('image/jpg')
                }).done(function(rs) {
                    //对结果集进行解析,判断是否存在人脸
                    console.log(JSON.stringify(rs));
                    if(rs.error_code == "222202") {
                        alert("没有人脸信息或人脸数量非1,请重新拍照!");
                    } else if(rs.error_code == "222207") {
                        alert("人脸库中没有您的注册信息,请先注册。");
                    } else if(rs.error_code == "223120") {
                        alert("请正确登录,不得伪造!");
                    } else if(rs.error_msg == "SUCCESS") {
                        alert("登录成功!");
                        // console.log(rs.result.user_list[0].user_info);
                    }
                });
            }
        </script>

        <script>
            !(function() {
                // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象
                if(navigator.mediaDevices === undefined) {
                    navigator.mediaDevices = {};
                }
                if(navigator.mediaDevices.getUserMedia === undefined) {
                    navigator.mediaDevices.getUserMedia = function(constraints) {
                        // 首先,如果有getUserMedia的话,就获得它
                        var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
                        // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
                        if(!getUserMedia) {
                            return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
                        }
                        // 否则,为老的navigator.getUserMedia方法包裹一个Promise
                        return new Promise(function(resolve, reject) {
                            getUserMedia.call(navigator, constraints, resolve, reject);
                        });
                    }
                }
                const constraints = {
                    video: true,
                    audio: false
                };
                let promise = navigator.mediaDevices.getUserMedia(constraints);
                promise.then(stream => {
                    let v = document.getElementById('v');
                    // 旧的浏览器可能没有srcObject
                    if("srcObject" in v) {
                        v.srcObject = stream;
                    } else {
                        // 防止再新的浏览器里使用它,应为它已经不再支持了
                        v.src = window.URL.createObjectURL(stream);
                    }
                    v.onloadedmetadata = function(e) {
                        v.play();
                    };
                }).catch(err => {
                    console.error(err.name + ": " + err.message);
                })
            })();
        </script>
    </body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值