如何使用JavaScript访问移动设备相机?

8

我想编写一个网页应用程序(html+css+javaScript),当在带有摄像头的设备上运行时(例如手机),应该能够使用此摄像头作为条形码扫描仪。我知道有条形码阅读器库,但我想尝试编写自己的扫描仪。(因为我想详细了解其工作原理。)

加载网页应用程序后,用户应允许应用程序使用摄像头。但之后所有其他操作都应该无需用户交互,即允许使用摄像头后不需要点击任何按钮。用户的下一个任务是将相机对准条形码,直到按下完成按钮或关闭浏览器。但在扫描过程中,不需要点击任何内容。

我的应用程序应频繁从摄像机视频流中进行拍摄。这样的快照并不意味着要显示出来(用户可以直接观看来自摄像头的视频流),也不意味着需要存储在任何地方。它必须作为位图在JavaScript中可用,即一个二维数组,其中该数组中的每个项目都包含单个像素的RGB值。

当脚本接收到这样的数组时,它会分析它并尝试识别条形码。如果成功识别出一个代码,则将该代码发送到服务器。然后应该拍摄下一个快照。如果未找到代码,则应拍摄新的快照。这将一直重复,直到用户停止扫描。

额外需要:
我不需要相机能够看到的整个屏幕区域。我只需要一个小的矩形裁剪(例如640x320像素)。

我知道您可以使用此HTML片段将视频上传到服务器。

<form action="server.cgi" method="post" enctype="multipart/form-data">
  <input type="file" name="video" accept="video/*" capture>
  <input type="submit" value="Upload">
</form>

但是我不知道这如何帮助我解决我的问题。你能帮忙吗?

(我不知道是否有区别,但我使用jQuery。)

1个回答

4
请看一下getUserMedia API,它允许您仅通过JS在Web上提示用户使用其设备的相机权限,然后将输入作为流进行操作。
请注意,iOS仍然不支持此功能,唯一的真正替代方案是请求用户使用文件上传/ blob拍摄照片,然后搜索该图像中的条形码。
编辑:链接到非废弃方法

谢谢。但是你的链接指向了一个已弃用的方法。最新的方法似乎是navigator.mediaDevices.getUserMedia() https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia - Hubert Schölnast
我阅读了这个描述并尝试了一些例子。我可以在网页上显示摄像头的输入视频,并且我可以拍摄快照,然后在同一页上显示。但是我也可以使用我的问题中的表单元素来完成这个任务。所以我仍然处于之前提问时的同一点。我仍然无法获得JavaScript数组形式的位图。 - Hubert Schölnast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接