質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Python 3.x

    7451questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python3で指定の項目の値を出力したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 124

fukku

score 1

 実現したいこと

AWSのRekognition(画像解析サービス)から返される解析結果の中から、指定の項目を出力したいと考えています。
初歩的な質問で恐縮ですがどのような処理を記述をすればよいかご教示いただけないでしょうか。

 希望する出力の形

AgeRange : Low: 26, High: 43
Smile : true, 99.25891876220703%
Eyeglasses : true, 99.99998474121094%

 Rekognitionの解析結果

{ "FaceDetails": [ { "BoundingBox": { "Width": 0.2618750035762787, "Height": 0.3930581510066986, "Left": 0.14937500655651093, "Top": 0.13414634764194489 }, "AgeRange": { "Low": 26, "High": 43 }, "Smile": { "Value": true, "Confidence": 99.25891876220703 }, "Eyeglasses": { "Value": true, "Confidence": 99.99998474121094 }, "Sunglasses": { "Value": true, "Confidence": 98.9379653930664 }, "Gender": { "Value": "Female", "Confidence": 100 }, "Beard": { "Value": false, "Confidence": 99.9868392944336 }, "Mustache": { "Value": false, "Confidence": 98.99354553222656 }, "EyesOpen": { "Value": true, "Confidence": 96.80782318115234 }, "MouthOpen": { "Value": true, "Confidence": 86.21734619140625 }, "Emotions": [ { "Type": "HAPPY", "Confidence": 99.55255889892578 }, { "Type": "SAD", "Confidence": 0.5614995956420898 }, { "Type": "CALM", "Confidence": 0.46750307083129883 } ], "Landmarks": [ { "Type": "eyeLeft", "X": 0.2425708919763565, "Y": 0.29896146059036255 }, { "Type": "eyeRight", "X": 0.3258243203163147, "Y": 0.2869422733783722 }, { "Type": "nose", "X": 0.29795974493026733, "Y": 0.33913564682006836 }, { "Type": "mouthLeft", "X": 0.2424982190132141, "Y": 0.4403011202812195 }, { "Type": "mouthRight", "X": 0.3285549283027649, "Y": 0.42653071880340576 }, { "Type": "leftPupil", "X": 0.2514769434928894, "Y": 0.2966562509536743 }, { "Type": "rightPupil", "X": 0.3344457149505615, "Y": 0.2878323793411255 }, { "Type": "leftEyeBrowLeft", "X": 0.20776528120040894, "Y": 0.24588149785995483 }, { "Type": "leftEyeBrowUp", "X": 0.23486393690109253, "Y": 0.22838211059570312 }, { "Type": "leftEyeBrowRight", "X": 0.26713693141937256, "Y": 0.24221475422382355 }, { "Type": "rightEyeBrowLeft", "X": 0.29768621921539307, "Y": 0.24332448840141296 }, { "Type": "rightEyeBrowUp", "X": 0.324931800365448, "Y": 0.22636346518993378 }, { "Type": "rightEyeBrowRight", "X": 0.35234054923057556, "Y": 0.23396380245685577 }, { "Type": "leftEyeLeft", "X": 0.22536121308803558, "Y": 0.3036869764328003 }, { "Type": "leftEyeRight", "X": 0.25859442353248596, "Y": 0.2963939905166626 }, { "Type": "leftEyeUp", "X": 0.24218744039535522, "Y": 0.2921774685382843 }, { "Type": "leftEyeDown", "X": 0.24354742467403412, "Y": 0.3046663999557495 }, { "Type": "rightEyeLeft", "X": 0.30785858631134033, "Y": 0.2880838215351105 }, { "Type": "rightEyeRight", "X": 0.3429398238658905, "Y": 0.2862967848777771 }, { "Type": "rightEyeUp", "X": 0.32599735260009766, "Y": 0.28063637018203735 }, { "Type": "rightEyeDown", "X": 0.3260765075683594, "Y": 0.29300010204315186 }, { "Type": "noseLeft", "X": 0.2778167128562927, "Y": 0.38191738724708557 }, { "Type": "noseRight", "X": 0.31011009216308594, "Y": 0.3755253553390503 }, { "Type": "mouthUp", "X": 0.2913239300251007, "Y": 0.4082499146461487 }, { "Type": "mouthDown", "X": 0.29487860202789307, "Y": 0.4634847044944763 } ], "Pose": { "Roll": -7.02242374420166, "Yaw": 17.866071701049805, "Pitch": 14.642864227294922 }, "Quality": { "Brightness": 41.43524169921875, "Sharpness": 99.98487854003906 }, "Confidence": 99.82343292236328 } ] }

 実行処理

python3 です。

from __future__ import print_function

import boto3
from decimal import Decimal
import json
import urllib

print('Loading function')

s3 = boto3.client('s3')
rekognition = boto3.client('rekognition')


# --------------- Helper Functions to call Rekognition APIs ------------------


def detect_faces(bucket, key):
    response = rekognition.detect_faces(
        Image={
            "S3Object": {
                "Bucket": bucket,
                "Name": key
            }
        },
        Attributes=['ALL']
    )
    return response


#def detect_labels(bucket, key):
#    response = rekognition.detect_labels(Image={"S3Object": {"Bucket": bucket, "Name": key}})

    # Sample code to write response to DynamoDB table 'MyTable' with 'PK' as Primary Key.
    # Note: role used for executing this Lambda function should have write access to the table.
    #table = boto3.resource('dynamodb').Table('MyTable')
    #labels = [{'Confidence': Decimal(str(label_prediction['Confidence'])), 'Name': label_prediction['Name']} for label_prediction in response['Labels']]
    #table.put_item(Item={'PK': key, 'Labels': labels})
#    return response


#def index_faces(bucket, key):
    # Note: Collection has to be created upfront. Use CreateCollection API to create a collecion.
    #rekognition.create_collection(CollectionId='BLUEPRINT_COLLECTION')
    #response = rekognition.index_faces(Image={"S3Object": {"Bucket": bucket, "Name": key}}, CollectionId="BLUEPRINT_COLLECTION")
    #return response


# --------------- Main handler ------------------


def lambda_handler(event, context):
    '''Demonstrates S3 trigger that uses
    Rekognition APIs to detect faces, labels and index faces in S3 Object.
    '''
    #print("Received event: " + json.dumps(event, indent=2))

    # Get the object from the event
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    try:
        # Calls rekognition DetectFaces API to detect faces in S3 object
        response = detect_faces(bucket, key)

        # Calls rekognition DetectLabels API to detect labels in S3 object
        #response = detect_labels(bucket, key)

        # Calls rekognition IndexFaces API to detect faces in S3 object and index faces into specified collection
        #response = index_faces(bucket, key)

        # Print response to console.
        ※ここに指定の項目を出力する処理を記述したいです。


        return response
    except Exception as e:
        print(e)
        print("Error processing object {} from bucket {}. ".format(key, bucket) +
              "Make sure your object and bucket exist and your bucket is in the same region as this function.")
        raise e

よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

地道に要素を探して.formatで整形します。
以下ではtrueTrueと出力されます。

import json
response = json.loads("""
{ "FaceDetails": [ { "BoundingBox": { "Width": 0.2618750035762787, "Height": 0.3930581510066986, "Left": 0.14937500655651093, "Top": 0.13414634764194489 }, "AgeRange": { "Low": 26, "High": 43 }, "Smile": { "Value": true, "Confidence": 99.25891876220703 }, "Eyeglasses": { "Value": true, "Confidence": 99.99998474121094 }, "Sunglasses": { "Value": true, "Confidence": 98.9379653930664 }, "Gender": { "Value": "Female", "Confidence": 100 }, "Beard": { "Value": false, "Confidence": 99.9868392944336 }, "Mustache": { "Value": false, "Confidence": 98.99354553222656 }, "EyesOpen": { "Value": true, "Confidence": 96.80782318115234 }, "MouthOpen": { "Value": true, "Confidence": 86.21734619140625 }, "Emotions": [ { "Type": "HAPPY", "Confidence": 99.55255889892578 }, { "Type": "SAD", "Confidence": 0.5614995956420898 }, { "Type": "CALM", "Confidence": 0.46750307083129883 } ], "Landmarks": [ { "Type": "eyeLeft", "X": 0.2425708919763565, "Y": 0.29896146059036255 }, { "Type": "eyeRight", "X": 0.3258243203163147, "Y": 0.2869422733783722 }, { "Type": "nose", "X": 0.29795974493026733, "Y": 0.33913564682006836 }, { "Type": "mouthLeft", "X": 0.2424982190132141, "Y": 0.4403011202812195 }, { "Type": "mouthRight", "X": 0.3285549283027649, "Y": 0.42653071880340576 }, { "Type": "leftPupil", "X": 0.2514769434928894, "Y": 0.2966562509536743 }, { "Type": "rightPupil", "X": 0.3344457149505615, "Y": 0.2878323793411255 }, { "Type": "leftEyeBrowLeft", "X": 0.20776528120040894, "Y": 0.24588149785995483 }, { "Type": "leftEyeBrowUp", "X": 0.23486393690109253, "Y": 0.22838211059570312 }, { "Type": "leftEyeBrowRight", "X": 0.26713693141937256, "Y": 0.24221475422382355 }, { "Type": "rightEyeBrowLeft", "X": 0.29768621921539307, "Y": 0.24332448840141296 }, { "Type": "rightEyeBrowUp", "X": 0.324931800365448, "Y": 0.22636346518993378 }, { "Type": "rightEyeBrowRight", "X": 0.35234054923057556, "Y": 0.23396380245685577 }, { "Type": "leftEyeLeft", "X": 0.22536121308803558, "Y": 0.3036869764328003 }, { "Type": "leftEyeRight", "X": 0.25859442353248596, "Y": 0.2963939905166626 }, { "Type": "leftEyeUp", "X": 0.24218744039535522, "Y": 0.2921774685382843 }, { "Type": "leftEyeDown", "X": 0.24354742467403412, "Y": 0.3046663999557495 }, { "Type": "rightEyeLeft", "X": 0.30785858631134033, "Y": 0.2880838215351105 }, { "Type": "rightEyeRight", "X": 0.3429398238658905, "Y": 0.2862967848777771 }, { "Type": "rightEyeUp", "X": 0.32599735260009766, "Y": 0.28063637018203735 }, { "Type": "rightEyeDown", "X": 0.3260765075683594, "Y": 0.29300010204315186 }, { "Type": "noseLeft", "X": 0.2778167128562927, "Y": 0.38191738724708557 }, { "Type": "noseRight", "X": 0.31011009216308594, "Y": 0.3755253553390503 }, { "Type": "mouthUp", "X": 0.2913239300251007, "Y": 0.4082499146461487 }, { "Type": "mouthDown", "X": 0.29487860202789307, "Y": 0.4634847044944763 } ], "Pose": { "Roll": -7.02242374420166, "Yaw": 17.866071701049805, "Pitch": 14.642864227294922 }, "Quality": { "Brightness": 41.43524169921875, "Sharpness": 99.98487854003906 }, "Confidence": 99.82343292236328 } ] }
""")

fd = response['FaceDetails'][0]

print( 'AgeRange : Low: {}, High: {}'.format( fd['AgeRange']['Low'], fd['AgeRange']['High']))
print( 'Smile : {}, {}%'.format(fd['Smile']['Value'], fd['Smile']['Confidence']))
print( 'Eyeglasses : {}, {}%'.format(fd['Eyeglasses']['Value'], fd['Eyeglasses']['Confidence']))

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 16:18

    回答有難うございます。
    意図通りの出力が得られました。ありがとうございます。

    いただいた内容で分からない箇所があったのですが、

    ```
    fd = response['FaceDetails'][0]
    ```

    この[0]を記述する理由についてご教示いただけないでしょうか?

    キャンセル

  • 2018/05/14 16:24

    キー"FaceDetails"に対応する値がリストだからです。
    r = { "FaceDetails": [ {'hoge':1,'huga':2},…]}において
    r['FaceDetails'][0]['hoge'] が 1 を指すのと同様です。

    キャンセル

  • 2018/05/14 16:44

    有難うございます、理解出来ました。

    丁寧に解説して下さりありがとうございます。

    キャンセル

同じタグがついた質問を見る

  • Python 3.x

    7451questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。