You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TensorFlow.js-Node.js结合Mobilenet.js实现图像分析?

使用TensorFlow.js-Node.js结合MobileNet进行图像分析

我来帮你梳理并完善基于TensorFlow.js-Node.js和MobileNet的图像分析实现方案,下面是完整的可运行代码和关键细节说明:

第一步:安装依赖

首先需要安装必要的npm包,确保Node.js环境下能正常运行TensorFlow.js和模型转换器:

npm install @tensorflow/tfjs-node @tensorflow/tfjs-converter

完整实现代码

const tf = require('@tensorflow/tfjs-node');
const tfc = require('@tensorflow/tfjs-converter');
const fs = require('fs');
const path = require('path');

// 导入ImageNet类别映射文件(需确保本地存在该文件,或直接在代码中定义类别)
const IMAGENET_CLASSES = require('./imagenet_classes');

// MobileNet预训练模型配置
const GOOGLE_CLOUD_STORAGE_DIR = 'https://storage.googleapis.com/tfjs-models/savedmodel/';
const MODEL_FILE_URL = `${GOOGLE_CLOUD_STORAGE_DIR}mobilenet_v1_1.0_224/optimized_model.pb`;
const WEIGHT_MANIFEST_FILE_URL = `${GOOGLE_CLOUD_STORAGE_DIR}mobilenet_v1_1.0_224/weights_manifest.json`;
const INPUT_NODE_NAME = 'input';
const OUTPUT_NODE_NAME = 'MobilenetV1/Predictions/Reshape_1';

// 加载预训练MobileNet模型
async function loadMobileNetModel() {
  const model = await tfc.loadFrozenModel(MODEL_FILE_URL, WEIGHT_MANIFEST_FILE_URL);
  console.log('✅ MobileNet模型加载完成');
  return model;
}

// 图像预处理:转换为模型要求的格式
function preprocessImage(imagePath) {
  // 读取本地图像文件
  const imageBuffer = fs.readFileSync(imagePath);
  // 解码JPEG并调整尺寸为224x224(MobileNet的输入要求)
  const tfImage = tf.node.decodeJpeg(imageBuffer, 3)
    .resizeNearestNeighbor([224, 224])
    .toFloat()
    .expandDims();
  
  // 归一化像素值到[-1, 1]范围,匹配模型训练时的输入标准
  return tfImage.div(tf.scalar(127.5)).sub(tf.scalar(1));
}

// 执行图像分类预测
async function predictImage(model, imagePath) {
  const preprocessedImage = preprocessImage(imagePath);
  
  // 运行模型预测
  const predictions = model.execute(preprocessedImage, OUTPUT_NODE_NAME);
  
  // 获取置信度最高的前5个预测结果
  const topPredictions = await tf.topk(predictions, 5).data();
  const classIndices = topPredictions.slice(0, 5);
  const probabilities = topPredictions.slice(5, 10);
  
  // 打印分类结果
  console.log('\n📊 图像分类结果:');
  classIndices.forEach((index, i) => {
    console.log(`${i+1}. ${IMAGENET_CLASSES[index]}: ${(probabilities[i] * 100).toFixed(2)}%`);
  });
  
  // 手动清理Tensor,避免Node.js环境内存泄漏
  preprocessedImage.dispose();
  predictions.dispose();
}

// 主执行函数
async function main() {
  try {
    const model = await loadMobileNetModel();
    // 替换为你的测试图像本地路径
    const testImagePath = path.join(__dirname, 'test.jpg');
    await predictImage(model, testImagePath);
  } catch (err) {
    console.error('❌ 执行出错:', err);
  }
}

main();

关键细节说明

  • 依赖选择:使用@tensorflow/tfjs-node而非基础的tfjs,是为了利用Node.js的原生TensorFlow绑定,获得更快的运算速度
  • 模型加载:通过tfjs-converter加载冻结的.pb格式MobileNet模型,你也可以将模型文件下载到本地,修改URL为本地文件路径以提高加载速度
  • 图像预处理:MobileNet对输入有严格要求——尺寸224x224、像素值归一化到[-1,1],这一步是保证预测准确的关键
  • 内存管理:Node.js环境下不会自动回收Tensor内存,所以每次预测后必须调用.dispose()清理,避免内存溢出

内容的提问来源于stack exchange,提问作者YMLEE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:23