NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。

Azure Cognitive Search を使用した画像検索について [Azure]


スポンサーリンク

Azure Cognitive Search は、簡単に言えば、アプリケーションから REST API や .NET SDK を使用して、簡単に全文検索機能を実現させることができるマネージドのサービスでしょうか。

SQL Server にもフルテキスト機能を使用して全文検索を実施することが可能ですが、Azure Cognitive Search のフルテキスト検索エンジンは Apache Lucene をベースにして構築されており、SQL Server のフルテキスト機能よりも、以下のような点でメリットがあると思います。

 

  • 利用可能なデータソースが多い (Azure Blob Storage, Cosmos DB, Azure SQL Database,  Azure Data Lake Storage Gen2, SQL Server on Azure VM, Azure SQL Database Managed Instance など)
  • 様々なデータを取り込むことが可能 (Office系ドキュメント, PDF, json, xml, 画像ファイル(jpg, png など))
  • ファイルをデータソース上に配置後、データファイル形式の検出、インデックスの作成 が自動的に行われ、公開された REST API からすぐに全文検索を実施することが可能
  • Azure Cognitive Searchにスキルセット(Computer Vison (画像認識), Text Analytics (言語検出)など) を追加することで、データソースに配置されたファイルに追加情報が付与され、インデックスを追加することが可能

 

 今回は、実際に Azure Cognitive Search をデプロイし、Azure Storage Blob上にアップロードされた画像ファイル(jpg)にインデックスを作成後、Azure ポータルから検索テストを実施してみたいと思います。

 

[手順]

  

1) Azure Cognitive Search -「作成」を押下します。

f:id:nobtak:20200301011253p:plain

 

f:id:nobtak:20200301011331p:plain


2) 必要な項目を入力後,「次: スケール」を押下します。

f:id:nobtak:20200301011616p:plain

 

今回 価格レベル(SKU)を「Free」に指定していますが、インデックスのサイズ、検索クエリの求められるパフォーマンスに応じて、価格レベルを変更します。価格レベルの詳細は、Azure Cognitive Search の価格レベルの選択 を参照。

 

3) レプリカ, パーティションを選択後,「確認および作成」を押下します。 

f:id:nobtak:20200301011735p:plain

 

4) 入力した内容を確認後,「作成」を押下します。 

f:id:nobtak:20200301012355p:plain


5) 「Flower1.jpg」,「Flower2.jpg」を Azure Search を使用するAzure Storage Blob上にアップロードします。

Flower1.jpg

f:id:nobtak:20200302001929p:plain

 

Flower2.jpg

f:id:nobtak:20200302002016p:plain


6) 画像ファイル(JPG)をアップロードしたAzure Storage Blobで「Azure Search の追加」- 「作成した Azure Search」を選択後,「次: データに接続します」を押下します。
  f:id:nobtak:20200301012640p:plain
7) 抽出されるデータ :「コンテンツとメタデータ」、コンテナー名 : 「画像ファイルをアップロードしたコンテナー」を入力後,「次: 認知技術を追加します」を押下します。

f:id:nobtak:20200301012940p:plain

8) 「OCR を有効にし,すべてのテキストを merged_content フィールドにマージする 」にチェック後、画像認識をさせるため,「画像の認知技術」および 関連項目にすべてチェック後,「次: 対象インデックスをカスタマイズします」を押下します。

 

f:id:nobtak:20200301013823p:plain

 

9) 「metadata_storage_path」の検索可能にチェックし,アナライザー「日本語 - Microsoft」に変更後,「次: インデクサーの作成」を押下します。

f:id:nobtak:20200301014315p:plain

 アナライザーの詳細については、言語アナライザーを文字列フィールドに追加する - Azure Cognitive Search | Microsoft Docs を参照

 

10) インデクサーのスケジュールを設定後,「送信」を押下します。

f:id:nobtak:20200301014712p:plain

今回は、「削除の追跡」をチェックし、「列を論理的に削除」: 「metadata_storage_size」、「マーカー値の削除」: 「0」を選択し、 metadata_storage_sizeが0になった後、インデックスから自動的に削除するという設定を入れています。

 

11) Search サービス - 「スキルセット」- 「作成したスキルセット」を選択します。

f:id:nobtak:20200302010845p:plain

 

12) 「スキルセットの定義(JSON)」を選択後,"defaultLanguageCode": "en" を "ja"に変更し,「保存」を押下します。

f:id:nobtak:20200302011026p:plain

"defaultLanguageCode": "en" を "ja" に変更することで、インデックスの内容が英語から日本語に変更することができます。インデクサーで「リセット」後、「実行」を実施することで、インデックスが再作成され、日本語でインデックスが再構築されます。

 

f:id:nobtak:20200302011703p:plain

 

13) Searchサービス - 「検索エクスプローラー」を選択します。

f:id:nobtak:20200302011944p:plain

 

14) 「検索」を押下します。

f:id:nobtak:20200302013036p:plain

 

「クエリ文字列」に条件を入力しなかった場合、「https://acsje001.search.windows.net/indexes/azureblob-index/docs?api-version=2019-05-06&search=*」と全件検索が行われます。

 

検索結果から "ImageTags"、"ImageCaption"を確認すると、画像ファイルから認識されたデータが日本語で追加されているため、検索条件に 「花」と指定すると、今回の場合、「Flower1.jpg」、「Flower2.jpg」 を検索することが可能になります。

※ "defaultLanguageCode": "en"の場合、"ImageTags" には 「plant」が追加されるのですが、日本語に訳されるタイミングで「工場」に訳されてしまうもようです。本来は「植物」と訳されて欲しいところではありますが、この動作は制約としてとらえる必要があるかもしれません。

 

f:id:nobtak:20200302013344p:plain

 

f:id:nobtak:20200302014032p:plain

 

 Azure Congitive Searchを使用するメリットは、全文検索機能、画像認識などの仕組みを、数分程度で使用可能となる点でしょうか。アプリケーションでは、Azure Congitive Searchで公開されている REST API を使用することで簡単に検索結果を取得可能となります。

考慮点としては、大量のファイルをインデクサーでクロールしたり、検索対象とする場合、要件を満たす価格レベル(SKU)を選択する必要がある点でしょうか。