2016-06-16 1 views
0

セッション・ベースの音声認識インターフェースの使用に問題があります。具体的には、長いオーディオストリームを複数のチャンクに分割し、一度に1つずつアップロードし、最後に完全な解析済みテキストを受信しようとしています(単一のソースからチャンクされたオーディオをストリーミングするのではなく)。IBM Watsonのセッション・ベースの音声認識が「セッションが存在しません」というエラーで失敗するエラー

IBM Watson'sは、音声認識に対するステートレス・インターフェースとステートフル・インターフェースの両方を提供します。より一般的なステートレスプロトコルは、(チャンクされた)オーディオストリームを受け入れ、完了時に解析されたコンテンツを返します。セッションベースのアプローチでは、クライアントは永続セッションを確立し、マルチパートを使用してオーディオを複数のチャンクとしてアップロードし、結果を照会することができます。これにより、長いストリームの処理やマイク入力の処理に非常に役立ちます。

tutorialsdiscussionsが見つかりましたが、いずれの例も正しく動作していないようです(インターフェイスが急速に進化しているので古いかもしれません)。

ここに代表的なサンプルがあります。以下のPOSTがセッションを作成します。次に

curl -X POST -u "user:password" -H "Content-Type: application/json" \ 
https://stream.watsonplatform.net/speech-to-text/api/v1/sessions -verbose -d "" 

を、次の1は、前のコマンドが提供するエンドポイントを使用して、サービスを認識するための音声データの一部を提出してください:

curl -k -X POST -u "user:password" \ 
-H "content-type: audio/flac" --data-binary @temp.2.flac -H "Transfer-encoding: chunked" \ 
--cookie "SESSIONID=65097570295a0eccd15fd6dba326487416634371; Secure" \ 
https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/65097570295a0eccd15fd6dba3264874/recognize -verbose 

最後に、このコマンドは、結果を返す必要があります:

curl -k -X GET -u "user:password" \ 
--cookie "SESSIONID=65097570295a0eccd15fd6dba326487416634371; Secure" \ 
https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/65097570295a0eccd15fd6dba3264874/observe_result -verbose 

最初のコマンドは、ステータスを作成したHTTP 201だけでなく、合理的に探してエンドポイントを返して、何の問題もなく完了し、その後続の呼び出し:ただし

"recognize": "https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/65097570295a0eccd15fd6dba3264874/recognize", 
    "recognizeWS": "wss://stream.watsonplatform.net/speech-to-text/api/v1/sessions/65097570295a0eccd15fd6dba3264874/recognize", 
    "observe_result": "https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/65097570295a0eccd15fd6dba3264874/observe_result", 
    "session_id": "65097570295a0eccd15fd6dba3264874", 
    "new_session_uri": "https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/65097570295a0eccd15fd6dba3264874" 

ために(一緒にセッションIDクッキーと共に)使用され、2番目と3番目のコマンドの両方が404のHTTPコードで失敗「セッションが存在しません。」エラー。

どのようなカールまたはJavaのポインタや例も高く評価されます。

+0

こんにちはRobertさん、このセッションを使用しないでください.Watson STTへのストリーミングにはウェブソケットが最適です。私の答えをここで見てください:http://stackoverflow.com/questions/37232560/stream-audio-from-mic-to-ibm-watson-speechtotext-web-service-using-java-sdk/38231774#38231774 –

答えて

0

PCMファイルを認識するためにcurlコマンドを使用するGistを書きました。あなたの場合は、オーディオフォーマットを変更してファイルを指すだけです。
を参照してください。https://gist.github.com/germanattanasio/ae26dc0144f229ad913a

クッキーを扱う際には、ファイルに保存し、その後のリクエストでそのファイルを使用することは常に有効です。結果は同じになり、cookies.txtSESSIONIDを有するであろう

curl -X POST -b cookies.txt -c cookies.txt -u $USERNAME:$PASSWORD \ 
"https://stream.watsonplatform.net/speech-to-text/api/v1/sessions" \ 
-d "" 

:例

curl -X POST -u "user:password" -H "Content-Type: application/json" \ 
https://stream.watsonplatform.net/speech-to-text/api/v1/sessions \ 
-verbose -d "" 

について

は、として書かことができます。

次に、あなたが使用することができます。

curl -X POST -b cookies.txt -c cookies.txt -u $USERNAME:$PASSWORD \ 
"https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/$SESSION_ID/recognize?continuous=true" \ 
--header "Content-Type: audio/flac" --header "Transfer-Encoding: chunked" \ 
--data-binary @temp.2.flac 

$SESSION_IDは、あなたが最初にカールコマンドで取得した値で更新されていることを確認します。

1

ロバート、

私はこの投稿を気付いたばかりです。遅れて申し訳ありません。どのようにコマンドを発行しているのか分かりませんが、後続の呼び出しの前にセッションがタイムアウトしている可能性があります。デフォルトの30秒セッションタイムアウトがその後の呼び出しの前に期限切れになると、サービスは指定されたメッセージとともに404を返します。以前のユーザーが示しているように、Cookieをどのように提供しているかにも問題があります。しかし、私はセッションのタイムアウト問題を経験しましたが、これも原因かもしれません。

関連する問題