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

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

ただいまの
回答率

88.63%

UnityにおけるWatson APIのIAM認証方法

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,651

ple01kami

score 10

 前提・実現したいこと

Unity内でWatson APIを利用したいです。
Unityちゃんとwatson apiをつなげるという以下のリンクのハンズオンを行なっており、現在、Speech to textの部分で詰まっています。
リンク内容

そのためにWatson APIをUnity内でIAM方式で認証しようとしています。
以前まではusernameとurl,passwordを用いた認証でしたが、最近IAM方式に変更になったため、参考になるリンクがなく困っています。
以下のリンクのAuthenticationの部分に、コードが書いてあるのですが、それをどう直せばいいのか全くわからず、これを貼り付けるとそもそも実行ができずコンパイルエラーが発生してしまいます。

unityでのC#で、watson apiのIAM認証方式についてご存知であれば教えていただけないでしょうか?
よろしくお願いします。

以下のエラーメッセージが発生しました。

 発生している問題・エラーメッセージ

ampleSpeechToText1.OnFail() Error received: URL: https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?inactivity_timeout=60&keywords=ibm&keywords_threshold=0.1&max_alternatives=1&model=ja-JP_BroadbandModel&profanity_filter=True&smart_formatting=False&speaker_labels=False&timestamps=false&word_confidence=false, ErrorCode: 401, Error: 401 Unauthorized, Response: {"code":401, "error": "Unauthorized"}
UnityEngine.Debug:Log(Object)
SampleSpeechToText1:OnFail(Error, Dictionary`2) (at Assets/UnityChan/Scripts/SampleSpeechToText1.cs:79)
IBM.Watson.DeveloperCloud.Services.SpeechToText.v1.SpeechToText:OnRecognizeResponse(Request, Response) (at Assets/watson/Scripts/Services/SpeechToText/v1/SpeechToText.cs:986)
IBM.Watson.DeveloperCloud.Connection.<ProcessRequestQueue>c__Iterator0:MoveNext() (at Assets/watson/Scripts/Connection/RESTConnector.cs:534)
IBM.Watson.DeveloperCloud.Utilities.Routine:MoveNext() (at Assets/watson/Scripts/Utilities/Runnable.cs:128)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

 該当のソースコード

//SampleSpeechToText1.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using IBM.Watson.DeveloperCloud.Services.SpeechToText.v1;
using IBM.Watson.DeveloperCloud.Services.VisualRecognition.v3;
using IBM.Watson.DeveloperCloud.Utilities;
using IBM.Watson.DeveloperCloud.Connection;
using IBM.Watson.DeveloperCloud.Services.Assistant.v1;

public class SampleSpeechToText1 : MonoBehaviour
{

    [SerializeField]
    //private AudioClip m_AudioClip = new AudioClip();
    public AudioClip AudioClip;
    //private SpeechToText m_SpeechToText = new SpeechToText();
    private SpeechToText m_SpeechToText;



    // Use this for initialization

    IEnumerator Start()
    {

        string apikey = "<apikey>";
        string url = "<url>";
        string auth = "<IAM-Authentication-Token>";

        Credentials credentials = new Credentials(apikey,auth,url);
        m_SpeechToText = new SpeechToText(credentials);
        m_SpeechToText.Keywords = new string[] { "ibm" };
        m_SpeechToText.KeywordsThreshold = 0.1f;


        // 音声をマイクから 5 秒間取得する
        Debug.Log("Start record"); //集音開始
        var audioSource = GetComponent<AudioSource>();
        audioSource.clip = Microphone.Start(null, true, 10, 44100);
        audioSource.loop = false;
        audioSource.spatialBlend = 0.0f;
        yield return new WaitForSeconds(3f);
        Microphone.End(null); //集音終了
        Debug.Log("Finish record");

        // ためしに録音内容を再生してみる
        audioSource.Play();

        // SpeechToText を日本語指定して、録音音声をテキストに変換
        m_SpeechToText.RecognizeModel = "ja-JP_BroadbandModel";

        //m_SpeechToText.Recognize(HandleOnRecognize, audioSource.clip);
        m_SpeechToText.Recognize(HandleOnRecognize,OnFail, audioSource.clip);
        Debug.Log("result");
    }


    private void HandleOnRecognize(SpeechRecognitionEvent result, Dictionary<string, object> customData)
    {

        if (result != null && result.results.Length > 0)
        {
            foreach (var res in result.results)
            {
                foreach (var alt in res.alternatives)
                {
                    string text = alt.transcript;
                    Debug.Log(string.Format("{0} ({1}, {2:0.00})\n", text, res.final ? "Final" : "Interim", alt.confidence));
                }
            }
        }
    }
    private void OnFail(RESTConnector.Error error, Dictionary<string, object> customData)
    {
        Debug.Log("SampleSpeechToText1.OnFail() Error received: " + error.ToString());
    }

    // Update is called once per frame
    void Update()
    {

    }
}

 試したこと

リンク内容
このリンクにあるauthenticationの部分を貼り付けてみましたが、動きませんでした。

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

+1

聞いた話で自分で試したわけではありませんが、unityのwatson sdkを利用した方によると。

username欄に"apikey"という文字列を入力し、password欄にAPIキーの値を入力すれば、認証できるらしいです。ただ非推奨の方法らしいです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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