LoginSignup
8
4

More than 1 year has passed since last update.

Pythonで声色を感情分析する(Empath)

Posted at

音声から感情分析したい

「なんか、今日はこの人機嫌悪いな…」

相手の声の調子からその人の気分がなんとなくわかるというのは、私達が日常的に経験していることですよね。
もし、AIを使って相手の声から気分を推測することができたら便利だと思いませんか?

Empathの「気分解析API」を使うとそれができてしまいます。

Empathは、音声等の物理的な特徴量から気分の状態を独自のアルゴリズムで判定するプログラムです。
数万人の音声データベースを元に喜怒哀楽や気分の浮き沈みを判定します。(Empath公式より)

Empathで気分解析をしてみよう

EmapthはWeb API化されていて、簡単に利用することができます。
このEmapth Web APIをPythonから利用して、音声の気分解析をしてみましょう:speaking_head:

Empath Web APIで解析できる「気分」は次の通りです。それぞれ0~50の範囲の値として出力されます。

  • calm (平常) :neutral_face:
  • anger (怒り) :angry:
  • joy(喜び) :grin:
  • sorrow (悲しみ) :cry:
  • energy (元気度) :muscle:

準備

  • APIの利用にはEmapthのユーザー登録が必要です。
  • 基本無料。ただし、APIの利用は月に300回まで
  • APIの利用には「API key」が必要。Emapthのマイページの「API Key設定」から発行しておきましょう。

ボイス素材

本記事では実験用として、下記のサイト様から音声素材を拝借いたしました。

音声ファイルの前準備

Empath Web APIで利用する音声ファイル(WAVファイル)は下記の仕様を満たす必要があります。

  • PCM WAVE形式、16bitであること。
  • データサイズが1.9MB以下であること。
  • フォーマットがPCM_FLOAT、PCM_SIGNED、PCM_UNSIGNEDいずれかであること。
  • 録音時間が5.0秒未満であること。
  • サンプリング周波数が11025Hzであること。
  • チャンネル数が1(モノラル)であること、

先述の「あみたろの声素材工房」からダウンロードしたWAVファイルは「サンプリング周波数」がそのままだと仕様を満たさないので変換する必要があります。

例えば、フリーソフト「Audacity」を使って変換するとよいです。
(具体的なやり方は「Audacity サンプリング周波数変換」などで検索してみてください。まったく難しくありません。)

気分解析

Pythonのコードは下記の通りです。
'あなたのAPI key'と書いてある箇所は、準備で発行したあなたのAPI keyで置き換えてください。

python
import requests
url = 'https://api.webempath.net/v2/analyzeWav'

apikey = 'あなたのAPI key'

payload = {'apikey': apikey}

wav = 'ittekimasu_01.wav' # 「いってきまーす」
data = open(wav, 'rb')
file = {'wav': data}

res = requests.post(url, params=payload, files=file)
print(res.json())

いってきまーす

使用したボイス:「いってきまーす」

注意! ボイスを再生するときは周りに人がいないかをよく確認し、音量に注意しましょう

実行結果
{'error': 0, 'calm's 15, 'anger': 0, "joy': 34, 'sorrow":0, 'energy':30)

使用したボイスは「いってきまーす」という明るく元気な声
よって、joy(喜び:grin:)とenergy(元気:muscle:)の数値が高く出ているこの結果はいい感じであると言えそうですね。

さよなら

使用したボイス:「さよなら」(さびしそうに)

実行結果
('error': 0, 'calm':18, 'anger': 14, 'joy': 11, 'sorrow': 14, 'energy': 11}

anger (怒り:angry:)とsorrow(悲しみ:cry:)が高めです。
私の耳には、この声に特に怒り要素は感じませんが、悲しみと怒りは紙一重なのでしょうか?

痛いってばぁ!

使用したボイス:「痛いってばぁ! (怒って)」

実行結果
{'error': 0, 'calm': 0, 'anger': 0, 'joy': 25, 'sorrow': 25, 'energy': 0}

なぜかjoy(喜び:grin:)とsorrow(悲しみ:cry:)が高く、anger (怒り:angry:)は0。
声が高いので怒りに聞こえないのでしょうか?
それでもこの場合は、悲しみといえば悲しみなので妥当な結果と言えなくもない。

感情分析のこれからに注目

この「Emapth」は、すでに世界50か国2,800社で活用されているそうです。
確かに、声から気分がわかったら色々なことに活用できそうですよね。
感情分析のこれからに目が離せません:robot:

テキストから感情分析した記事もご興味あればご覧ください。

8
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4