Google Cloud Vision API检测到所有不当图像

问题描述

我实现了这个Google Cloud函数示例,以审核在Firebase存储上载的图像:LINK 但是我有一个问题,此功能几乎可以检测到我上传的每张图像,就像它们不适当一样,即使显然不是,这也是该函数代码

exports.blurOffensiveImages = functions.storage.object().onFinalize(async (object) => {
  if (object.name.startsWith(`${BLURRED_FOLDER}/`)) {
    console.log(`Ignoring upload "${object.name}" because it was already blurred.`);
    return null;
  }
  
  const visionClient = new vision.ImageAnnotatorClient();
  const data = await visionClient.safeSearchDetection(
    `gs://${object.bucket}/${object.name}`
  );

  const safeSearch = data[0].safeSearchAnnotation;
  console.log('SafeSearch results on image',safeSearch);


  if (
    safeSearch.adult !== VERY_UNLIKELY ||
    safeSearch.spoof !== VERY_UNLIKELY ||
    safeSearch.medical !== VERY_UNLIKELY ||
    safeSearch.violence !== VERY_UNLIKELY ||
    safeSearch.racy !== VERY_UNLIKELY
  ) {
    console.log('Offensive image found. Blurring.');
    //DO SOME STUFF
  }

  return null;
});

解决方法

我也遇到过相同的行为。

在打字稿定义中,该界面有点让人误解,我注意到诸如google.cloud.vision.v1.ISafeSearchAnnotation.adult之类的属性具有以下类型定义: vision.protos.google.cloud.vision.v1。喜欢| “未知” | “ VERY_UNLIKELY” | “异常” | “可能” | “喜欢” | “ VERY_LIKELY” |空|未定义。

因此,它们可以返回似然枚举或值的字符串。当我更改条件以检查字符串“ VERY_UNLIKELY”而不是枚举时,得到了预期的结果。

如果返回枚举,我很可能会同时检查枚举和字符串以防止将来的更改。