Amazon Rekogntion图像:错误InvalidImageFormatException:请求的图像格式无效

蒂尔梅

我正在尝试比较从Node.Js应用程序调用AWS Rekognition的面孔。比较S3存储桶上的两个图像时,一切都很好,但是当我尝试从客户端(React Native / Expo应用程序)上载本地图像以与存储在此存储桶中的另一个图像进行比较时,出现了错误InvalidImageFormatException: Request has invalid image format

这张图片是jpeg 250像素的正方形,已作为有效的base64字符串发送(已测试了atob)。显然,它符合此处提出的条件:https ://docs.aws.amazon.com/rekognition/latest/dg/limits.html

下面是一些代码片段:

捕获图像:

const takeImgHandler = async () => {
    const img = await ImagePicker.launchCameraAsync(getImgProps);
    editImg(img);
};

编辑图像:

const editImg = async img => {
   ...
    const actions = [
      { resize: { 250, 250 } },
    ];

    const saveOptions = {      
      base64: true,
    };

    const edited = await ImageManipulator.manipulateAsync(img.uri, actions, saveOptions);
    setState({ ...state, img: edited });    
};

设置对我的服务器的detectFaces调用:

// sourceImg is appState.img.base64
const compareImagesHandler = async sourceImg => {
    const targetImage = {
      S3Object: {
        Bucket: 'my-bucket-name',
        Name: 'image-name.jpg',
      },
    }; 

    const sourceImage = {
      Bytes: sourceImg,
};

const comparison = await ajax({ method: 'POST', url: `url-to-server-route`, data: { sourceImage, targetImage }});
    console.log('comparison: >>>>>> ', comparison);
    return comparison;
};

服务器控制程序运行以下功能:

const awsConfig = () => {
  const config = new AWS.Config({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    region: process.env.AWS_DEFAULT_REGION,
  });
  AWS.config.update(config);
};

const compareImages = async (SourceImage, TargetImage, cb) => {
  const client = new AWS.Rekognition();

  // Logging the base64 string to validate it, externally, just to make
     sure that it´s valid!
  console.log('sourceImag.Bytes: >>>>>> ', SourceImage.Bytes);

  const params = {
    SourceImage,
    TargetImage,
    SimilarityThreshold: 50,
  };

  client.compareFaces(params, (err, response) => {
    if (err) {
      console.log('err: >>>>>> ', err);
      return cb({ err });
    }

    if (!response.FaceMatches.length) {
      return cb({ err: 'Face not recongized' });
    }

    response.FaceMatches.forEach(data => {
      const position = data.Face.BoundingBox;
      const similarity = data.Similarity;
      console.log(`The face at: ${position.Left}, ${position.Top} matches with ${similarity} % confidence`);
      return cb({ success: data.Similarity });
    });
  });
};
蒂尔梅

解决了!

需要两个调整。首先,sourceImg使用编码文件encodeURIComponent

const sourceImage = encodeURIComponent(sourceImg);

在服务器上,我应该创建一个Buffer,而不是发送base64字符串:

const imageBuffer = Buffer.from(decodeURIComponent(SourceImage), 'base64');

因此,发送给AWS的正文应为:

const params = {    
    SourceImage: {
      Bytes: imageBuffer,
    }
    TargetImage,
    SimilarityThreshold: 50,
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从SQLite中检索图像,“图像格式无效或不受支持”

来自分类Dev

PDFKit:PNG的未知图像格式错误

来自分类Dev

检查图像格式的in_array错误

来自分类Dev

为什么下载的图像格式错误?

来自分类Dev

glGenTextures的图像格式

来自分类Dev

Amazon Athena:Dateparse 显示格式无效

来自分类Dev

安全错误#2122从Amazon Cloudfront加载图像

来自分类Dev

安全错误#2122从Amazon Cloudfront加载图像

来自分类Dev

Amazon MWSAuthToken错误响应

来自分类Dev

Amazon MWSAuthToken错误响应

来自分类Dev

在Amazon S3中旋转图像

来自分类Dev

Java:如何使用Selenium从Amazon抓取图像?

来自分类Dev

Python Amazon Product Api无法获取图像

来自分类Dev

从Amazon S3存储删除图像

来自分类Dev

AFNewtorking从Amazon S3加载图像

来自分类Dev

Java:如何使用Selenium从Amazon抓取图像?

来自分类Dev

Amazon S3-载波图像上传

来自分类Dev

Python Amazon Product Api无法获取图像

来自分类Dev

Amazon MWS API请求报告错误

来自分类Dev

使用DotNetOpenAuth返回Amazon(400)错误请求

来自分类Dev

使用DotNetOpenAuth返回Amazon(400)错误请求

来自分类Dev

Amazon Elastic Transcoder Http请求错误

来自分类Dev

iconutil错误:“不支持的图像格式”

来自分类Dev

无法获取图像格式-生成EACCES错误

来自分类Dev

Creator CI20:bootm命令的图像格式错误

来自分类Dev

请求Amazon Web Service的授权

来自分类Dev

Amazon Lambda调用错误

来自分类Dev

Amazon Pay SDK CompleteCheckoutSession错误

来自分类Dev

Amazon DynamoDB updateTable SerializationException 错误