如何在Amazon Rekognition Java程序中指定S3存储桶子文件夹
访问S3子文件夹中的图片来添加到Rekognition集合
没问题,这个需求实现起来非常简单!S3里所谓的“子文件夹”本质上只是**对象键(Object Key)**的一部分(S3本身是扁平存储结构,没有真实的文件夹概念),你只需要把完整的文件路径作为对象名称传给S3Object的withName()方法就可以了。
修改后的代码示例
下面是调整后的完整代码,我标注了关键修改的部分:
public class AddFacesToCollection { public static final String collectionId = "MyCollection"; // 保持桶名称不变 public static final String bucket = "bucketName"; // 这里改成子文件夹下的完整路径 public static final String photo = "image/image1.jpg"; public static void main(String[] args) throws Exception { AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); Image image = new Image() .withS3Object(new S3Object() .withBucket(bucket) .withName(photo)); // 直接传入带层级路径的对象键 IndexFacesRequest indexFacesRequest = new IndexFacesRequest() .withImage(image) .withQualityFilter(QualityFilter.AUTO) .withMaxFaces(1) .withCollectionId(collectionId) .withExternalImageId(photo) // 也可以根据需求修改,比如只保留文件名作为外部ID .withDetectionAttributes("DEFAULT"); IndexFacesResult indexFacesResult = rekognitionClient.indexFaces(indexFacesRequest); System.out.println("Results for " + photo); } }
几个需要注意的细节
- 对象键格式要准确:层级之间用斜杠
/分隔,比如folder1/subfolder/photo.jpg,不需要在开头额外加斜杠 - 权限校验:确保你的Rekognition服务角色拥有访问该S3路径的权限,比如在IAM策略中添加
arn:aws:s3:::bucketName/image/*这类资源的访问权限 - 批量处理拓展:如果需要处理某个子文件夹下的所有图片,可以结合AWS S3 Java SDK的
listObjectsV2()方法,通过withPrefix("image/")筛选该路径下的所有对象,再循环处理每一张图片
内容的提问来源于stack exchange,提问作者Harsh Pithadia
相关产品推荐
相关产品推荐

