当我将图像上传到s3存储桶并调用AWS Rekognition detect_labels时,我将获得如下所示的检测到的标签的字典
'标签':【名称】:【植物】,【信心】:99.70314025878906,'示例':[],'Parents':[]},'Name':“花”、“自信”:98.37027740478516,'示例':[],'Parents':['Name':'Plant'}]}
但这里我需要返回的图像与边界框的对象是确定的,这是如何实现的?
7vhp5slm1#
您必须使用rekognition.detect_labels方法对图像执行对象检测。然后可以使用Labels列表的BoundingBox属性来获取边界框的坐标,下面的代码可以是一个很好的开始。
rekognition.detect_labels
Labels
BoundingBox
import boto3 import io from PIL import Image, ImageDraw, ImageFont file_name = 'plant.jpg' # Get Rekognition client rek_client = boto3.client('rekognition') with open(file_name, 'rb') as im: # Read image bytes im_bytes = im.read() # Upload image to AWS response = rek_client.detect_labels(Image={'Bytes': im_bytes}) # Get default font to draw texts image = Image.open(io.BytesIO(im_bytes)) font = ImageFont.truetype('arial.ttf', size=80) draw = ImageDraw.Draw(image) # Get all labels w, h = image.size for label in response['Labels']: name = label['Name'] # Draw all instancex box, if any for instance in label['Instances']: bbox = instance['BoundingBox'] x0 = int(bbox['Left'] * w) y0 = int(bbox['Top'] * h) x1 = x0 + int(bbox['Width'] * w) y1 = y0 + int(bbox['Height'] * h) draw.rectangle([x0, y0, x1, y1], outline=(255, 0, 0), width=10) draw.text((x0, y1), name, font=font, fill=(255, 0, 0)) image.save('labels.jpg')
字符串
b91juud32#
DetectLabels API documentation:DetectLabels返回Instance对象数组中common对象标签示例的边界框。Instance对象包含一个BoundingBox对象,用于表示图像上标签的位置。它还包括检测边界框的置信度。这在Detecting labels documentation中有详细说明Amazon Rekognition Image和Amazon Rekognition Video可以返回汽车、家具、服装或宠物等常见对象标签的边界框。不为不太常见的对象标签返回边界框信息。您可以使用边界框来查找图像中对象的确切位置,计算检测到的对象的示例数,或使用边界框尺寸来测量对象的大小。简而言之,并非所有标签都返回边界框信息。@Allan Chua的代码仅当标签是具有边界框信息的“常见对象”时才会在图像中绘制边界框。在您提供的示例API响应中,所有标签都没有边界框信息。
2条答案
按热度按时间7vhp5slm1#
您必须使用
rekognition.detect_labels
方法对图像执行对象检测。然后可以使用Labels
列表的BoundingBox
属性来获取边界框的坐标,下面的代码可以是一个很好的开始。字符串
b91juud32#
DetectLabels API documentation:
DetectLabels返回Instance对象数组中common对象标签示例的边界框。Instance对象包含一个BoundingBox对象,用于表示图像上标签的位置。它还包括检测边界框的置信度。
这在Detecting labels documentation中有详细说明
Amazon Rekognition Image和Amazon Rekognition Video可以返回汽车、家具、服装或宠物等常见对象标签的边界框。不为不太常见的对象标签返回边界框信息。您可以使用边界框来查找图像中对象的确切位置,计算检测到的对象的示例数,或使用边界框尺寸来测量对象的大小。
简而言之,并非所有标签都返回边界框信息。@Allan Chua的代码仅当标签是具有边界框信息的“常见对象”时才会在图像中绘制边界框。在您提供的示例API响应中,所有标签都没有边界框信息。