【Azure Cognitive Searchで始めるTwitter分析】Part3. Power BI レポートの作成
はじめに
この記事はPart1. 検索インデックスの作成、Part2. デモアプリの作成 の続きです。
まだ見ていない方は、遡って見ていただければと思います。
↓ 今回は下図のようなPower BI レポートの作成手順についてまとめていきます。
手順
「ナレッジストア」タブを開きます。
「Power BIテンプレートを取得する」からテンプレートをダウンロードすることができます。
「Power BIパラメーターのコピー」の情報は、後ほどテンプレートに接続する際に使用します。
Power BI Desktopを開きます。
「ファイル」→「インポート」→「Power BI テンプレート」をクリックし、ダウンロードしたテンプレートを選択し開きます。
先程ポータル上で確認した「Power BIパラメーターのコピー」の情報を入力後、「作成」を押します。
アクセスキーを要求された場合は以下の手順でキーを取得し、入力します。
ストレージアカウントを開き、使っているストレージアカウントに移動→「アクセスキー」→「キーの表示」で表示されたkey1を入力します。
しばらく待つとレポートが表示されます!
おわりに
今回はPower BIテンプレートをナレッジストアに接続し、ツイートの分析結果を可視化しました。
Part1. 検索インデックスの作成 で分析した結果が、多種多様なビジュアルで見られて面白かったです。
これを Part2. デモアプリの作成 で作成したアプリと組み合わせるなどすると、より高度な検索アプリが出来そうです。
参考リンク
https://docs.microsoft.com/ja-jp/azure/search/knowledge-store-connect-power-bi
【Azure Cognitive Searchで始めるTwitter分析】Part2. デモアプリの作成
はじめに
この記事はPart1. 検索インデックスの作成 の続きです。
今回は下図のようなデモアプリの作成手順についてまとめていきます。
手順
Azure Portalにログインし Search Service を開いたら、「インデックス」に移動します。
「デモアプリの作成」を押します。
「CORSを有効にする」にチェックを入れ、「デモアプリの作成」を押します。
検索結果の表示をカスタマイズします。
「縮小版」:サムネイル画像を選択します。今回は画像データを使用していないため無視します。
「タイトル」:タイトルを選択します。今回はユーザーネームを使用します。
「説明」:タイトルの下に表示するものを選択します。今回はツイート本文を使用します。
インデックス作成時、「フィルター可能」「ファセット可能」の両方にチェックを入れた項目がデフォルトでサイドバーに構成されます。
「デモアプリの作成」をクリックすると、HTMLファイルが生成されます。
HTMLファイルを開くとデモアプリの初期画面が表示されます。
上部の検索ボタンをクリックするとサイドバーと一覧が表示されます。
次に、「緊急事態宣言」で検索してみます。
検索するキーワードを上部の検索ボックスに入力し、検索ボタンをクリックします。
下図のように、表示される結果が変わります。
512ツイート中18個に「緊急事態宣言」というキーワードが含まれていることが分かります。
おわりに
今回はAzure Cognitive Search を使用して、デモアプリを作ってみました。
次回はPower BI テンプレートを使用し、ナレッジストアを接続して感情分析・キーフレーズ抽出などの分析結果を可視化していきます。
数ステップでとてもグラフィカルなレポートが作成できますので、宜しければそちらも併せてご覧ください。
参考リンク
https://docs.microsoft.com/ja-jp/azure/search/search-create-app-portal
【Azure Cognitive Searchで始めるTwitter分析】Part1. 検索インデックスの作成
構成
全部で3部構成にする予定です。
Part.1
検索インデックスの作成 (今回)
Port.2
デモアプリの作成(次回)
Port.3
Power BI 1 レポートの作成(次々回)
はじめに
News ZERO さんがTwitterで新型コロナ「陽性」の経験談を募集されており、使われたハッシュタグはトレンド入りしました。
そこで今回は、「#感染したから伝えたい」を含むツイートを約500件取得し、Azure Cognitive Search で人物・感情・キーフレーズなどを抽出 → デモアプリを作成→Power BI テンプレートでワードクラウドの表示をさせてみました。
Azure Cognitive Search とは
Azure Cognitive Search (旧称 Azure Search)は、Web、モバイル、エンタープライズの各アプリケーション内のプライベートな異種コンテンツに対する豊富な検索機能を提供する、クラウド検索サービスです。
公式ドキュメント:https://docs.microsoft.com/ja-jp/azure/search/search-what-is-azure-search
今回はテキストデータのみ使いますが、Cognitive Searchでは画像、映像、音声などの非構造化データも検索可能です。
また、Cognitive ServicesやPower BIとの連携も容易です。
手順
ざっくりと以下の5つの手順でやっていきます。
- Twitter API を使用してデータを用意する
- BLOB ストレージにツイートデータアップロード
- Cognitive Search で検索インデックスの作成
- デモアプリの作成(Part2. デモアプリの作成 で説明します。)
- Power BI テンプレートでワードクラウド表示(Part3. Power BI レポートの作成 で説明します。)
1. Twitter API を使用してデータを用意する
1-1. Twitter APIの利用申請→APIトークン取得
Developerサイトにて英語で申請→うまくいけば1日で使えるようになります。
申請内容が不十分だと、メールが来て改めてAPIの使用用途を聞かれます。
APIの申請方法、APIキーの取得方法については、以下リンクが参考になるかと思います。
参考リンク:https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/
1-2. Pythonで 「#感染したから伝えたい」 を含むツイートを収集
以下の記事を参考にし、1月13日~1月21日までの 「#感染したから伝えたい」 のハッシュタグを含むツイートを約500件集め、CSVファイルに出力しました。
参考リンク:https://qiita.com/nomotom/items/de1bc00ef350edc21624
2. BLOB ストレージにCSVファイルをアップロード
Azure Blob Storageでストレージアカウントを作成→コンテナー作成→CSVファイルのアップロードをします。
まずストレージアカウントを作成します。
次にコンテナーを作成します。
最後に先程用意したCSVファイルをコンテナーにアップロードします。
これでデータの準備ができました。
3. Cognitive Search で検索インデックスの作成
3-1. Cognitive Search リソースの作成
Azure Portalにログインし、Search Serviceを開きます。
「Search サービスの作成」をクリックします。
サブスクリプション~価格レベルまでを設定し、「確認および作成」でリソースを作成します。
価格レベルについての詳細:https://azure.microsoft.com/ja-jp/pricing/details/search/
3-2. インデックス作成
作成したリソースに移動し、「データのインポート」をクリックします。
3-2-1. データに接続
データソース:Azure BLOBストレージ
データソース名:任意
抽出されるデータ:コンテンツとメタデータ
解析モード:区切りテキスト
最初の行にヘッダーが含まれています:チェックを入れます。
区切り記号文字:,
接続文字列:「既存の接続を選択します」をクリック→データをアップロードしたコンテナーを選択します。
「次:コグニティブスキルを追加します」で次に進みます。
3-2-2. スキルの追加
3つの項目「Cognitive Servicesをアタッチする」、「エンリッチメントの追加」、「ナレッジストアへのエンリッチメントの保存」を設定していきます。
それぞれクリックで設定項目が開かれます。
「Cognitive Servicesをアタッチする」
「無料」を選択すると、スキル適用できるドキュメント数が20個に限定されます。
※Cognitive Servicesリソースを新規で作成する場合
価格レベルはS0を使うことができます。
数秒待ちます。
「エンリッチメントの追加」
スキルセット名:任意
ソースデータフィールド:text(感情分析などのスキルを適応させる列を指定します。今回はツイート本文の列である"text"を指定しています。)
エンリッチメントの粒度レベル:ページ(5000文字チャンク)
「ナレッジストアへのエンリッチメントの保存」を開きます。
これを設定することにより Power BI との連携が可能になります。
ストレージアカウント接続文字列:「規定の接続を選択します」をクリックします。
ナレッジストア用のコンテナーを選択します。
コンテナーを用意していない場合は、「+コンテナー」を押して作成します。
設定ができたら「次:対象インデックスをカスタマイズします」で次に進みます。
3-2-3. インデックスをカスタマイズ
インデックス名:任意
キー:AzureSearch_DocumentKey
フィールドには、データ型と属性があります。 上部に並んだチェック ボックスは、フィールドがどのように使用されるかを制御する "インデックスの属性" です。
引用元:https://docs.microsoft.com/ja-jp/azure/search/search-get-started-portal
取得可能:検索結果で取得したい項目かどうか
フィルター可能、ソート可能、ファセット可能:フィルタリング、並べ替え、ファセットのナビゲーション構造にフィールドを使用するかどうか
検索可能:フルテキスト検索の対象かどうか
アナライザー:
デモアプリのサイドバーに表示させたい項目には、「フィルター可能」「ファセット可能」いずれもチェックを入れます。
「」で次に進みます。
3-2-4. インデクサーの作成
インデクサー名:任意
スケジュール:一度
これらを設定し、「送信」でインデクサーが実行されます。
3-3. 言語設定
このままだと言語設定が英語のままスキルが実行されてしまうため、一旦実行中のインデクサーを止め、言語を設定してからインデクサーを再度実行する必要があります。
言語を英語→日本語に変更します。
"@odata.type": "#Microsoft.Skills.Text.SplitSkill" 以外の defaultLanguageを、enからjaに書き替え、「保存」で変更を保存できます。
インデックスが作られました。
512個のツイートで1分少し要しました。
3-4. 検索エクスプローラーでクエリを実行
「検索」をクリックすると、下に検索結果の一覧が表示されます。
次は簡単な検索クエリを書いて結果をみてみます。
$search=コロナ&$select=created_at,text,sentiment,keyphrases,locations,people
これで”コロナ”を含むツイートを検索し、日時・本文・感情・キーフレーズ・場所・人物 の項目のみ結果に表示させることができます。
クエリパラメーターの詳細については、以下公式ドキュメントにてご確認いただけます。
https://docs.microsoft.com/ja-jp/azure/search/search-explorer
https://docs.microsoft.com/ja-jp/azure/search/search-query-overview
おわりに
本記事では、データの準備~検索インデックスの作成 までの手順をまとめました。
次回、Part2. デモアプリの作成 で検索アプリを作成し、
Part3. Power BI レポートの作成 で最初に示したワードクラウドなどを表示させていきます。
簡単なステップで試せるものですので、ぜひご覧ください。
参考リンク
https://docs.microsoft.com/ja-jp/azure/search/search-create-service-portal
https://docs.microsoft.com/ja-jp/azure/search/search-get-started-portal
https://docs.microsoft.com/ja-jp/azure/search/cognitive-search-quickstart-blob
https://docs.microsoft.com/ja-jp/azure/search/knowledge-store-create-portal
https://docs.microsoft.com/ja-jp/azure/search/search-explorer
HoloLens2 × Azure Cognitive Services まとめ
はじめに
HoloLensアドベントカレンダーの25日目の記事です。
今年の僕のHoloLensアドベントカレンダーは、スタートアップ夢の扉の「ヌンギル」が作りたくなって始めました。全7記事、Azure Cognitive Servicesが学べる感じになっております。冬休みに試してみてください。これでUnity/C#/MRTKでAPIを叩けるね!
Vision | Speech | Language | Decision |
---|---|---|---|
Computer Vision - Analyze Image - Read |
Speech-to-Text | Language Understanding | Anomaly Detector |
Face | Text-to-Speech | Text Analytics | Personalizer |
Custom Vision | Speech Translation | QnA Maker | Content Moderator |
Form Recognizer | Speaker Recognition | Translator | Metrics Advisor |
Video Indexer | Immersive Reader |
※Search(Bing Web Search API)は除いています。
Face API
画像をキャプチャして、顔検出を行います。
Analyze Image API
画像をキャプチャして、説明文を生成します。
Text-to-Speech API
説明文を読み上げます。
Translator API
英語の説明文を日本語に翻訳し、読み上げます。
Speech-to-Text API
音声認識し、アクションします。
Read API
画像をキャプチャし、テキストを抽出し、読み上げます。
Custom Vision API
物体検出し、読み上げます。
さいごに
皆さん、2020年お疲れ様でした!よいお年を!
HoloLens2 × Azure Cognitive Services(CustomVisionで物体検出)
はじめに
HoloLensアドベントカレンダー2020の19日目の記事です。
前回は「文字を読んで」と言うと、画像からテキスト抽出し読み上げました。今回は、Custom Visionを用いて小銭を検出し、いくらか答えてくれるようにしました。「ヨンシル、これいくら?」
開発環境
- Azure
- Custom Vision
- Speech SDK 1.14.0
- Unity 2019.4.1f1
- MRTK 2.5.1
- Windows 10 PC
- HoloLens2
導入
1.前回の記事まで終わらせてください。
2.まずは、Custom Visionで小銭を学習します。手元にあった1円、10円、100円のみを学習します。
3.Azureポータルから「Custom Vision」を作成。キーをメモっておきます。
![]() |
![]() |
4.Custom Visionにサインインし、新しくプロジェクトを作成します。プロジェクトタイプはObject Detection、学習したモデルをエクスポートしてエッジ推論もできるようにGeneral(compact)、Export CapabilitiesをBasic platformsに設定します。
![]() |
![]() |
5.小銭を撮影し、学習データをアップロード、タグを付けます。
![]() |
![]() |
6.Advanced Trainingで1時間学習させました。
7.学習した結果がこちらです。作ったモデルはPublishし、画像ファイルから推論するエンドポイントをメモっておきます。
![]() |
![]() |
8.Unityのプロジェクトはこんな感じ。前回のMySpeechRecognizerのActionワードに「いくら」を追加します。新しく「TapToCaptureObjectDetection.cs」をAdd Componentし、「いくら」を音声認識すると、画像をキャプチャし、物体検出、読み上げという流れになります。
9.MySpeechRecognizer.csのUpdate関数を次のように編集し、「いくら」を音声認識するとTapToCaptureObjectDetection.csのAirTap関数を実行します。
[crayon-6042b2b9a6c32177735313/]
10.「TapToCaptureObjectDetection.cs」スクリプトはこちらになります。
[crayon-6042b2b9a6c3b037408837/]
11.エンドポイントとキーをメモっておいたものを貼りつけます。MRTKのRestライブラリを用いて、キャプチャした画像をPOSTします。
12.レスポンスは次のような形で返ってくるので、CustomVisionResultクラス、Predictionsクラス、BoundingBoxクラスを作成しました。
13.検出できたら、Probabilityが0.8以上のものを選びます。複数検出されている場合はIoUを計算し、BoundingBoxがだいぶ重なっているもの&Probabilityの低い方は削除します。
14.検出結果からいくらか計算して読み上げます。
実行
動画のように、小銭を数えられるようになりました!結構間違えるので、学習データを増やす必要があります。
お疲れ様でした。
参考
- 3.Azure Custom Vision の統合
- HoloLensでAzure Custom Vision Service - ObjectDetectionをWindows MLを使ってオフライン推論してみた。
HoloLens2 × Azure Cognitive Services(Read APIで文字認識し読み上げ)
はじめに
HoloLensアドベントカレンダー2020の13日目の記事です。
前回は「何が見える?」と質問したら、画像をキャプチャして説明文を生成し、読み上げを行いました。今回は、「文字を読んで」と言うと、画像からテキストを抽出し、読み上げてみます。「ヨンシル、文字を読んで」
開発環境
- Azure
- Computer Vision API (Read API)
- Speech SDK 1.14.0
- Unity 2019.4.1f1
- MRTK 2.5.1
- Windows 10 PC
- HoloLens2
導入
1.前回の記事まで終わらせてください。
2.Unityプロジェクトはこんな感じ。前回のMySpeechRecognizerのActionワードをリストにして、「文字を読んで」を追加します。新しく「TapToCaptureReadAPI.cs」スクリプトをAdd Componentし、「文字を読んで」と言うと画像キャプチャし、テキスト抽出、読み上げという流れになります。
3.前回の記事のMySpeechRecognizer.csは、Actionワードが一つしか認識できませんでしたが、リストにして複数のActionワードを認識できるようにします。あとはUpdate関数を下記のように編集して、Actionワードが「文字を読んで」のときにTapToCaptureReadAPI.csのAirTap関数を実行します。
[crayon-6042b2b9a82f7758088983/]
4.「TapToCaptureReadAPI.cs」スクリプトは以下のようになります。
[crayon-6042b2b9a82fe070987657/]
5.Computer Vision API (Read API) のエンドポイントとキーは、画像説明文生成のときと同じものを用います。
6.TapToCaptureReadAPI.csのAirTap関数で画像をキャプチャしたあと、Read APIに画像をPOSTします。すると、ResponseのHeadersに{"Operation-Location":URL}が返ってくるので、そのURLに対してGETする必要があります。しかし、MRTKのRest.csはResponseHeadersを返してくれないので、ProcessRequestAsync関数の275行目からを次のように編集します。
[crayon-6042b2b9a8305457685849/]
7.これでResponseBodyにResponseHeadersのURLが返ってくるので、そのURLに対してGETします。
8.テキスト抽出が実行中の場合は下記のようなjsonが返ってくるので、"status"が"succeeded"になるまで、1秒おきにGETします。
9."status"が"succeeded"になったら、テキスト抽出結果が次のようなjsonで返っくるので、仕様に合わせてReadクラス、AnalyzeResultクラス、ReadResultsクラス、Linesクラスを作成しました。
10.テキスト抽出結果を音声合成に投げて読み上げます。
実行
実行動画を見てください。こんな感じで文字を読めるようになりました!割と小さい文字もいけます。名刺とかも読めるし、便利かもしれないです。日本語対応はまだなので待つしかないですね。(現在の対応言語:Dutch, English, French, German, Italian, Portuguese and Spanish)
ちなみにWakeワードの「ヨンシル」は「4種類」や「キャンセル」などに誤認しやすいので、変えた方がいいです。「ガチモト」は「が地元」や「合致もっと」になるので、「藤本」がいいです。。
参考
- 光学式文字認識 (OCR)
- Computer Vision API (v3.1)
- Quickstart: Extract text using the Computer Vision 3.1 REST API Read operation and C#
HoloLens2 × Azure Cognitive Services(Speech SDKで音声認識)
はじめに
HoloLensアドベントカレンダー2020の10日目の記事です。
前回の続きで、エアタップして目の前の画像をキャプチャし、説明文を生成、日本語で読み上げているのですが、音声認識によってこれを動作させたいと思います。「ヨンシル、文字を読んで」「ヨンシル、何が見える?」
開発環境
- Azure
- Computer Vision API (画像分析 API)
- Translator API
- Speech SDK 1.14.0
- Unity 2019.4.1f1
- MRTK 2.5.1
- Windows 10 PC
- HoloLens2
導入
1.前回の記事まで終わらせてください。
2.Unityプロジェクトはこんな感じ。エアタップはもう使わないので、前回の「TapToCaptureAnalyze」を非アクティブにしてください。代わりにMySpeechRecognizerを作成します。
3.MySpeechRecognizerにAudioSourceをAdd Componentします。
4.MySpeechRecognizerにTapToCaptureAnalyzeAPI.csをAdd Componentし、Audio SourceにMySpeechRecognizerをアタッチします。あと画像分析結果の画像となるQuadもアタッチしてください。
5.「MySpeechRecognizer.cs」スクリプトは、エアタップの代わりに音声認識してアクションするプログラムです。プログラムがスタートしたら音声認識を継続的に行います。まずWakeワードを認識し、「はい」と応答、その後Actionワードを認識するとTapToCaptureAnalyzeAPIのAirTap関数を実行します。
[crayon-6042b2b9a8f04189397209/]
6."YourSubscriptionKey", "YourServiceRegion"にAzureの音声リソースからキーと場所(リージョン)をコピペしてください。
7.fromLanguageに"ja-JP"(日本語)を指定しています。
8.TapToCaptureAnalyzeAPI.csのasync Task SynthesizeAudioAsync(string text) 関数をpublicにします。MySpeechRecognizer.csからWakeワードを認識したら、「はい」と喋らせるためです。
9.Wakeワードに「ヨンシル」、Actionワードに「何が見える」を設定しました
実行
Edito上でも動くので実行してみてください。継続的に音声認識したテキストがコンソールに表示されます。
HoloLens2で実行した動画が以下になります。
お疲れ様でした。
参考
1.音声認識と文字起こしの統合と使用
2.音声認識を使用したコマンドの実行
- MRTK.HoloLens2.Unity.Tutorials.Assets.GettingStarted.2.3.0.3.unitypackage
- MRTK.HoloLens2.Unity.Tutorials.Assets.AzureSpeechServices.2.3.0.0.unitypackage
HoloLens2 × Azure Cognitive Services (Translator APIで英語から日本語に翻訳し音声合成)
はじめに
HoloLensアドベントカレンダー2020の8日目の記事です。
API叩くの慣れてきましたかー?前回の続きで、画像分析APIで画像説明文を生成しそれを読み上げてみましたが、説明文は英語のため、日本語に翻訳して音声合成してみましょう!
開発環境
- Azure
- Computer Vision API (画像分析 API)
- Translator API
- Speech SDK 1.14.0
- Unity 2019.4.1f1
- MRTK 2.5.1
- Windows 10 PC
- HoloLens2
導入
1.前回の記事まで終わらせてください。
2.Azureポータルを開き、Translatorを作成、エンドポイントとキー、場所(リージョン)をメモっておいてください。
3.Translatorのチュートリアル(C#, Python, Translate.py)を参考にTapToCaptureAnalyzeAPI.csを編集します。画像分析APIで得られた画像説明文(英語)をTranslator APIに投げ、翻訳した日本語のテキストをSSMLを用いて音声合成します。
[crayon-6042b2b9a9a21025981582/]
4.ソースコードの重要なところ説明していきますね。まずは、translator_subscription_keyにメモしたキーをコピぺしてください。エンドポイントはそのままでOKです。クエリパラメータにapi-version=3.0と日本語への翻訳(to=ja)を指定しています。
5.MRTKのRestを用いて、前回の画像説明文の生成結果がanalyze.description.captions[0].textに格納されているので、json形式にして、Translator APIにPOSTします。ヘッダーはOcp-Apim-Subscription-Keyにtranslator_subscription_key、Ocp-Apim-Subscription-Regionにメモした場所(japaneast)を入力します。
6.POSTが成功したら、次のようなレスポンスボディが返ってくるので、仕様に合わせてTranslatorクラス、DetectedLanguageクラス、Translationsクラスを作ります。
7.今回は、リストのjsonになっているので、Face APIのときみたいに、JsonHelperを用いてパースします。
8.あとはtranslator[0].translations[0].textに日本語に翻訳されたテキストがあるので、SynthesizeAudioAsyncに投げます。ただし、前回のままだと「ArgumentException: Length of created clip must be larger than 0」エラーが発生し、言語が対応してないことがわかります。
9.そこで、SSML を使用して音声の特徴をカスタマイズするを参考に日本語で音声合成します。SSMLを作成し、日本語、男性、標準音声のja-JP-Ichiroを指定します。サポートしている言語の一覧はこちらです。
10.synthesizer.SpeakTextAsync(text)をsynthesizer.SpeakSsmlAsync(ssml)に変更することで、ssmlを読み込み、指定した音声で合成することができます。
11.今回、標準音声を用いていますが、ニューラル音声の方がより人間らしく合成できるみたいです。使用したい場合は、Azureの音声リソースの場所を"米国東部"、"東南アジア"、"西ヨーロッパ"のいずれかにしておく必要があるようです。
12.日本語の標準音声は、ja-JP-Ayumi(女性)、ja-JP-HarukaRUS(女性)、ja-JP-Ichiro(男性)、ニューラル音声は、ja-JP-NanamiNeural(女性)、ja-JP-KeitaNeural(男性)がありますので、変更してみてください。
実行
実行してみた結果がこちらの動画になります。
お疲れ様でした。
HoloLens2 × Azure Cognitive Services(Speech SDKでテキストから音声合成)
はじめに
HoloLensアドベントカレンダー2020の6日目の記事です。
前回の記事の続きで、画像分析APIで画像説明文を生成し、それを読み上げてみましょう。
開発環境
- Azure
- Computer Vision API(画像分析 API)
- Speech SDK 1.14.0
- Unity 2019.4.1f1
- MRTK 2.5.1
- Windows 10 PC
- HoloLens2
導入
1.前回の記事まで終わらせてください。
2.Speech SDKを設定する(Unity)からMicrosoft.CognitiveServices.Speech.1.14.0.unitypackageをダウンロードし、インポートします。
3.Azureポータルから音声を作成し、場所とキーをメモっておいてください。
4.スピーカー出力に合成するを参考にTapToCaptureAnalyzeAPI.csを編集します。画像分析APIで得られた画像説明文をSpeech SDKのsynthesizer.SpeakTextAsyncに投げます。
[crayon-6042b2b9aa8a9121052170/]
5.SpeechConfig.FromSubscriptionにキーと場所をコピペしてください。
6.最初は、synthesizer.SpeakTextAsyncでAudioConfigパラメーターを省略するだけでスピーカーから出力されるので行けると思ったのですが、HoloLensでは出力されませんでした。
7.そこで、InternetClientServer と PrivateNetworkClientServer の機能を有効にしたり、MixedRealityToolkitの音声コマンドの設定をしてみたり、
音声認識と文字起こしには Speech SDK を使用するため、Speech SDK の機能の妨げにならないように、MRTK の音声コマンドを構成する必要があります。 これを実現するには、音声コマンドの開始動作を Auto Start から Manual Start に変更することができます。
Hierarchy ウィンドウで MixedRealityToolkit オブジェクトを選択した状態で、Inspector ウィンドウで Input タブを選択し、DefaultHoloLens2InputSystemProfile と DefaultMixedRealitySpeechCommandsProfile を複製し、音声コマンドの Start Behavior を Manual Start に変更します。
![]() |
![]() |
![]() |
ARM64でビルドしたりしたのですが、関係ありませんでした。
8.調べた結果【Unity】Microsoft Azure を用いてキャラクターを流暢に話させる
やcognitive-services-speech-sdkのHelloWorld.csを参考に、音声合成結果をAudioSourceのclipに割り当てる必要がありました。
9.あとはTapToCaptureAnalyzeにAudioSourceをAdd Componentし、TapToCaptureAnalyzeAPIのAudioSourceにTapToCaptureAnalyzeをD&Dしてアタッチします。
実行
実行動画を見てください。エアタップすると画像キャプチャし、画像説明文を生成、読み上げてくれます。
"a hand holding a fanned out money" 札束を持つ手
スタートアップ夢の扉のヌンギルが完成しました!
明日は、弟子(@Horomoto-Asahi)による「MRTK関連で何かを書く」です。
HoloLens2 × Azure Cognitive Services(画像分析APIで画像説明文生成)
はじめに
HoloLensアドベントカレンダー2020の4日目の記事です。
前回に引き続き、Cognitive Services系をまとめていきまーす。
今日は、Azure Computer Vision APIの画像分析APIを用いて画像から視覚的特徴を抽出します。
例えば、下のサンプル画像を見て、「人通りの多い道」と説明してくれます。
これで韓ドラ「スタートアップ」に出てきたアプリ「ヌンギル」が作れそうですね。
開発環境
- Azure
- Computer Vision API(画像分析 API)
- HoloLens2
- Unity 2019.4.1f1
- MRTK 2.5.1
- OpenCV for Unity
- Windows PC
導入
前回の顔検出をほぼほぼ使って、異なるところだけ説明していきます。
1.AzureポータルからComputer Vision APIを作成し、エンドポイントとサブスクリプションキーをメモしておいてください。
2.Unityのプロジェクトはこんな感じ。前回の「TapToCapture」を無効にして「TapToCaptureAnalyzeAPI」を作成しました。
3.「TapToCaptureAnalyzeAPI.cs」は、エアタップしたら画像をキャプチャし、Analyze APIに投げるスクリプトになります。
[crayon-6042b2b9ab410532484511/]
4.endpointとsubscription_keyにメモしておいたものを貼り付けてください。
5.クエリパラメータはCategories,Description,Colorを指定しています。
6.MRTKのRestを用いて、分析する画像をPOSTしたら、response.ResponseBodyが次のように返ってきます。
7.今回はリストのJsonにはなっていないので、JsonHelperを使わずにJsonUtilityで読むことができます。
8.仕様に合わせてAnalyzeクラスとCategoriesクラス、Colorクラス、Descriptionクラス、Captionsクラス、Metadataクラスを作成しました。
9.生成された画像説明文をOpenCVを用いて、画像に張り付けてquadのテクスチャに表示します。
実行
HoloLens2にデプロイして、実行した結果がこちらになります。Editor上でもできるので試してみてください。
この文章を読み上げさせたら、ヌンギルの完成ですね!
お疲れ様でした。
明日(というか遅れたので今日)は、弟子(@Horomoto-Asahi)による「Holo関連のなにか書きます」です。
参考
- Computer Vision のドキュメント
- ローカル画像の分析(C#、Python)