Microsoftの画像認識AI「Computer Vision API」でファイル名付けを自動化

このエントリーをはてなブックマークに追加

カメラ好きが多いLedge.ai編集部。日ごろから多くの写真をとるのですが、後から「あの写真どこだっけ……?」となってしまうことも多々あります。

写真ってキーワードで検索するということができないから、不便ですよね。カメラの写真ファイルはデフォルトだと「IMG_3021.JPG」など、人間からしたら意味のないもの。

せめて、ヒントとなるキーワードだけでもファイル名に付いていたら……

この問題、画像認識のAIで解決するかもしれません。今回は、写真から自動的にいい感じのファイル名を付けられるか、MicrosoftのComputer Vision APIを使ってチャレンジしてみます。

なかなかにすごい結果になりました。

Computer Vision APIとは

さまざまな画像認識AIがあるなか、今回選んだのはMicrosoftの「Computer Vision API」。

じつはComputer Vision APIは単に画像に対して、単語や確率などを出してくれるだけではなく、“画像から文章を生成してくれる”機能があります。

たとえばよくある画像認識AIにこちらの画像を解析させると、

以下のように、認識した物体は“flower”という単語と、それが“flower”である確率などの結果をだします。
※ こちらの解析結果は例です。

{
      "label":"flower",
      "probability":0.9868225
    },
    {
      "label":"leaves",
      "probability":0.7572981
}

ではComputer Vision APIの文章を生成してくれる機能とはどういうことなのか、さっそく同じ画像を解析させて解析結果をみてみましょう。

すると、こんな文章を生成してくれました。

a red flower with green leaves

純粋にすごくないですか?
※ちなみに残念ながら現在日本語対応はされていません。

Computer Vision APIを使ってちょっとしたプログラムをかけば、画像ファイルをAIで解析して自動でタイトル付けできるのでは……? 結構うまくいきそうです。

プログラムを書く前に、まずはどれくらいの精度なのか、いくつかの画像を使ってさらに分析していきます。

精度はこのようなカンジ。いろんな写真で試しみた。

では、Computer Vision APIの詳しい精度をいくつかの画像で分析してみます。

まずは風景のなかに鳥が立っているこちらの画像から。

解析結果がこちらです。

a bird that is standing in the grass next to a body of water

「水辺に草が生えている横に鳥が立っている」と、画像に写っているものをしっかりとすべて認識してくれています! すごい。

それでは、こんな画像はどうでしょう。

解析結果がこちらです。

a display in a store

AIはこの画像を、「商品がお店に並んでいる」というような解釈で認識しているよう。

英語圏をベースにされているようなので、「提灯」ではなく、「商品」というまったく異なるものとして解釈されています。

このような文化的な画像、抽象的な画像では似たような解析の傾向がみられました。

次はこちらの人が写っている写真で画像です。

解析結果がこちらです。

a man wearing a suit and tie

人物に加えて、身につけている衣服までばっちり認識してくれています。Computer Vision API素晴らしいですね。

それではお待ちかね、”画像ファイルをAIで解析して自動でタイトル付けする”検証をしていきます。

早速システムを作る。面倒な写真管理がかなり楽に

流れとしてはこんな感じ。

  • 手動ではなく写真を解析するプログラムを書いて自動化
  • 大量の写真をプログラムに通して、一瞬でタイトル付け

結果からお伝えすると、下記がプログラムを通して、自動で生成されたファイル名の一例と、Computer Vision APIに画像を送って解析結果を取得するPythonコードです。

a bird sitting on a rock next to water
a body of water
a cat sitting on a tiled floor
a clock tower lit up at night
a fish swimming under water
a red flower with green leaves
a close up of a lush green field
a large long train on a steel track
a dirt path next to a tree
a large empty room
import requests, base64
import json
import glob
import os
import time

# 画像ファイルを配列に格納
image_file = glob.glob('./img/*')
len(image_file)

vision_file_name = []
start = time.time()

# Computer Vision APIにリクエストして結果を取得
for i in range(len(image_file)):
    json_data = ms_computer_vision_api(image_file[i]) 
    json_data = json.loads(json_data)
    # 生成された文章を取得
    file_name = json_data['description']['captions'][0]['text'] 
    vision_file_name.append(file_name)
elapsed_time = time.time() - start

# 経過時間を出力
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]") 

# 文章の空白をファイル名用にアンダーバーに修正
for i in range(len(vision_file_name)):
    vision_file_name[i] = vision_file_name[i].replace(' ', '_') 
    
# ファイル名を変更
def file_rename(list_1, list_2): 
    for i in range(len(list_1)):
        os.rename(list_1[i], './img/' + list_2[i] + '.jpg')

※ms_computer_vision_api()関数に関しては、Computer Vision APIリクエストサンプルコードを参考にしました。

こちらのURLからぜひ画像とファイル名を照らし合わせて、AIの実力を確認してみてください。実写真をみるとびっくりすると思います。

>>実際の画像とファイル名を見るにはコチラ

手作業で画像をみて、タイトル付け作業をやってみると、30分ぐらいはかかると思うのですが、今回のプログラムではたったの「6分」でタイトル付けが終わりました。

これはまさに、人間がやらなくてもいい仕事をAIが取って代わった瞬間。日々の業務のなかでAIが普通に使われる時代がますます近づいているのを実感します。

ほかにもこんな使い道が。身近なこと〜アクセシビリティまで

今回は画像の解析結果からファイル名をAIが付ける、という作業でMicrosoftのComputer Vision APIを活用しましたが、使い道はいくらでもありますよね。

ちょっと考えてみるだけでも

  • 生成された文章で状況がわかるので、監視カメラに
  • HTMLのalt属性を自動で入れて、目が見えない人へのアクセシビリティ対策
  • 身近なところでいえば、SNSに投稿する写真の「無題」を無くす

というように、今までは人間が時間をかけておこなっていた作業を、システムで代替できることはたくさんあると思います。

MicrosoftのComputer Vision APIは、こちらから簡単に試せるので、興味がある方はぜひ試してみてください。

>> Computer Vison