ホームページ >バックエンド開発 >PHPチュートリアル >API.AIを使用した音声制御PHPアプリ

API.AIを使用した音声制御PHPアプリ

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-17 10:56:11350ブラウズ

API.AIを使用した音声制御PHPアプリ

このチュートリアルでは、Siriのように自然言語を理解するアプリを構築できるAPIであるAPI.aiを検討します。テキストまたはスピーチのいずれかを入力として受け入れることができます。これは、書くコードで解釈できるJSON文字列を解析および返すことができます。

このチュートリアルで使用するすべてのファイルは、このgithubリポジトリで入手できます。

キーテイクアウトAPI.AIを使用した音声制御PHPアプリ

api.aiでは、開発者がテキストまたは音声を処理し、JSON形式で実行可能なデータを返すことにより、SIRIと同様の自然言語入力を理解するPHPアプリケーションを作成できます。 API.AIの重要な概念には、エージェント(アプリケーション)、エンティティ(通貨などのカスタムコンセプト)、意図(ユーザーコマンドに基づくアクション)、コンテキスト(ユーザー式コンテキスト)、エイリアス(コードのエンティティ参照)、およびドメイン(事前に定義された知識パ​​ッケージ)。

    チュートリアルでは、API.ai、GoogleのジオコーディングAPI、およびTimeZone APIを使用して、任意の場所で現在の時間を取得するPHPアプリを構築することを示しています。APIデータを使用可能な応答に統合して変換する方法を示します。 まだベータ版のAPI.AIのドメイン機能は、最小限のセットアップを必要とする組み込みエンティティと意図を提供し、YouTubeでビデオ検索などのアプリケーションを迅速に作成できるようにすることにより、統合を簡素化します。 また、チュートリアルでは、API.AIを使用して通貨コンバーターPHPアプリの作成、ユーザー入力の処理方法、意図とエンティティの定義、およびリアルタイムデータのCrurencyLayerなどの外部APIと統合する方法を紹介します。
  • api.aiは複数のプラットフォームと言語をサポートしており、開発者がモバイルやデスクトップアプリケーションを含むWeb環境を超えた音声対応アプリケーションを作成できる柔軟性を提供します。
  • 概念
  • 実際の部分に進む前に、最初に次の概念を理解することが重要です。
  • エージェント - エージェントはアプリケーションです。個々のエンティティと意図をグループ化する手段としてエージェントを作成します。
  • エンティティ - エンティティは、アプリケーションに組み込みたいカスタムコンセプトです。それらは、例を追加することにより、特定の概念に意味を与える方法を提供します。サンプルエンティティは「通貨」です。 「USD」、「米ドル」、または「ドル」などの同義語を追加することで定義します。次に、各同義語は、コードで使用できる参照値に割り当てられます。これは、その概念を参照するために使用できる単語のリストにすぎません。 API.AIは、任意の数字を参照するエンティティである @Sys.Numberなどの基本的なエンティティと、電子メールアドレスを参照するエンティティである @Sys.Emailなどの基本的なエンティティを既に提供しています。 @Sysをプレフィックスとして指定することにより、組み込みエンティティを使用できます。
  • 意図 - 意図により、ユーザーの言うことに応じて、プログラムが実行するアクションを定義できます。サンプルの意図は、「通貨の変換」です。次に、ユーザーが通貨を変換したい場合に言う可能性のあるすべてのフレーズまたは文をリストします。たとえば、ユーザーは「 @sys.number:number @currency:fromcurrency in @currency:tocurrency?」と言うことができます。この例では、 @Sys.Numberと @Currencyの2つのエンティティを使用しています。エンティティの後にコロンを使用すると、そのエンティティのエイリアスを定義できます。このエイリアスをコードで使用して、エンティティの値を取得できます。コードで個別に扱うことができるように、同じエンティティに別のエイリアスを与える必要があります。人間が上記の意図を理解するためには、私たちがしなければならないことは、エンティティを実際の価値に置き換えることだけです。したがって、ユーザーは「日本円の900米ドルはいくらですか?」と言うかもしれません。 tocurrency @currencyの場合

  • コンテキスト - コンテキストは、ユーザー式の現在のコンテキストを表します。たとえば、ユーザーは「日本円で55米ドルはいくらですか?」と言ってから、「フィリピンペソではどうですか?」と続きます。この場合、Api.aiは、2番目の式のコンテキストとして、ユーザーが以前に語ったことを「55米ドルはいくらですか」を使用しています。
  • エイリアス - エイリアスは、意図の説明で前に見たように、コード内の特定のエンティティを参照する方法を提供します。

  • ドメイン - ドメインは、事前に定義された知識パ​​ッケージです。それらは、api.aiの組み込みエンティティと意図のコレクションと考えることができます。言い換えれば、それらは、API.AIがセットアップやコーディングを必要とせずに実行できるトリックです。たとえば、ユーザーは「YouTubeでPikachuのビデオを見つける」と言うことができます。Api.aiは、それを解析する方法をすでに知っており、「Pikachu」を検索用語として、「YouTube」をサービスとして返すことができます。そこから、返されたデータを使用してYouTubeに移動し、「ピカチュウ」を検索できます。 JavaScriptでは、YouTubeの検索結果を指すようにlocation.hrefを設定するだけの問題です。
  • エージェントにドメインを使用するには、コンソールからエージェントを選択し、上部のドメインメニューをクリックします。そこから、ドメインの知識ベースとフルフィルメントを有効にします。ドメインは現在ベータ版にありますが、APIコンソールをいつでも使用してテストできることに注意してください。
  • <span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
    ドメインの知識ベースを有効にすると、ドメイン機能が有効になります。履行を可能にすることで、スモールトークや天気などのサードパーティサービスを使用できます。これは、既にAPI.ai.
  • と統合しているサービスが必要な場合、特定のAPIに個別のリクエストを行う必要がないことを意味します。

    特定の場所で現在の時間を取得

    主な概念を理解しているので、簡単なアプリの構築を進めることができます。最初に構築するのは、現在の時間を特定の場所で取得するためのアプリです。

    まだ行っていない場合は、API.AI Webサイトで無料アカウントにサインアップし、電子メールアドレスを確認してから、資格情報でログオン /サインインしてください。

    次に、[エージェントの作成]ボタンをクリックして、エージェントページに移動して新しいエージェントを作成します。新しいエージェントを作成するためのページに入った後、名前、説明、言語を入力して、保存します。

    これにより、サブスクリプションキー、開発者アクセストークン、クライアントアクセストークンが得られます。これらを使用して、クライアント(ブラウザー)またはサーバーからAPIにリクエストを行うことができます。サーバーからのリクエストを行うことの利点の1つは、資格情報を隠しておくことです。 API.AIを使用した音声制御PHPアプリ作成したエージェントはドメインを使用します。これは、エンティティや意図を設定する必要がないことを意味します。必要なのは、Google APIの2つのGoocoding APIとTimeZone APIの少しの助けです。 Geocoding APIは、API.AIから取得した場所を座標に変換するために使用されます。次に、これらの座標を使用してTimeZone APIを照会して、その場所の現在の時間を取得します。 Googleコンソールに移動し、TimeZone APIを有効にします。ジオコーディングAPIはAPIキーを提供する必要はないため、有効にする必要はありません。

    次に、guzzleをインストールします。 Guzzle 5を使用して、API.AI.

    にリクエストを行います。

    次に、新しいPHPファイル(time.php)を作成し、次のコードを追加して、ファイルからGuzzleを使用できるようにします。

    その後、APIキーを定義してください:

<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
当然、実際のアプリでは、おそらく、ある種のローカル構成ファイルで、アプリロジックの外側に資格情報を保持するでしょう。

API.AIにリクエストできるようになりました。リクエストを行うには、ヘッダーとして開発者アクセストークンとサブスクリプションキーを渡す必要があります。次に、JSONとしてリクエストの本文を渡します。リクエスト本文には、クエリとラングキーが含まれている必要があります。クエリは、POSTリクエストを通じてクライアント側から送信されます。このアプリのクエリの例は、「スペインのバルセロナは何時ですか?」または「日本、池袋の現在の時期は何ですか?」返された応答はJSON文字列であるため、$ ResponseのJSONメソッドを呼び出すことで配列に変換します。

<span>composer require guzzlehttp/guzzle:~5.0</span>
上記のリクエストを行うときに得られるサンプル応答です:

<span><?php
</span><span>require 'vendor/autoload.php';
</span><span>
</span><span>use GuzzleHttp\Client;
</span><span>
</span><span>$client = new Client();</span>
200のステータスコードを取得した場合、リクエストが成功したことを意味します。必要なデータは、結果項目に保存されます。この場合、パラメーターから場所を抽出するだけです。場所が返されない場合は、場所が見つからないことをユーザーに伝えます。

<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>

場所が見つかった場合、Google Geocoding APIにリクエストを行い、場所を座標に変換します。ステータスが問題ない場合、これは結果が得られたことを意味します。したがって、最初の結果から緯度と経度の値を抽出するだけです。

<span>composer require guzzlehttp/guzzle:~5.0</span>
次に、現在のUnixタイムスタンプが入ります。 Google TimeZone APIへの要求のクエリとして、この値と緯度と経度を渡します。次に、date_default_timezone_setメソッドを使用してタイムゾーンを一時的に設定するために使用できるTimezoneidを抽出します。最後に、フォーマットされた時間をユーザーに出力するだけです。

クライアント側に進みましょう。次のコードを使用してindex.htmlファイルを作成します
<span><?php
</span><span>require 'vendor/autoload.php';
</span><span>
</span><span>use GuzzleHttp\Client;
</span><span>
</span><span>$client = new Client();</span>

jQuery(イベント処理用)およびResponsive-voice.jsを使用しています。 Responsive-Voiceライブラリにより、テキストをスピーチに変換できます。私たちはそれを使用して、サーバーから得られる結果を紹介します。 上記のファイルを説明しましょう。 1つ目は、現在の音声認識オブジェクトを保存するために使用するグローバル変数です。

<span>$google_api_key = 'YOUR_GOOGLE_API_KEY';
</span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN';
</span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>

次はStartreCognitionメソッドです。これが行うことは、新しい音声認識オブジェクトを作成することです。これにより、ユーザーにマイクを使用するように求められます。次に、言語を英語に設定し、音声認識を開始します。その後、オンスタートイベントを聴きます。このイベントがトリガーされると、音声認識が開始されたことを意味します。これが発生したときにUpdaterecメソッドを呼び出します。これにより、音声認識を開始および停止するためのボタンのテキストが変更されます。また、ユーザーが数秒間話すのを停止したときにトリガーされるOnResultイベントを聴きます。これには、音声認識の結果が含まれています。結果をループし、それぞれのトランスクリプトアイテムを使用して、必要なテキストを取得する必要があります。それが完了したら、クエリテキストフィールドの値を変更するSetInputメソッドを呼び出し、クエリをサーバーに送信する送信メソッドを呼び出します。次に、音声認識を停止し、UIを更新するためにStopRecognitionメソッドを呼び出します。また、OnEndイベントでも同じことをする必要があります。

ここにupdaterecメソッドがあります。

setInputメソッド。
<span>$query = $_POST['query']; //the users query
</span><span>
</span><span>$response = $client->post('https://api.api.ai/v1/query', array(
</span><span>    'headers' => array(
</span><span>        'Authorization' => "Bearer {$apiai_key}",
</span><span>        'ocp-apim-subscription-key' => $apiai_subscription_key,
</span><span>        'Content-Type' => 'application/json; charset=utf-8'
</span><span>    ),
</span><span>    'json' => array(
</span><span>        "query" => $query,
</span><span>        "lang" => "en"
</span><span>    )
</span><span>));
</span><span>
</span><span>$result = $response->json();</span>

Stopecognitionメソッド
Array
(
    [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187
    1739117986 => 2015-05-16T09:19:47.519Z
    [result] => Array
        (
            [source] => domains
            [resolvedQuery] => What's the current time in Barcelona Spain?
            [speech] => 
            [action] => clock.time
            [parameters] => Array
                (
                    [location] => Barcelona Spain
                )

            [metadata] => Array
                (
                    [inputContexts] => Array
                        (
                        )

                    [outputContexts] => Array
                        (
                        )

                    [contexts] => Array
                        (
                        )

                )

        )

    [status] => Array
        (
            [code] => 200
            [errorType] => success
        )

)
それとは別に、ユーザーがボタンをクリックするたびに呼び出されるSwitchRecognitionメソッドもあります。

ユーザーがクエリフィールドのENTERキーを押すと、サーバーに送信されるクエリもトリガーします。
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>

Speech-Recognition.jsファイルのコードのほとんどは、クライアント側でAPI.AIを使用する方法の例を示しています。

次はメイン.jsファイルで、サーバーにクエリを送信します。応答を取得したら、レスポンシブボイスを使用してそれを発言し、応答コンテナに出力します。そうすれば、応答を視覚的に確認できます

通貨コンバーター
<span>composer require guzzlehttp/guzzle:~5.0</span>

次のアプリを構築することにより、ユーザーは特定の金額をある通貨から別の通貨に変換できます。

最初に、新しいエージェントを作成し、currencyConverterを呼び出します

そのエージェントの下で、新しいエンティティを作成し、通貨を呼び出します。これは、変換できるさまざまな通貨を表します。テストに使用できるいくつかの通貨を定義し、「保存」をクリックします。

API.AIを使用した音声制御PHPアプリ

次に新しい意図を作成し、それをconvertMoneyを呼び出します。

API.AIを使用した音声制御PHPアプリ 上のスクリーンショットから、「ユーザーが言う」セクションに次のことを追加したことがわかります。

「ユーザーが言う」セクションは、この特定の意図をトリガーするためにユーザーが言うことの例を定義する場所です。ここでやっていることは、ユーザーが使用する可能性のある実際の値の代替としてエンティティを使用することです。 @sys.Numberは任意の番号を参照できます。 @currencyは、通貨エンティティを作成したときに以前に追加した通貨を参照できます。エンティティの後にコロンを使用すると、エイリアスを割り当てることができます。このエイリアスを使用して、ユーザーがコードで使用する値を取得できます。

「アクション」セクションは、この特定の意図が使用されている場合に実行するアクションまたは方法を定義する場所です。この場合、私たちは一つのことだけをするアプリのみを作成しているため、何も定義しません。

API.AIを使用した音声制御PHPアプリ「充実感」セクションは、意図が使用されたら出力したいスピーチのテンプレートを定義する場所です。たとえば、以下を配置できます

これは、得られる結果の音声項目で利用可能になります。そこから、文字列置換を実行して、これらの変数を実際の値に置き換えることができます。しかし、このアプリのために空白のままにしておきましょう。

<span><?php
</span><span>require 'vendor/autoload.php';
</span><span>
</span><span>use GuzzleHttp\Client;
</span><span>
</span><span>$client = new Client();</span>
完了したら、「保存」ボタンをクリックして意図を保存します。

ここで、コードを進める準備ができました。 Exchange-rate.phpファイルを作成するディレクトリで、次のコードを追加します。
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
上記のコードからわかるように、それは基本的に以前のアプリの前半と同じです。今回だけ、$ currencylayer_apikey変数を追加しました。これにより、currencylayer.comから得たAPIキーが保存されます。これにより、現在の通貨から別の通貨に現在の為替レートを取得できるAPIがあります。フォローしたい場合は、先に進み、APIキーにサインアップしてください。

次に、結果があるかどうかを確認し、必要なデータを抽出します。この場合、ユーザーが変換したい通貨、通貨がそれを変換してから金額を取得する必要があります。

次に、APIにリクエストを行い、結果から為替レートを抽出します。

<span>composer require guzzlehttp/guzzle:~5.0</span>
APIから得られる結果は次のようになります:

<span><?php
</span><span>require 'vendor/autoload.php';
</span><span>
</span><span>use GuzzleHttp\Client;
</span><span>
</span><span>$client = new Client();</span>
現在の為替レートができたので、今やらなければならないことは、ユーザーが提供した金額にレートを掛けて、結果を出力することだけです。

クライアント側では、最初のアプリで以前に使用したのと同じHTMLとファイルを使用しています。フォローしている場合は、先に進んで作業ディレクトリに同じファイルを配置できます。
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY';
</span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN';
</span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>

唯一の違いは、リクエストを送信するURLです。 Exchange-rate.phpが提供されている場所を指してください:
<span>$query = $_POST['query']; //the users query
</span><span>
</span><span>$response = $client->post('https://api.api.ai/v1/query', array(
</span><span>    'headers' => array(
</span><span>        'Authorization' => "Bearer {$apiai_key}",
</span><span>        'ocp-apim-subscription-key' => $apiai_subscription_key,
</span><span>        'Content-Type' => 'application/json; charset=utf-8'
</span><span>    ),
</span><span>    'json' => array(
</span><span>        "query" => $query,
</span><span>        "lang" => "en"
</span><span>    )
</span><span>));
</span><span>
</span><span>$result = $response->json();</span>

結論
Array
(
    [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187
    1739117986 => 2015-05-16T09:19:47.519Z
    [result] => Array
        (
            [source] => domains
            [resolvedQuery] => What's the current time in Barcelona Spain?
            [speech] => 
            [action] => clock.time
            [parameters] => Array
                (
                    [location] => Barcelona Spain
                )

            [metadata] => Array
                (
                    [inputContexts] => Array
                        (
                        )

                    [outputContexts] => Array
                        (
                        )

                    [contexts] => Array
                        (
                        )

                )

        )

    [status] => Array
        (
            [code] => 200
            [errorType] => success
        )

)
このチュートリアルでは、音声対応のPHPアプリを作成するためにAPI.aiを使用する方法を学びました。 Web Speech APIはまだ広く実装されていないため、ブラウザのサポートはまだかなり制限されています。しかし、API.AIは、Web以外の他のプラットフォームをサポートしています。 Android、cordova、.net、iOSはいくつかの例です。これは、これらのプラットフォームでのサポートを心配することなく、API.AIを使用できることを意味します。詳細を知りたい場合は、必ずドキュメントをチェックしてください。このチュートリアルで使用したファイルは、このgithubリポジトリで入手できます。 API.AI

を使用した音声制御されたPHPアプリに関するよくある質問(FAQ)

音声認識のためにAPI.AIをPHPと統合するにはどうすればよいですか?
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){
</span><span>    $location = $result['result']['parameters']['location'];
</span><span>
</span><span>}else{
</span><span>    echo "Sorry, I could not find that location.";
</span><span>}</span>

音声認識のためにAPI.AIをPHPと統合するには、いくつかのステップが含まれます。まず、API.AIで新しいエージェントを作成する必要があります。このエージェントは、ユーザーの音声入力を理解し、それを実行可能なデータに変換する責任があります。エージェントを作成した後、フレーズと応答でエージェントをトレーニングする必要があります。エージェントがトレーニングされたら、API.AI PHP SDKを使用して、エージェントをPHPアプリケーションに統合できます。 SDKは、エージェントに音声データを送信し、処理されたデータを受け取る方法を提供します。

API.ai?

を使用して音声制御されたPHPアプリを構築するための前提条件は何ですか? - 指向プログラミング。また、API.aiとその仕組みに関する実用的な知識も必要です。さらに、PHPアプリケーションをホストできるサーバーが必要です。最後に、サーバーにAPI.AI PHP SDKをインストールする必要があります。 。 API.AIの一般的な代替品には、IBM Watson、Microsoft Azure Cognitive Services、およびGoogle Cloud Speech-tostexが含まれます。これらのAPIは、PHPアプリケーションに統合するために使用できるPHP SDKも提供します。 PHPアプリでは、より多くのフレーズと応答でAPI.aiエージェントのトレーニングを伴います。エージェントのデータが多いほど、音声入力を理解して処理することができます。また、エージェントの機械学習機能を使用して、時間の経過とともにパフォーマンスを継続的に向上させることもできます。

音声制御されたPHPアプリでさまざまな言語を処理するにはどうすればよいですか?そのため、エージェントを訓練して、さまざまな言語での音声入力を理解し、応答できます。エージェントに音声データを送信する場合、リクエストで言語を指定できます。その後、エージェントは指定された言語に基づいて音声入力を処理します。 PHPアプリのテキストからスピーチのAI。 API.AIは、テキストを音声に変換する方法を提供します。これらのメソッドを使用して、アプリにユーザーに応答または指示を発言させることができます。 API.AIに送信する前に、データを暗号化することを含みます。 PHPの内蔵暗号化関数を使用して、データを暗号化できます。さらに、データの傍受を防ぐために、アプリとAPI.AI間のすべての通信にHTTPSを使用する必要があります。音声制御されたWebアプリにはAPI.aiを使用します。 API.AI PHP SDKは、Webアプリを含む任意のPHPアプリケーションで使用できます。 JavaScriptを使用してユーザーの音声入力をブラウザでキャプチャし、PHPアプリの音声認識機能をテストするには、PHPバックエンドに送信してください。一連のテストフレーズと応答を作成することにより、PHPアプリの音声認識機能をテストできます。次に、これらのテストを使用して、アプリが音声入力を正しく理解して処理しているかどうかを確認できます。音声制御されたモバイルアプリにapi.aiを使用できますか?

はい、音声制御されたモバイルアプリにはapi.aiを使用できます。ただし、PHP SDKではなく、特定のモバイルプラットフォーム(AndroidまたはiOS)にAPI.AI SDKを使用する必要があります。モバイルSDKは、ユーザーの音声入力をキャプチャし、処理のためにAPI.aiに送信する方法を提供します。

以上がAPI.AIを使用した音声制御PHPアプリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。