AWS Boto3(Rekognition)批量处理图片及单独保存响应技术问询
嘿,我来帮你搞定这两个批量处理的小问题,都是日常用AWS Rekognition时很常见的场景~
问题1:高效生成image1至image100的文件名列表
手动敲100个文件名确实太折磨人了,用Python的列表推导式就能轻松解决,一行代码直接生成你要的列表:
image_list = [f'image{i}.jpg' for i in range(1, 101)]
简单解释下:
range(1, 101)会生成从1到100的整数(因为range是左闭右开规则,所以右边写101才会包含100)- f-string
f'image{i}.jpg'会自动把每个整数i拼接到文件名里,生成image1.jpg、image2.jpg……一直到image100.jpg
如果之后要处理更多图片(比如到200),只要改range的第二个参数就行,完全不用手动修改列表,效率直接拉满!
问题2:每张图片响应单独保存为JSON文件
你原来的代码最后只保存了最后一张图片的响应(因为循环结束后response是最后一次循环的结果),要实现每张单独保存,把JSON写入的逻辑放到循环内部就行,而且可以用原图片的名字来命名对应的JSON文件,方便后续对应查找:
修改后的完整代码如下:
import json from pathlib import Path import boto3 # 初始化Rekognition客户端 client = boto3.client('rekognition') # 高效生成文件名列表 image_list = [f'image{i}.jpg' for i in range(1, 101)] responselist = [] for image in image_list: response = client.detect_labels( Image={ 'S3Object': { 'Bucket': 'test1', 'Name': image }}) responselist.append(response) print(response) # 每张图片单独保存JSON,用原图片名(去掉后缀)作为JSON文件名 json_filename = f'{image.split(".")[0]}.json' json_content = json.dumps(response, indent=4) # indent=4让JSON格式更美观,可选 Path(json_filename).write_text(json_content)
补充说明:
image.split(".")[0]会把image1.jpg拆分成['image1', 'jpg'],取第一个元素就是不带后缀的文件名,这样生成的JSON就是image1.json,和原图片一一对应- 加上
indent=4是让生成的JSON文件排版更整齐,方便阅读,不需要的话可以直接去掉这个参数
内容的提问来源于stack exchange,提问作者PepperTuna
相关产品推荐
相关产品推荐

