zoukankan      html  css  js  c++  java
  • 网页端UVC相机测试_艾孜尔江撰

    1. multiCam.html:
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <video id="video" width="400" height="400" style="background-color: coral;"></video>
    <video id="video1" width="400" height="400" style="background-color: chartreuse;"></video>
    
    <p>
        <canvas id="canvas1" width="400" height="400" style="background-color: blueviolet;"></canvas>
        <canvas id="canvas1" width="400" height="400" style="background-color: brown;"></canvas>
    </p>
    
    <body>
        <script src="./multiCam.js"></script>
    </body>
    
    </html>
    
    1. multiCam.js:
    // 获取页面视频元素
    var video = document.getElementById('video');
    var video1 = document.getElementById('video1');
    
    
    
    navigator.mediaDevices.enumerateDevices().then(getMyDevices).catch(handleError);
    
    
    
    
    // 遍历所有的设备,包括视频和音频设备,找出 RGB相机设备。 
    function getMyDevices(deviceInfos) {
        let constraints = new Array(2);
        let id = 0;
        for (let i = 0; i !== deviceInfos.length; ++i) {
            let deviceInfo = deviceInfos[i];
            console.log("device info: " + Object.keys(deviceInfo));
            if (deviceInfo.kind === 'videoinput') {
                console.log("$$$$$");
                console.log("label: " + deviceInfo.label);
                // if (deviceInfo.label.search("RGB") !== -1) {
                if (deviceInfo.label.search("Full HD webcam") !== -1) {
                    console.log("deviceID is ###: " + deviceInfo.deviceId);
                    constraints[id] = {
                        video: {
                            deviceId: deviceInfo.deviceId
                        },
                        // audio: true,
                        video: {  1280, height: 720 }
                    };
                    id = id + 1;
                }
            }
        }
    
        navigator.mediaDevices.getUserMedia(constraints[0]).
            then(getStreamFromCamA).catch(handleError);
        navigator.mediaDevices.getUserMedia(constraints[0]).
            then(getStreamFromCamB).catch(handleError);
    
    
    }
    
    
    
    
    
    function getStreamFromCamA(stream) {
        window.stream = stream; // make stream available to console
        video.srcObject = stream;
        video.play();
    }
    
    
    
    function getStreamFromCamB(stream) {
        window.stream = stream; // make stream available to console
        video1.srcObject = stream;
        video1.play();
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    function handleError(error) {
        console.log('Error: ', error);
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    // var id = setInterval(function () {
    //     console.log("drawing...");
    
    //     draw(id)
    // }, 24);
    
    
    function draw(id) {
        localStorage.interval_id = id;
        let canvas = document.querySelector('canvas');
        canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
    }
    
    
    1. uvc.html:
    <!DOCTYPE html>
    <html>
    
    <head>
        <title>HTML5 code Reader</title>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <style type="text/css">
        html,
        body {
            height: 100%;
             100%;
            text-align: center;
        }
    </style>
    <!-- <script src="jquery-1.9.1.js"></script> -->
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script>
        //这段代 主要是获取摄像头的视频流并显示在Video 签中  
        var canvas = null, context = null, video = null;
        window.addEventListener("DOMContentLoaded", function () {
            try {
                canvas = document.getElementById("canvas");
                context = canvas.getContext("2d");
                video = document.getElementById("video");
    
                var videoObj = { "video": true, audio: false },
                    flag = true,
                    MediaErr = function (error) {
                        flag = false;
                        if (error.PERMISSION_DENIED) {
                            alert('用户拒绝了浏览器请求媒体的权限', '提示');
                        } else if (error.NOT_SUPPORTED_ERROR) {
                            alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');
                        } else if (error.MANDATORY_UNSATISFIED_ERROR) {
                            alert('指定的媒体类型未接收到媒体流', '提示');
                        } else {
                            alert('系统未能获取到摄像头,请确保摄像头已正确安装。或尝试刷新页面,重试', '提示');
                        }
                    };
                //获取媒体的兼容代码,目前只支持(Firefox,Chrome,Opera)
                if (navigator.getUserMedia) {
                    //qq浏览器不支持
                    if (navigator.userAgent.indexOf('MQQBrowser') > -1) {
                        alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');
                        return false;
                    }
                    navigator.getUserMedia(videoObj, function (stream) {
                        video.src = stream;
                        video.play();
                    }, MediaErr);
                }
                else if (navigator.webkitGetUserMedia) {
                    navigator.webkitGetUserMedia(videoObj, function (stream) {
                        video.src = window.webkitURL.createObjectURL(stream);
                        video.play();
                    }, MediaErr);
                }
                else if (navigator.mozGetUserMedia) {
                    navigator.mozGetUserMedia(videoObj, function (stream) {
                        video.src = window.URL.createObjectURL(stream);
                        video.play();
                    }, MediaErr);
                }
                else if (navigator.msGetUserMedia) {
                    navigator.msGetUserMedia(videoObj, function (stream) {
                        $(document).scrollTop($(window).height());
                        video.src = window.URL.createObjectURL(stream);
                        video.play();
                    }, MediaErr);
                } else {
                    alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器');
                    return false;
                }
                if (flag) {
                    alert('为了获得更准确的测试结果,请尽量将二维码置于框中,然后进行拍摄、扫描。 请确保浏览器有权限使用摄像功能');
                }
                //这个是拍照按钮的事件,          
                $("#snap").click(function () { startPat(); }).show();
            } catch (e) {
                printHtml("浏览器不支持HTML5 CANVAS");
            }
        }, false);
    
        //打印内容到页面      
        function printHtml(content) {
            $(window.document.body).append(content + "<br/>");
        }
        //开始拍照
        function startPat() {
            setTimeout(function () {//防止调用过快
                if (context) {
                    context.drawImage(video, 0, 0, 320, 320);
                    CatchCode();
                }
            }, 200);
        }
        //抓屏获取图像流,并上传到服务器      
        function CatchCode() {
            if (canvas != null) {
                //以下开始编 数据   
                var imgData = canvas.toDataURL();
                //将图像转换为base64数据
                var base64Data = imgData;//.substr(22); //在前端截取22位之后的字符串作为图像数据
                //开始异步上
                $.post("saveimg.php", { "img": base64Data }, function (result) {
                    printHtml("解析结果:" + result.data);
                    if (result.status == "success" && result.data != "") {
                        printHtml("解析结果成功!");
                    } else {
                        startPat();//如果没有解析出来则重新抓拍解析       
                    }
                }, "json");
            }
        }      
    </script>
    
    <body>
    
        <div id="support"></div>
        <div id="contentHolder">
            <video id="video" width="320" height="320" autoplay>
            </video>
            <canvas style="display:none; background-color:#F00;" id="canvas" width="320" height="320">
            </canvas> <br />
            <button id="snap" style="display:none; height:50px; 120px;">开始扫描</button>
        </div>
    
    
    
    </body>
    
    </html>
    
    1. 项目结构:
      在这里插入图片描述

    2. 测试效果:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述




    作者:艾孜尔江
    转载或使用请务必标明出处!

  • 相关阅读:
    4-17 文字图片绘制
    4-16 矩形圆形任意多边形绘制
    4-15 线段绘制
    4-14 图像特效小结
    4-13 油画特效
    4-12 颜色映射
    4-11 浮雕效果
    Linux文本截取命令cut​笔记
    45张令程序员泪流满面的趣图
    45张令程序员泪流满面的趣图
  • 原文地址:https://www.cnblogs.com/ezhar/p/14919953.html
Copyright © 2011-2022 走看看