首页 > 解决方案 > 在图像上绘制文本

问题描述

我是 OpenCV 的初学者,在使用 Face API 时,我想在其周围绘制矩形并在其上打印文本(年龄、性别)。我怎么能做到这一点?我在下面附上了我的代码。

import requests
# If you are using a Jupyter notebook, uncomment the following line.
#%matplotlib inline
import matplotlib.pyplot as plt
from PIL import Image
from io import BytesIO

# Replace <Subscription Key> with your valid subscription key.
subscription_key = "1ed933c3d81f4b5d8b998c81f3f48cf8"
assert subscription_key

# You must use the same region in your REST call as you used to get your
# subscription keys. For example, if you got your subscription keys from
# westus, replace "westcentralus" in the URI below with "westus".
#
# Free trial subscription keys are generated in the westcentralus region.
# If you use a free trial subscription key, you shouldn't need to change
# this region.
vision_base_url = "https://japaneast.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false"

analyze_url = vision_base_url + "analyze"

# Set image_path to the local path of an image that you want to analyze.
image_path = "image.jpg"

# Read the image into a byte array
image_data = open(image_path, "rb").read()
headers    = {'Ocp-Apim-Subscription-Key': subscription_key,
              'Content-Type': 'application/octet-stream'}
params = {
    'returnFaceId': 'true',
    'returnFaceLandmarks': 'false',
    'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,' +
    'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
}

response = requests.post(
    analyze_url, headers=headers, params=params, data=image_data)
response.raise_for_status()

# The 'analysis' object contains various fields that describe the image. The most
# relevant caption for the image is obtained from the 'description' property.
analysis = response.json()
print(analysis)
# image_caption = analysis["description"]["captions"][0]["text"].capitalize()

# Display the image and overlay it with the caption.
image = Image.open(BytesIO(image_data))
plt.imshow(image)
plt.axis("off")
plt.show()
# _ = plt.title(image_caption, size="x-large", y=-0.1)
import requests
from io import BytesIO
from PIL import Image, ImageDraw,ImageFont

def getRectangle(faceDictionary):
    rect = faceDictionary['faceRectangle']
    left = rect['left']
    top = rect['top']
    bottom = left + rect['height']
    right = top + rect['width']
    return ((left, top), (bottom, right))

def getAge(faceDictionary):
    f=faceDictionary['faceAttributes']
    age=f['age']
    return age
def getGender(faceDictionary):
    f=faceDictionary['faceAttributes']
    gender=f['gender']
    return gender
draw = ImageDraw.Draw(image)
for face in analysis:
    draw.rectangle(getRectangle(face), outline='red')
    draw.text(getRectangle(face)[1],getAge(face), fill=(255, 0, 0))

特别是给出错误的行是最后一行。'float' 类型的参数不可迭代

但是当我注释掉最后一行时,代码工作得很好。

标签: pythonimagepython-imaging-library

解决方案


推荐阅读