

AzureのFaceAPIを利用していますが、初心者ゆえにスクリプトの詳細やエラーの意味がわかりません。サーチしましたが理解することが困難でした。  
どなたか解決方法を教えてください。

エラー内容

[code]

    Traceback (most recent call last):
      File "face.py", line 29, in <module>
        fr = face["faceRectangle"]
    TypeError: string indices must be integers
    
[/code]

コード

[code]

    import requests
    import matplotlib.pyplot as plt
    from PIL import Image
    from matplotlib import patches
    from io import BytesIO
    
    subscription_key = "＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊"
    assert subscription_key
    
    face_api_url = 'https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect'
    
    image_url = 'https://how-old.net/Images/faces2/main007.jpg'
    
    headers = {'Ocp-Apim-Subscription-Key': '＊＊＊＊＊＊＊＊＊＊＊'}
    params = {
        'returnFaceId': 'true',
        'returnFaceLandmarks': 'false',
        'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,' +
        'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
    }
    data = {'url': image_url}
    response = requests.post(face_api_url, params=params, headers=headers, json=data)
    faces = response.json()
    
    image = Image.open(BytesIO(requests.get(image_url).content))
    plt.figure(figsize=(8, 8))
    ax = plt.imshow(image, alpha=0.6)
    for face in faces:
        fr = face["faceRectangle"]
        fa = face["faceAttributes"]
        origin = (fr["left"], fr["top"])
        p = patches.Rectangle(
            origin, fr["width"], fr["height"], fill=False, linewidth=2, color='b')
        ax.axes.add_patch(p)
        plt.text(origin[0], origin[1], "%s, %d"%(fa["gender"].capitalize(), fa["age"]),
                 fontsize=20, weight="bold", va="bottom")
    _ = plt.axis("off")
    
[/code]


CC BY-SA 4.0
2018-10-19T06:44:24.430
49443
2022-03-13T13:03:50.367
2021-02-04T11:57:34.683
3060
29253
question
python azure
Python のエラー TypeError: string indices must be integers


質問者さんは、`faces` が辞書のリストになっていることを期待されていると思いますが、辞書になっているようです。

* * *

この投稿は @mjy
さんの[コメント](https://ja.stackoverflow.com/questions/49443/#comment51452_49443)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-02-04T11:51:15.727
73797
2021-02-04T11:51:15.727
9820
49443
answer