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

在Firebase Cloud Functions中使用Google Vision API时遇TypeError错误

解决Firebase Cloud Functions中Google Vision API初始化报错的问题

你遇到的TypeError: require(...) is not a function错误,核心原因是你使用的@google-cloud/vision@0.14.0版本已经更新了SDK的初始化逻辑,不再支持旧示例里直接调用require('@google-cloud/vision')()的写法。下面是具体的修复步骤:

1. 修正Vision SDK的初始化代码

把原来的Vision导入语句:

const vision = require('@google-cloud/vision')();

替换为新版本的客户端初始化方式:

const vision = require('@google-cloud/vision').v1;
const client = new vision.ImageAnnotatorClient();

新版本的Vision SDK采用了类实例化的方式创建客户端,不再直接导出可调用的初始化函数,这是导致你报错的直接原因。

2. 更新安全检测的调用逻辑

旧示例里的detectSafeSearch方法在新版本中也被替换,同时返回的数据结构也发生了变化——原来的布尔值判断变成了置信度枚举值。你需要修改blurOffensiveImages函数中的检测逻辑:

把原来的:

return vision.detectSafeSearch(file).then(data => {
  const safeSearch = data[0];
  console.log('SafeSearch results on image', safeSearch);
  if (safeSearch.adult || safeSearch.violence) {
    return blurImage(object.name, object.bucket, object.metadata);
  }
});

替换为:

return client.safeSearchDetection(file).then(data => {
  const safeSearch = data[0].safeSearchAnnotation;
  console.log('SafeSearch results on image', safeSearch);
  // 新版本置信度为枚举值,仅当达到LIKELY/VERY_LIKELY时判定为违规
  if (safeSearch.adult === 'LIKELY' || safeSearch.adult === 'VERY_LIKELY' || 
      safeSearch.violence === 'LIKELY' || safeSearch.violence === 'VERY_LIKELY') {
    return blurImage(object.name, object.bucket, object.metadata);
  }
});

3. 验证修改后的完整代码片段

修改后的核心代码部分如下,blurImage函数可以保持原逻辑不变:

'use strict';
const functions = require('firebase-functions');
const mkdirp = require('mkdirp-promise');
const gcs = require('@google-cloud/storage')();
// 修正Vision SDK导入
const vision = require('@google-cloud/vision').v1;
const client = new vision.ImageAnnotatorClient();
const spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

exports.blurOffensiveImages = functions.storage.object().onChange(event => {
  const object = event.data;
  const file = gcs.bucket(object.bucket).file(object.name);

  if (object.resourceState === 'not_exists') {
    return console.log('This is a deletion event.');
  }

  // 修正SafeSearch调用逻辑
  return client.safeSearchDetection(file).then(data => {
    const safeSearch = data[0].safeSearchAnnotation;
    console.log('SafeSearch results on image', safeSearch);
    if (safeSearch.adult === 'LIKELY' || safeSearch.adult === 'VERY_LIKELY' || 
        safeSearch.violence === 'LIKELY' || safeSearch.violence === 'VERY_LIKELY') {
      return blurImage(object.name, object.bucket, object.metadata);
    }
  });
});

// blurImage函数保持原代码不变...

完成以上修改后,重新运行firebase deploy --only functions应该就能成功部署了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:19