PythonとMicrosoft感情APIで画像から感情を検出・取得する方法
人間は誰でも、喜び、悲しみ、中立、驚き、悲嘆といったさまざまな感情を持っています。Pythonを使えば、画像に写った人物のこうした感情(喜び・悲しみ・中立・驚きなど)をプログラムで自動的に検出できます。開発目的であれば、Microsoftの感情API(Emotion API)を活用することで、これらの感情を簡単に分析・取得することが可能です。
Microsoft感情APIを利用すると、画像内の顔ごとに8種類の感情スコア(怒り・軽蔑・嫌悪・恐怖・幸福・中立・悲しみ・驚き)を数値として取得できます。そして、その中から最も高いスコアを持つ感情を「推定される感情」として判定する仕組みです。
サンプルコード
以下は、画像URLを指定して感情分析の結果を取得し、最も強い感情を出力するPythonのサンプルコードです。
import http.client, urllib.request
import urllib.parse, urllib.error
import base64, sys
import simplejson as json
# 登録後に取得したサブスクリプションキーに置き換えてください
subscription_key = '23d39244dbe55173214b56ab45d56cla'
headers = {
# リクエストヘッダーの設定。
# プレースホルダーのキーを自分のサブスクリプションキーに置き換えます
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': subscription_key,
}
params = urllib.parse.urlencode({})
url1 = 'IMAGE OF URL'
body = {'url': url1}
newbody = str(body)
try:
conn = http.client.HTTPSConnection('westus.api.cognitive.microsoft.com')
conn.request("POST", "/emotion/v1.0/recognize?%s" % params, newbody, headers)
response = conn.getresponse()
data = response.read()
my_parsed = json.loads(data)
print("Response is:")
print(json.dumps(my_parsed, sort_keys=True, indent=2))
val = my_parsed[0]["scores"]
res = max(val, key=val.get)
print("\nEmotionoutput :: ", res)
conn.close()
except Exception as e:
print(e.args)コードの解説
このコードの処理の流れは以下のとおりです。
1. サブスクリプションキーの設定: 登録後に発行されたキーを subscription_key に代入します。
2. ヘッダーの作成: Content-Type を application/json に指定し、認証用に Ocp-Apim-Subscription-Key へキーを設定します。
3. リクエストの送信: 解析したい画像のURLをボディに含め、HTTPS接続でPOSTリクエストを送信します。
4. レスポンスの解析: 返却されたJSONデータをパースし、各感情のスコアを取得します。
5. 結果の出力: max() 関数を使って最もスコアの高い感情を取り出し、画面に表示します。
なお、JSONのパースには simplejson ライブラリを使用しているため、事前に pip install simplejson コマンドでインストールしておいてください。
注意:感情APIの現状について
スタンドアロンのMicrosoft感情API(Emotion API)はすでに提供が終了しており、その機能はAzureのFace APIに統合されています。新規に開発を行う場合は、Face APIの「emotion」属性を利用するか、Azure AI Visionなどの最新のサービスの利用を検討してください。基本的なリクエスト構造やレスポンス形式の考え方は本記事のコードと共通しているため、参考として活用できます。
-
PythonとOpenCVで実現する画像の加算とブレンディング
画像処理において、画像は行列(マトリクス)として扱われます。行列の中身は画像の種類によって異なり、二値画像(0と1)、グレースケール画像(0〜255)、RGB画像(各チャンネル0〜255)などがあります。したがって、2枚の画像を「加算する」ということは、対応する位置にある画素同士の行列を単純に足し合わせることを意味します。 OpenCVライブラリには、画像を加算するための関数 cv2.add() が用意されています。ただし、画像の加算を行う際は、2枚の画像のサイズ(幅と高さ)が同一である必要がある点に注意してください。また、cv2.add() は飽和演算(サチュレーション)を行うため、計算結果
-
PythonのNews APIでトップニュースを取得する方法【サンプルコード付き】
News APIは、世界中のニュースサイトから記事を検索・取得できる非常に有名なAPIです。このAPIを利用すれば、任意のニュースサイトから最新のトップニュースの見出しを簡単に取得できます。 ただし、News APIを使うにはAPIキーが必要です。APIキーはNews API公式サイトで無料登録すると発行できますので、事前に取得しておきましょう。 サンプルコード:BBCのトップニュースを取得する 以下は、Pythonのrequestsライブラリを使って、BBC Newsのトップニュースの見出しを番号付きで表示するサンプルコードです。 import requests def top_new