画像AIが正確に結果を出すためには、多くの画像を学習しなければなりません。
検出したい物が専門的であれば、自分でたくさんの写真を撮影することになりますが、一般的な物でよければ、画像共有サイトが利用できます。
しかもダウンロードするための仕組み(API)も用意されているので簡単に収集することができます。
この記事では、画像共有サイトから自分の欲しい画像を簡単に収集する方法をお教えします。
画像共有サイト
ここで紹介するサイトは「Flickr」といいます。特徴は以下です。
- 世界のユーザが画像をアップし共有しているサイト
- このため画像の種類が非常に多い
- 画像に分類名が付与されているため、利用者としては画像の種類を指定して収集が可能
- ダウンロードするための仕組み(API)があり、プログラムがあれば対象を選んで収集できる
画像にラベルが付いていることから、主に画像分類AIの学習に使われます。
画像収集手順
PC環境
1.下記の記事でパソコンの環境を準備してください。Pythonが使えるようにしましょう。
通信用キーを作る
Flickrサイトと自分のPCが通信するための認証キーを発行します。
2.下記のサイトにアクセスします。
Flickr : https://www.flickr.com/groups/japanese/
3.ページ下の「Developpers」を選択します。
4.次のページで「API」を選択します。
5.次のページで「Request an API key」を選択します。
6.次のページで「Request an API key」を選択します。
7.ログインするよう促されます。アカウントのない人は「Sign up here」から登録してください。
8.「APPLY FOR A NON-COMMERTIAL KEY」を選択します。
9.次のリクエスト画面では、概要で構わないので自分のアプリ名と目的を書きます。同意事項にチェックを入れ、「SUBMIT」を実行します。
10.するとキーが発行されるので2つともコピペしておいてください。
ダウンロードプログラムを作る
11.メモ帳などのエディターを開き、下のプログラムをコピペして保存してください。KEY,SECRETには上で発行したキーを入れ、ファイル名は「download-flickr.py」としてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from flickrapi import FlickrAPI from urllib.request import urlretrieve import os, time, sys KEY = '........' SECRET = '........' WAIT_TIME = 1 keyword = sys.argv[1] outdir = './' + keyword if not os.path.exists(outdir): os.makedirs(outdir) flickr = FlickrAPI(KEY, SECRET, format='parsed-json') result = flickr.photos.search( text = keyword, per_page = 200, media = 'photos', sort = 'relevance', save_search = 1, extras = 'url_q, license' ) photos = result['photos'] for i,photo in enumerate(photos['photo']): url_q = photo['url_q'] filepath = outdir + '/' + photo['id'] + '.jpg' if os.path.exists(filepath): continue urlretrieve(url_q, filepath) time.sleep(WAIT_TIME) |
プログラムの実行
12.何の画像を収集するか決め、下のとおり実行してください。例として車(car)の画像を収集します。
- コマンド入力ウィンドウを開きます。
Windowsの場合:スタートボタンを押す → メニューが出たらそのまま「cmd」と打ち「Enter」。
Macintoshの場合:「ターミナル」を実行する。
- ファイルを保存した場所に移動します。デスクトップであれば
Win,Macどちらも「cd desktop」と打ち「Enter」です。
- プログラムを実行します。引数に収集する物体名(car)を入れます。
「python download-flickr.py car」と打ち「Enter」。
- 画像が1秒に1枚づつダウンロードされていきます。Flickrにある全ての画像がダウンロードされるまで5分前後かかります。
- ダウンロードしたい全ての種類について3.を繰り返します。
画像分類AIの学習に用いる際は、フォルダ名がラベルになっていることを利用します。全てのフォルダに対してフォルダ名を分類名=正解値として記憶しつつ配下の画像を全て読み込む、という処理を行います。これによって画像とラベルを紐づけながら学習します。
Flickrを利用した画像収集の方法は以上です。
以前は大量の画像を自分で撮影しラベリングする必要がありましたが、便利なサイトが増えてきました。活用しながら自身もアップロードして協力していきたいものです。