本文已使用 Google Cloud Translation API 自动翻译。
某些文档最好以原文阅读。
在本文中,我们将学习如何使用 TensorFlow.js 和 Node.js 对图像执行实时对象检测。
我们将从设置开发环境开始,然后安装 TensorFlow.js 及其依赖项。接下来,我们将编写一个 Node.js 脚本来加载图像,对其运行对象检测,并将结果绘制到屏幕上。最后,我们将查看一些可用于进一步学习的资源。
在开始之前,我们需要搭建一个开发环境。对于这篇文章,我们将使用 Node.js。
如果您尚未安装 Node.js,可以从 Node.js 网站 下载。安装 Node.js 后,您可以创建一个新的项目目录并使用以下命令对其进行初始化:
mkdir object-detection
cd object-detection
npm init -y
现在我们已经设置了一个项目目录,我们可以安装 TensorFlow.js 及其依赖项。我们将使用 tfjs-node 包,它提供了可在 Node.js 上使用的 TensorFlow.js 的实现。
要安装 tfjs-node 及其依赖项,请运行以下命令:
npm install @tensorflow/tfjs-node
安装 TensorFlow.js 后,我们现在可以编写脚本来对图像执行对象检测。我们将从加载图像开始,然后我们将使用 [tf.data.detectObjects](https://js.tensorflow.org/api/latest/# tf.data.detectObjects) 方法运行对象检测图片。最后,我们将结果绘制到屏幕上。
此处 提供了完整的脚本,但我们将在下面介绍关键部分.
首先,我们需要加载 tfjs-node 包:
const tf = require('@tensorflow/tfjs-node');
接下来,我们将加载 coco-ssd 模型,我们将使用它进行对象检测。 coco-ssd 模型是在 [Common Objects in Context (COCO) 数据集](http://cocodataset.org/# home) 上训练的单次检测模型。
const cocoSSD = require('@tensorflow-models/coco-ssd');
加载模型后,我们现在可以编写代码来加载图像并在其上运行对象检测。我们将从使用 [tf.node.decodeImage](https://js.tensorflow.org/api/latest/# tf.node.decodeImage) 方法加载图像开始。此方法返回一个解析为包含图像数据的张量的承诺。
const image = tf.node.decodeImage(
fs.readFileSync('./test-image.jpg')
);
加载图像后,我们可以使用 [tf.data.detectObjects](https://js.tensorflow.org/api/latest/# tf.data.detectObjects) 方法对其运行对象检测。此方法返回一个解析为对象数组的承诺,每个对象都包含有关检测到的对象的信息,包括对象的类及其在图像中的位置。
const predictions = await cocoSSD.detectObjects(image);
最后,我们将结果绘制到屏幕上。我们将使用 [tf.node.drawBoxes](https://js.tensorflow.org/api/latest/# tf.node.drawBoxes) 方法在检测到的对象周围绘制框,并使用 tf.node. writeFile 方法将结果写入新的图像文件。
const drawnImage = tf.node.drawBoxes(
image,
predictions.map(prediction => prediction.bbox)
);
tf.node.writeFile('./test-image-output.jpg', drawnImage.toBuffer());
编写脚本后,我们现在可以运行它来对图像执行对象检测。要运行脚本,请使用以下命令:
node index.js
这将在图像“test-image.jpg”上运行对象检测脚本,并将结果写入“test-image-output.jpg”。