鱼C论坛

 找回密码
 立即注册
查看: 3905|回复: 4

如何使用html+js实现调用摄像头+识别二维码

[复制链接]
发表于 2023-1-6 10:06:44 | 显示全部楼层 |阅读模式
30鱼币
本帖最后由 Mike_python小 于 2023-1-6 10:59 编辑

如果使用html+js实现调用摄像头+识别二维码

有大佬能帮我一下吗 这块的知识不是很懂

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-6 10:18:05 | 显示全部楼层
  1. <!doctype html>
  2. <html lang="en">
  3.         <head>
  4.                 <meta charset="utf-8">
  5.                 <title>test</title>
  6.             <style>
  7.             html,body{position:relative;height:100%;}
  8.             .main { display: flex; flex-direction: row; justify-content:space-between;width:100%}
  9.             #canvas{background-color:#eee;}
  10.             .btnBox { display:flex;align-items:center;justify-content:center; position: absolute; bottom: 0px; left: 0px; width: 100%; height: 60px; background-color: #eee; border-top: solid 1px #ddd; }
  11.             #btnSave{margin-left:20px;}
  12.         </style>
  13.         </head>

  14.         <body>
  15.         <div class="main">
  16.             <video id="video" autoplay style="width: 640px;height: 480px"></video>
  17.             <!--拍照按钮-->
  18.             <!--描绘video截图-->
  19.             <canvas id="canvas" width="640" height="480"></canvas>
  20.         </div>
  21.         
  22.         <div class="text-center btnBox">
  23.             <button id="capture" class="btn btn-success"><i class="fa fa-camera"></i> 拍照</button>  
  24.             <button id="btnSave" class="btn btn-success"><i class="fa fa-save"></i> 使用此图片</button>
  25.         </div>
  26.   
  27.         <script>
  28.             window.onload = function () {
  29.                 //访问用户媒体设备的兼容方法
  30.                 function getUserMedia(constraints, success, error) {
  31.                     if (navigator.mediaDevices.getUserMedia) {
  32.                         //最新的标准API
  33.                         navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
  34.                     } else if (navigator.webkitGetUserMedia) {
  35.                         //webkit核心浏览器
  36.                         navigator.webkitGetUserMedia(constraints, success, error)
  37.                     } else if (navigator.mozGetUserMedia) {
  38.                         //firfox浏览器
  39.                         navigator.mozGetUserMedia(constraints, success, error);
  40.                     } else if (navigator.getUserMedia) {
  41.                         //旧版API
  42.                         navigator.getUserMedia(constraints, success, error);
  43.                     }
  44.                 }

  45.                 let video = document.getElementById('video');
  46.                 let canvas = document.getElementById('canvas');
  47.                 let context = canvas.getContext('2d');
  48.                 function success(stream) {
  49.                     //兼容webkit核心浏览器
  50.                     //let CompatibleURL = window.URL || window.webkitURL;
  51.                     //将视频流设置为video元素的源
  52.                     // console.log(stream);
  53.                     //video.src = CompatibleURL.createObjectURL(stream);
  54.                     video.srcObject = stream;
  55.                     video.play();
  56.                 }
  57.                 function error(error) {
  58.                     console.log(`访问用户媒体设备失败${error.name}, ${error.message}`);
  59.                 }

  60.                 if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {
  61.                     if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
  62.                         console.log("enumerateDevices() not supported.");
  63.                         return;
  64.                     }
  65.                     // 列出摄像头和麦克风
  66.                     var exArray = [];
  67.                     navigator.mediaDevices.enumerateDevices()
  68.                         .then(function (devices) {
  69.                             devices.forEach(function (device) {
  70.                                 // console.log(device.kind + ": " + device.label +
  71.                                 // " id = " + device.deviceId);
  72.                                 if (device.kind == "videoinput") {
  73.                                     // alert(device.label);
  74.                                     exArray.push(device.deviceId);
  75.                                 }
  76.                             });
  77.                             var mediaOpts = { video: { width: 420, height: 120 } };
  78.                             var mediaOpts =
  79.                             {
  80.                                 video:
  81.                                 {
  82.                                     deviceId: { exact: exArray[0] }
  83.                                 }
  84.                             };
  85.                             //调用用户媒体设备, 访问摄像头
  86.                             getUserMedia(mediaOpts, success, error);
  87.                         })
  88.                         .catch(function (err) {
  89.                             console.log(err.name + ": " + err.message);
  90.                         });

  91.                 } else {
  92.                     alert('不支持访问用户媒体');
  93.                 }
  94.                 var img = new Image();
  95.                
  96.                 document.getElementById('capture').addEventListener('click', function () {
  97.                     context.drawImage(video, 0, 0, 640, 480);
  98.                    //var image_data = context.getImageData(0, 0, 480, 320);
  99.                     // var string = OCRAD(image_data.data);
  100.                     // string = _arrayBufferToBase64(image_data);
  101.                     var image = new Image();
  102.                     image.src = canvas.toDataURL("image/jpeg");
  103.                     console.log(image.src);
  104.                
  105.                 })
  106.             }
  107.         </script>
  108.         </body>
  109. </html>
复制代码



我有一个调用摄像头的方法,现在就实时识别(不要按钮)图片中是否有二维码,如果有,打印出内容

有大佬能帮帮我吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-6 11:53:39 | 显示全部楼层
@不二如是 帮帮我呗www
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 12:47:21 | 显示全部楼层
我不咋懂js
你看看这个?
http://ourjs.com/detail/kaq9h3x9n30z
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-9 08:35:38 | 显示全部楼层
厉害,学习中
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表