🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1208閲覧

AWS Rekognitionから返ってくる値で条件分岐したいです。

onakasuita

総合スコア7

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2019/11/11 01:57

編集2019/11/11 03:45

前提・実現したいこと

[OpenCVとAmazon Rekognitionでリアルタイムに顔の表情から感情を分析する]
https://qiita.com/G-awa/items/477f2324552cb908ecd0

こちらのサイトを参考にOpenCVで顔を検出した場合にAmazon Recognition API を叩いて
表情を認識するものを作っているのですが、返ってくる値の扱い方がよくわかりません…

Amazon Recognitionから返ってくる "Emotions”のHappyの値が80以上なら分岐する処理をしたいのですが、
どのように記述すれば良いかわかりません...

また、rekognition.detect_faces()の処理が入ると途端に重くなるのですが、なにか改善する方法などがあれば教えていただきたいです。
何卒よろしくお願いいたします。

該当のソースコード

python

1facerect = cascade.detectMultiScale( #openCVで顔検出 2 gray, 3 scaleFactor=1.11, 4 minNeighbors=3, 5 minSize=(40,40) 6) 7 8If len(facerect) != 0: #openCVで顔を検出したら 9 10      faces = rekognition.detect_faces(Image={'Bytes':buf.tobytes()}, Attributes=['ALL'])#Recognitionに画像を送る。 返ってきたjsonの情報がfacesに格納される 11 12 for face in faces['FaceDetails']: #jsonの値を整形する...? 13 smile = face['Smile']['Value'] 14 emothions = face['Emotions'] 15 16 if emothions['Happy']['Confidence'] >= 80 :#ここがよくわからない!!! 17 #処理処理

返ってくる値の例

json

1{ 2 "FaceDetails": [ 3 { 4 "BoundingBox": { 5 "Width": 0.20394515991210938, 6 "Height": 0.4204871356487274, 7 "Left": 0.1556132435798645, 8 "Top": 0.11629478633403778 9 }, 10 "AgeRange": { 11 "Low": 17, 12 "High": 29 13 }, 14 "Smile": { 15 "Value": true, 16 "Confidence": 91.7283706665039 17 }, 18 "Eyeglasses": { 19 "Value": true, 20 "Confidence": 99.88982391357422 21 }, 22 "Sunglasses": { 23 "Value": true, 24 "Confidence": 92.23440551757812 25 }, 26 "Gender": { 27 "Value": "Female", 28 "Confidence": 99.97311401367188 29 }, 30 "Beard": { 31 "Value": false, 32 "Confidence": 99.83840942382812 33 }, 34 "Mustache": { 35 "Value": false, 36 "Confidence": 99.95821380615234 37 }, 38 "EyesOpen": { 39 "Value": true, 40 "Confidence": 99.99461364746094 41 }, 42 "MouthOpen": { 43 "Value": true, 44 "Confidence": 99.51335906982422 45 }, 46 "Emotions": [ 47 { 48 "Type": "HAPPY", 49 "Confidence": 99.58031463623047 50 }, 51 { 52 "Type": "CONFUSED", 53 "Confidence": 0.11641046404838562 54 }, 55 { 56 "Type": "FEAR", 57 "Confidence": 0.004482289310544729 58 }, 59 { 60 "Type": "SAD", 61 "Confidence": 0.003681173315271735 62 }, 63 { 64 "Type": "CALM", 65 "Confidence": 0.1430344581604004 66 }, 67 { 68 "Type": "ANGRY", 69 "Confidence": 0.03304917365312576 70 }, 71 { 72 "Type": "SURPRISED", 73 "Confidence": 0.1008024662733078 74 }, 75 { 76 "Type": "DISGUSTED", 77 "Confidence": 0.018225016072392464 78 } 79 ], 80 以下略

補足情報(FW/ツールのバージョンなど)

python 3.7.3
anaconda3 2019.07
openCV
boto3

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単にjsonの扱い方の問題ではないでしょうか。
jsonを読み込んでdict型として扱ってやればよい気がします。
参考になりそうなところを貼っておきます。
https://note.nkmk.me/python-json-load-dump/

rekognitionは使ったことがないのでそれ自体の処理を改善する方法についてはちょっとわからないですが、そもそも重いのであれば顔検出の処理とそれ以後のrekognition実行の処理を非同期で実行するとかでしょうか。
全体の処理がわからないのでやりたいことにマッチするかはわかりませんが…。

投稿2019/11/11 03:03

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

onakasuita

2019/11/11 03:40

ご回答ありがとうございます! https://qiita.com/G-awa/items/477f2324552cb908ecd0 こちらのサイトを見てみると、jsonファイルは faces = rekognition.detect_faces(Image={'Bytes':buf.tobytes()}, Attributes=['ALL']) でリアルタイムに取得してる感じ...?のように見えました... facasに格納されて for face in faces['FaceDetails']: smile = face['Smile']['Value'] emothions = face['Emotions'] などで整形されている感じでしょうか... なので、ローカルにあるjsonをロードするのとはちょっと違うかな...と思ってしましました... 超絶初心者なのでトンチンカンなことを言っていたらごめんなさい... rekognitionの処理に関してですが、試してみたいと思います!ありがとうございます!
yu_1985

2019/11/11 03:51

ローカルにあるjsonではなくて取得したjsonを処理の中でパースする話をしていました(loadではなくloadsのほう)。 ただ、detect_facesの戻り値がそもそもdict型なんですね…。 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html#Rekognition.Client.detect_faces なので、この回答はあまり役に立たないものかもしれません。 > 辞書のリストが要素となっている場合、リストの要素は[インデックス]で指定。 HAPPYのところはリストになってるので、参考サイトのここの部分が役に立つのではないでしょうか。
onakasuita

2019/11/11 06:36 編集

ご回答ありがとうございます! emothions の内容を print(emothions) で出力してみたところ {'Type': 'ANGRY', 'Confidence': 45.94972610473633} {'Type': 'SAD', 'Confidence': 45.239723205566406} {'Type': 'CONFUSED', 'Confidence': 45.03734588623047} {'Type': 'DISGUSTED', 'Confidence': 45.02240753173828}... と出力され、各TypeとConfidenceがdictで返されてることを確認しました。 ちょっと前進できた気がします! ちなみになのですが... この値を整形するなどして、条件分岐を作ることって可能なのでしょうか... 取得したConfidenceの値が一番大きいTypeを選び出し それに応じて処理をさせるような...
yu_1985

2019/11/11 07:01

そこまでできたのならあとはdictの操作だけではないでしょうか。 最大値を取り出すのは標準メソッドでできたはずです。 このへんとかですかね。 https://note.nkmk.me/python-dict-value-max-min/ 多分そのへんは調べると色々出てくるはずです。
onakasuita

2019/11/13 04:02

ありがとうございます! いろいろ調べてみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問