最近我在使用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);