SiriやGoogleアシスタントなど、ユーザからの音声による命令を理解してアクションを起こす技術に注目が集まっています。音声操作を行う際、音声をテキストに変換する作業が必要なのはもちろんですが、テキストからユーザの意図を読み解く技術も重要です。
そこで今回はNTT docomoから提供されている発話理解APIを紹介します。
このAPIを利用することで、話し言葉から文脈を理解して、ユーザの意図した通りに動作する柔軟な音声操作機能を実現できます。
ベースについて
まずベースになるコードは以下の記事で解説した内容になります。
Google Cloud Speech APIを使い、音声をテキストに変換したところから開始します。
なお、このコードはgoofmint/monaca_voice_recognitionにありますので、実装時の参考にしてください。
docomo Developer supportで開発者登録する
APIキーが必要になりますのでdocomo Developer support | NTTドコモにてユーザ登録とアプリケーション登録を行ってください。
「登録アプリケーション一覧」画面で確認できる API key
が後ほど必要になります。
Web APIを呼び出す
発話理解APIの呼び出し方は下記になります。Ajaxで呼び出すだけなのでとても簡単です。
api_key
は上記のdocomo Developer supportにて得られるキーになります。 text
は解析対象のテキストです。
var json={
"projectKey": "OSU",
"appInfo": {
"appName": "hoge_app", // ここはそのままで良いようです
"appKey": "hoge_app01" // ここはそのままで良いようです
},
"clientVer": "1.0.0",
"dialogMode": "off",
"language": "ja",
"userId": "1",
"location": {
"lat": 0,
"lon": 0
},
"userUtterance": {
"utteranceText": text
}
}
var url = `https://api.apigw.smt.docomo.ne.jp/sentenceUnderstanding/v1/task?APIKEY=${api_key}`;
$.ajax({
type: 'POST',
url: url,
data: JSON.stringify(json),
dataType:'json',
contentType: 'application/json'
})
.then(function(data) {
})
結果はJSONで返ってきますが、特に大事なのは extractedWords
以下になります。
例えば下記は「今日は良い天気だったってメモしておいて」という文字列を解析した結果になります。
[
{
"wordsValue": "今日",
"wordsType": [
"datePnoun",
"firstName"
]
},
{
"wordsValue": "天気",
"wordsType": [
"weather",
"snoun"
]
},
{
"wordsValue": "メモ",
"wordsType": [
"snoun"
]
},
{
"wordsValue": "今日は良い天気だった",
"wordsType": [
"memoBody"
]
},
{
"wordsValue": "今日は良い天気だったってメモしておいて",
"wordsType": [
"inputText"
]
}
]
wordsType
に snoun
が最初に出ている項目が実行するべきアクションになります。今回で言えば「メモ」になります。
そしてメモしておきたい内容は wordsType
に memoBody
が設定されている項目になります。
このように snoun
と memoBody
を組み合わせることでアクションが特定できます。
他にも様々なwordsTypeがありますので、発話理解APIのリファレンスを参考にしてください。
こちらは「monacaでアプリを作りましょうってメモしておいて」と発声した結果です。大事な「monacaでアプリを作りましょう」の部分だけが抜き取れています。
今回のコードはgoofmint/Monaca_Voice_commandにアップロードしてあります。実装時の参考にしてください。
ここではメモ機能を取り上げて解説しましたが、アクションと実行する内容さえ分かれば、地図アプリを開く、電話をかける、動画を再生すると言った様々な機能を実行できるようになるはずです。
音声操作で実行できる範囲が広がれば、文字で入力するよりも手軽で便利なアプリになるはずです。皆さんのアプリにも音声操作機能を追加してみてはいかがでしょう。