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

使用AWS Rekognition对比S3图片时遇InvalidImageFormatException问题

解决AWS Rekognition CompareFaces的InvalidImageFormatException错误

问题背景

尝试使用AWS Rekognition对比S3存储桶内的两张图片时,触发InvalidImageFormatException错误。已确认图片存在于S3中,且Rekognition凭证具备S3读取权限,按规范通过S3Object指定了正确的桶名和图片名,但报错依旧。同时疑惑为何官方提供的S3Object读取方式无法使用,是否需要将图片转为base64或ByteBuffer格式。

初始代码:

String reference = "reference.jpg";
String target = "selfie.jpg";
String bucket = "pruebas";

CompareFacesRequest request = new CompareFacesRequest()
        .withSourceImage(new Image().withS3Object(new S3Object()
                .withName(reference).withBucket(bucket)))
        .withTargetImage(new Image().withS3Object(new S3Object()
                .withName(target).withBucket(bucket)))
        .withSimilarityThreshold(similarityThreshold);

AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.standard()
        .withRegion(Regions.US_EAST_1).build();
CompareFacesResult compareFacesResult= rekognitionClient.compareFaces(request);

错误信息:

Exception in thread "main" com.amazonaws.services.rekognition.model.InvalidImageFormatException: Request has invalid image format (Service: AmazonRekognition; Status Code: 400; Error Code: InvalidImageFormatException; 

更新后的代码改为从S3拉取字节流传入,但问题仍未解决,寻求解决方案。

解决方案

  • 验证图片格式与编码合规性
    Rekognition仅支持JPEG、PNG、BMP、GIF(仅第一帧)、TIFF格式,且要求图片为RGB编码(不支持CMYK)。检查你的图片:

    • 确认后缀名与实际格式一致(比如不要把WebP文件重命名为.jpg)
    • 用图片工具(如GIMP、Photoshop)重新导出为标准RGB格式的JPEG/PNG,上传回S3后重试。
  • 修正S3对象的Content-Type元数据
    使用S3Object方式传递图片时,Rekognition会依赖S3对象的Content-Type元数据判断格式。若元数据错误(比如JPEG图片的Content-Type设为application/octet-stream),会直接触发格式错误。
    修复步骤:在S3控制台找到对应对象,进入「元数据」设置页,修改为正确的类型(JPEG设为image/jpeg,PNG设为image/png)。

  • 统一SDK客户端的区域配置
    你更新后的代码中,S3客户端使用US_EAST_1区域,但Rekognition客户端使用US_EAST_2。虽然跨区域调用本身允许,但可能因跨区域访问的隐性限制导致图片读取异常。建议将两个客户端的区域统一,或确保S3桶未设置跨区域访问的限制策略。

  • 确认字节流读取的完整性
    检查getObjectBytes方法拉取的字节流是否完整:可以将字节流写入本地文件,验证文件能否正常打开,确认未出现数据截断或损坏。

  • 替换不安全的字节流创建方式
    避免使用SdkBytes.fromByteArrayUnsafe,该方法不会复制字节数组,若后续数组被修改可能导致数据异常。改用SdkBytes.fromByteArray(sourceStream),确保数据的安全性和完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:01:20