カメラ好きが多い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の文章を生成してくれる機能とはどういうことなのか、さっそく同じ画像を解析させて解析結果をみてみましょう。
すると、こんな文章を生成してくれました。
純粋にすごくないですか?
※ちなみに残念ながら現在日本語対応はされていません。
Computer Vision APIを使ってちょっとしたプログラムをかけば、画像ファイルをAIで解析して自動でタイトル付けできるのでは……? 結構うまくいきそうです。
プログラムを書く前に、まずはどれくらいの精度なのか、いくつかの画像を使ってさらに分析していきます。
精度はこのようなカンジ。いろんな写真で試しみた。
では、Computer Vision APIの詳しい精度をいくつかの画像で分析してみます。
まずは風景のなかに鳥が立っているこちらの画像から。
解析結果がこちらです。
「水辺に草が生えている横に鳥が立っている」と、画像に写っているものをしっかりとすべて認識してくれています! すごい。
それでは、こんな画像はどうでしょう。
解析結果がこちらです。
AIはこの画像を、「商品がお店に並んでいる」というような解釈で認識しているよう。
英語圏をベースにされているようなので、「提灯」ではなく、「商品」というまったく異なるものとして解釈されています。
このような文化的な画像、抽象的な画像では似たような解析の傾向がみられました。
次はこちらの人が写っている写真で画像です。
解析結果がこちらです。
人物に加えて、身につけている衣服までばっちり認識してくれています。Computer Vision API素晴らしいですね。
それではお待ちかね、”画像ファイルをAIで解析して自動でタイトル付けする”検証をしていきます。
早速システムを作る。面倒な写真管理がかなり楽に
流れとしてはこんな感じ。
- 手動ではなく写真を解析するプログラムを書いて自動化
- 大量の写真をプログラムに通して、一瞬でタイトル付け
結果からお伝えすると、下記がプログラムを通して、自動で生成されたファイル名の一例と、Computer Vision APIに画像を送って解析結果を取得するPythonコードです。
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は、こちらから簡単に試せるので、興味がある方はぜひ試してみてください。