如何在tmImage中更改摄像头输入设备?

最近我在使用Google Teachable Machine制作一个简单的图像检测AI,已经完成了很多工作,但遇到了一个问题。我无法更改摄像头输入设备。我安装了Iriun Webcam,无论我怎么操作,它都不愿意切换到其他输入设备(我已经更改了Opera GX的摄像头设置)。当我阻止或移除Iriun webcam时,屏幕上什么也没显示,系统请求摄像头权限后就没有任何反应。我使用了Google Teachable Machine提供的示例代码。谁能帮帮我吗?

摄像头设置的部分代码如下:

        webcam = new tmImage.Webcam(1280, 720, flip); // width, height, flip        await webcam.setup(); // request access to the webcam        await webcam.play();        window.requestAnimationFrame(loop);

完整代码如下:

<div>Teachable Machine Image Model</div><button type="button" onclick="init()">Start</button><div id="webcam-container"></div><div id="label-container"></div><script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@teachablemachine/[email protected]/dist/teachablemachine-image.min.js"></script><script type="text/javascript">    // More API functions here:    // https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image    // the link to your model provided by Teachable Machine export panel    const URL = "https://teachablemachine.withgoogle.com/models/sDyEbFFcX/";    let model, webcam, labelContainer, maxPredictions;    // Load the image model and setup the webcam    async function init() {        const modelURL = URL + "model.json";        const metadataURL = URL + "metadata.json";        // load the model and metadata        // Refer to tmImage.loadFromFiles() in the API to support files from a file picker        // or files from your local hard drive        // Note: the pose library adds "tmImage" object to your window (window.tmImage)        model = await tmImage.load(modelURL, metadataURL);        maxPredictions = model.getTotalClasses();        // Convenience function to setup a webcam        const flip = false; // whether to flip the webcam        webcam = new tmImage.Webcam(1280, 720, flip); // width, height, flip        await webcam.setup(); // request access to the webcam        await webcam.play();        window.requestAnimationFrame(loop);        // append elements to the DOM        document.getElementById("webcam-container").appendChild(webcam.canvas);        labelContainer = document.getElementById("label-container");        for (let i = 0; i < maxPredictions; i++) { // and class labels            labelContainer.appendChild(document.createElement("div"));        }    }    async function loop() {        webcam.update(); // update the webcam frame        await predict();        window.requestAnimationFrame(loop);    }    // run the webcam image through the image model    async function predict() {        // predict can take in an image, video or canvas html element        const prediction = await model.predict(webcam.canvas);        for (let i = 0; i < maxPredictions; i++) {            const classPrediction =                prediction[i].className + ": " + prediction[i].probability.toFixed(2);            labelContainer.childNodes[i].innerHTML = classPrediction;        }    }</script>

回答:

要获取设备列表…

const devices = await navigator.mediaDevices.enumerateDevices()

这将返回一个设备数组

[{  "deviceId": "927e6cff81c17cab69ff195ff834495e2e9a3945a05cffa2a8d2fd47a531f143",  "kind": "videoinput",  "label": "FaceTime HD Camera",  "groupId": "931edb62c53b8899ce3c93efe5a4c372da72b13e4c505611f4c33276f7ed02ec"}]

使用deviceId来设置摄像头

const webcam = new tmImage.Webcam(1280, 720, false);await webcam.setup({ deviceId: devices[0].deviceId })await webcam.play();window.requestAnimationFrame(loop);

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注