javascript - 通过 javascript 调整网络摄像头(用户媒体)摄像头设置
问题描述
我有软件在 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 (??) 对象是否有这样的东西?我仍然很容易被 Javascript 中的 DOM 弄糊涂,所以我正在努力挖掘 API 以找出答案。
如果需要或可取,我也非常感谢其他探索途径。
谢谢!
解决方案
有一个全新的图像捕获 API,称为MediaStream Image Capture API。
据我所知,它目前仅在 Chrome 中受支持,但对于您的用例来说这听起来不错。
捕获图像时,您可以将其他限制应用于视频轨道。从规范:
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}] });
推荐阅读
- reactjs - 当上下文消费者中的任何状态发生变化时,React 是否会重新渲染所有组件?
- python - 如何解决“TypeError:不支持的格式字符串传递给 OSError.__format__”?
- python - 用另一个列表中的格式化文本替换列表中的文本
- python - Parser 必须是字符串或字符流,而不是 Series
- mongodb - 我如何将数据插入到 mongodb 的嵌入式集合中
- amazon-web-services - 有人可以为我揭开 AWS 服务中的 EMR/EC2/Lambda/SNS/SQ 的神秘面纱吗?
- ubuntu - --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 是什么意思?
- python - “AttributeError:‘numpy.ndarray’对象没有属性‘值’
- c++ - 我仍然有这个问题: C++ get Partition Styles
- elasticsearch - 无需 SSL 的安全 Elasticsearch