网页端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: { width: 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%; width: 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; width:120px;">开始扫描</button> </div> </body> </html>
  1. 项目结构:
    在这里插入图片描述

  2. 测试效果:

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




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


__EOF__

本文作者艾孜尔江
本文链接https://www.cnblogs.com/ezhar/p/14919953.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   艾孜尔江  阅读(317)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2020-06-22 Windows10应知应会
2020-06-22 VSCode常用设置
点击右上角即可分享
微信分享提示