通过javascript调整网络摄像头(用户媒体)摄像头设置

时间:2019-12-05 20:02:23

标签: javascript getusermedia

我有在Flask(因此,基于Python的后端,而Chrome运行我们的前端)网络服务器上运行的软件,该服务器通过使用高架网络摄像头拍摄图像来“扫描”现实生活中的产品。之后,我们将在业务流程中使用这些图像。

我们的问题是,随着扫描过程的进行,相机中内置了某种自动调节功能,似乎会随机影响色彩平衡/饱和度等。我们需要这些图像至少在内部与它们的设置保持一致,以便我们可以准确比较它们。

以下是当前访问网络摄像头的方式:

// Attach the video stream to the video element and autoplay.
navigator.mediaDevices.getUserMedia(constraints)
    .then(
        (stream) => {
            player.srcObject = stream;
        });

在该软件的早期版本中,没有前端可言,我使用cv2 python库访问了网络摄像头。因此,我可以创建一个相机对象,然后使用诸如此类的东西覆盖内置的自动调整功能:

cam = cv2.VideoCapture(0)
cam.set(cv2.CAP_PROP_EXPOSURE, .2)
cam.set(cv2.CAP_PROP_BRIGHTNESS,50)
cam.set(cv2.CAP_PROP_CONTRAST,50)

Javascript中的MediaDevice / MediaStream(??)对象是否具有类似的内容?我仍然很容易被Java语言中的DOM弄糊涂,所以我正在努力地探索API以找出答案。

如果需要或希望我探索其他途径,我将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

有一个全新的图像捕获API,称为MediaStream Image Capture API

据我所知,Chrome目前仅支持该功能,但这对于您的用例来说还可以。

拍摄图像时,有additional constraints条可以应用于视频轨道。根据规格:

partial dictionary MediaTrackSupportedConstraints {
  boolean whiteBalanceMode = true;
  boolean exposureMode = true;
  boolean focusMode = true;
  boolean pointsOfInterest = true;

  boolean exposureCompensation = true;
  boolean exposureTime = true;
  boolean colorTemperature = true;
  boolean iso = true;

  boolean brightness = true;
  boolean contrast = true;
  boolean pan = true;
  boolean saturation = true;
  boolean sharpness = true;
  boolean focusDistance = true;
  boolean tilt = true;
  boolean zoom = true;
  boolean torch = true;
};

对任何特定约束的支持取决于浏览器和硬件支持。 MDN显示了如何应用这些约束:

let zoom = document.querySelector('#zoom');
const capabilities = track.getCapabilities()
// Check whether zoom is supported or not.
if (!capabilities.zoom) {
  return;
}track.applyConstraints({advanced : [{zoom: zoom.value}] });