如何解决AWS Rekognition中多个人脸BoundingBox重复打印首个的问题?
解决AWS Rekognition多个人脸BoundingBox打印问题
嘿,我一眼就看出你代码里的问题啦!你当前的循环逻辑完全搞错了方向,才会导致不管循环多少次都只输出第一个人脸的BoundingBox。
问题根源
你遍历的是整个response对象,而不是里面存储所有人脸信息的FaceDetails列表;而且手动固定了i=0,每次循环都硬取第一个人脸的数据,自然重复输出同一个结果。
正确解法
直接遍历response['FaceDetails']这个列表就好——列表里的每一个元素都对应一张人脸的完整详情,包括它的BoundingBox属性,根本不需要手动维护索引变量。
修正后的代码示例
# 遍历所有人脸详情 for face_detail in response['FaceDetails']: print('Found face at...') bbox = face_detail['BoundingBox'] # 打印BoundingBox的各项参数 print(f"BoundingBox Width: {bbox['Width']}%") print(f"BoundingBox Height: {bbox['Height']}%") print(f"BoundingBox Left: {bbox['Left']}%") print(f"BoundingBox Top: {bbox['Top']}%") print('---') # 分隔不同人脸的信息
如果想同时标注人脸的序号(比如第1张、第2张),可以用enumerate函数来获取索引:
# 带序号的遍历,start=1让序号从1开始计数 for face_num, face_detail in enumerate(response['FaceDetails'], start=1): print(f'Found face {face_num} at...') bbox = face_detail['BoundingBox'] # 保留两位小数让输出更整洁 print(f"Width: {bbox['Width']:.2f}%") print(f"Height: {bbox['Height']:.2f}%") print(f"Left: {bbox['Left']:.2f}%") print(f"Top: {bbox['Top']:.2f}%") print('---')
这样不管图片里有几张人脸,都会逐个输出它们的BoundingBox信息啦!
内容的提问来源于stack exchange,提问作者H.Dai
相关产品推荐
相关产品推荐

