画像検索をノーコーディングでつくるよ!Azure Cognitive Search入門とコグニティブ(AI)スキル拡張
概要
「画像検索をつくりたい!」
というわけで、AzureにあるCognitive Searchというサービスを触ってみました。
そして私が全文検索初心者なので、ツッコミどころも多いかと思います。ご容赦。
Azure Cognitive Searchとは
いわゆる「全文検索サーバ」にあたります。
ElasticsearchやApache Solrと同じ立ち位置(という理解)です。
ドキュメントを読んでいると、Luceneがベースのようです。
[参考]
下記記事では全文検索ライブラリ、サーバの種類や関係性が整理されています。
https://toranoana-lab.hatenablog.com/entry/2019/02/06/103709
Cognitive Searchにはこんなダッシュボードがついてきますよ。素敵。
全文検索とは
文書の内容の中から、指定した文字列を検索すること(という理解)です。
「検索」×「AI」─ Cognitive Searchの特徴
注目すべき特徴は、Azure Cognitive Servicesとの連携ができることです。
Blob Storageに配置した、画像やテキスト(PDF等も含)データを、AIによって解析し検索可能にしてくれます。
Cognitive Searchのなかでは、この機能を「コグニティブスキル」と呼んでいます。
Cognitive Servicesとは
Microsoftが用意した学習済みのつよつよAIを使って、画像認識やテキスト解析を行えるサービスです。
https://azure.microsoft.com/ja-jp/services/cognitive-services/
いざCognitive Search入門
今回の記事では
- Cognitive Searchの作成
- コグニティブスキルの追加
- 検索
までをやってみます。
Cognitive Searchには無料プランがあります。
1サブスクリプションに、1個の無料プランが作成可能です。今回はお試しなので、無料プランでいきましょう。
無料プランでも、コグニティブスキルは試せます。
無料プランでは、「インデックス」「データソース」「インデクサー」がそれぞれ3つずつ作成できます。
なんか聞いたことない概念出てきました。
それぞれ(私の理解で)解説しますね。
「インデックス」
検索用に作れられる索引です。(まんまですが)
索引があることで検索が圧倒的に早くなります。
本も目次があるからこそ、たどりつきたい内容に素早くたどり着くことができますよね。
「データソース」
索引のもとになる元データ置き場のことです。
これにはBlob StorageやAzure SQL Databaseなどが指定できます。
本でいうと、本編・コンテンツが書かれたページたちですね。
「インデクサー」
索引を作る機能です。
本で例えると、作者がコンテンツを書き終えた後に、ページ番号を数えて「この章は12ページから、この章は46ページから...」とまとめていく作業のイメージです。
今回は「データソース」に、Blob Storageを。
「インデクサー」ではコグニティブスキルを使用し、画像認識した結果の「インデックス」を作成します。
この3つが揃って、AIによる画像検索が実現します。
(Blob Storageって何かって? もう!AWSでいうS3ですわよ奥さん!)
いざコグニティブスキル発動
リソース作成ができたら、コグニティブスキルを試してみましょう。
公式のチュートリアルを参考にポチポチとやっていきましょう。(雑)
https://docs.microsoft.com/ja-jp/azure/search/cognitive-search-quickstart-blob
私は画像認識だけ使いたかったので、下記のようにチェックを入れました。
インデクサーには、インデックス頻度を指定できます。
スケジューリングしておけば、あとはBlobに画像を上げてくだけでよさそうです。すごい。
Blob Storageについてチョト補足
全体の流れは公式チュートリアルにおまかせするとして、チュートリアルに書いてないことを補足してゆきますね
事前にストレージアカウントとコンテナーを作成しておく必要があります。
チョトわかりづらいので、はじめての方にもわかりやすいよう補足します。
手順ですが、ストレージアカウントをつくってから、コンテナーをつくります。
ややこしいのですが、「コンテナー」というのが、今回つかう「Blob Storage」のことです。
階層としては下記のようになっています
- ストレージアカウント
- コンテナー(Blob Storage)
コンテナーをつくったらお目当てのファイルがアップロードできます。わーい。
ストレージアカウントの下には、BlobのほかにTableストレージやQueueストレージなども作れます。
接続情報
アプリケーションから、Blob Storageに接続するには「接続文字列」を使用します。
これはストレージアカウントの単位で用意されています。
ナビゲーションから「アクセスキー」を開き、「接続文字列」を控えておきましょう。
Cognitive Searchでつくるインデクサーでも必要になります。
検索してみよう
私もまだ構文理解しきれてないんですけども、人が写っている画像を検索してみます。
「インデックス」から該当インデックスを選択すると「検索エクスプローラー」が開きます。
「クエリ文字列」に下記を入力し、検索します。
search=imageTags:("person")&$select=imageTags,metadata_storage_path
これは
-
imageTags
(画像認識結果)に、personを含むものを検索 - 結果には
imageTags
とmetadata_storage_path
のフィールドを表示して
という内容です。
metadata_storage_path
がBlob Storage上のURLになります。
[参考]
クエリ構文のドキュメントは下記
https://docs.microsoft.com/ja-jp/azure/search/query-lucene-syntax
いざ実行!
{
"@odata.context": "https://XXXXXXX.search.windows.net/indexes('azureblob-index')/$metadata#docs(*)",
"value": [
{
"@search.score": 0.0645925,
"metadata_storage_path": "XXXXXXXXXXXXXXXXXX...c0LmNsaXBfaW1hZ2UwMDJfNkZFMjdFODUucG5n0",
"imageTags": [
"person",
"man",
"wall",
"indoor",
"standing",
"human face",
"clothing"
]
},
{
"@search.score": 0.0645925,
"metadata_storage_path": "XXXXXXXXXXXXXXXXXX...b3dzLm5ldC9teWNvbnRhaW5lci9ndXRocmllLmpwZw2",
"imageTags": [
"person",
"man",
"human face",
"clothing",
"shirt",
"indoor",
"glasses"
]
},
{ ...
でたー!
確かにpersonを含むものがヒットしてますね!
あれ、なんですか。このわけわからん文字列は!
画像を検索したいのに、画像に辿りつけてないじゃないか!
"metadata_storage_path": "XXXXXXXXXXXXXXXXXX...c0LmNsaXBfaW1hZ2UwMDJfNkZFMjdFODUucG5n0",
と、私も焦ったのですが、
じつは、これはBlobにアップされたファイルのURLで、base64エンコードされているものなのです。
なので、適当な方法でデコードしてあげます。
すると下記のようにURLに戻ります。
https://XXXXXXX.blob.core.windows.net/mycontainer/5074.clip_image002_6FE27E85.png
※エンコードしている理由は、キー名に記号を含めることができないからのようです。
インデクサーの作成画面で、じつはチェックマークがついていました。
画像だ!はやく画像を見せてくれ!
こちらがヒットして出てきた画像です。
ちゃんと人が写った画像ですね。やった!
※今回つかったのは、チュートリアルにあったサンプル画像です
ノーコディーングで画像検索がつくれた! ただし結果は英語...
知識が必要だったりしたものの、なんとここまでノーコーディングでした。すごい!
ただし、結果は英語で出力されているので、そこは日本人からすると不便ですね。
検索クエリにする前に、翻訳をかませるなどの工夫が必要そうです。
(Cognitive Services自体のアップデートにも期待したいです!)
[余談]
私は日本語で検索をしたいので、日本語WordNetやアレやコレやをつかってAI画像検索をつくろうと思っています。
その話はまたいつか。
それではまたー。
Author And Source
この問題について(画像検索をノーコーディングでつくるよ!Azure Cognitive Search入門とコグニティブ(AI)スキル拡張), 我々は、より多くの情報をここで見つけました https://qiita.com/okajax/items/2d9e071dcef096343a48著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .