📅  最后修改于: 2023-12-03 15:35:17.185000             🧑  作者: Mango
TensorFlow.js是一个用于构建和训练机器学习模型的JavaScript库。其中的tf.data.webcam()函数提供了从网络摄像头捕捉视频流的功能,可以用于实时的图像分类、目标检测等应用场景。
在html页面中引入TensorFlow.js库,如下所示:
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.6.0"></script>
使用tf.data.webcam()函数创建一个webcam数据源,如下所示:
const webcam = await tf.data.webcam(document.getElementById('webcam'));
其中,第一个参数为视频显示的DOM元素。
使用webcam.iterator()函数获取一个迭代器,每次调用迭代器的next()方法就可以获取一帧图像数据。
const img = await webcam.iterator().next().value;
获取图像数据后,可以将其转换为Tensor对象,并对其进行预处理,如下所示:
const tensor = tf.browser.fromPixels(img)
.resizeNearestNeighbor([224, 224])
.toFloat()
.div(tf.scalar(255))
.expandDims();
将处理后的图像数据输入到模型中进行预测,如下所示:
const predictions = await model.predict(tensor).data();
其中,model是一个已经加载好的模型。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TensorFlow.js webcam demo</title>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.6.0"></script>
</head>
<body>
<video id="webcam" width="224" height="224" autoplay></video>
<input type="button" onclick="toggle()">
<script>
let webcam = null;
let isOn = false;
let intervalId = null;
async function startWebcam() {
webcam = await tf.data.webcam(document.getElementById('webcam'));
intervalId = setInterval(run, 100);
}
async function run() {
if (!isOn) {
return;
}
const img = await webcam.iterator().next().value;
const tensor = tf.browser.fromPixels(img)
.resizeNearestNeighbor([224, 224])
.toFloat()
.div(tf.scalar(255))
.expandDims();
const predictions = await model.predict(tensor).data();
console.log(predictions);
}
function toggle() {
isOn = !isOn;
if (isOn) {
startWebcam();
} else {
clearInterval(intervalId);
}
}
</script>
</body>
</html>
在上述示例代码中,点击按钮可以打开或关闭webcam。程序每隔100毫秒从webcam中获取一帧图像数据,并进行预测。其中,模型由开发者自行训练,此处省略模型加载代码。