はじめに
画像認識プログラムを作るために、まずは訓練させるための大量の画像データが必要。
そのために、画像データを自動で収集するプログラムを作成する。
参考教材:【画像判定AIアプリ開発・パート1】TensorFlow・Python・Flaskで作る画像判定AIアプリ開発入門
Flickr
画像収集サイト
https://www.flickr.com/
API
https://www.flickr.com/services/api/
下準備
https://qiita.com/Saayaman/items/a3066697a108a7e7fc39
の「1. api登録」参照。
キーと秘密鍵(?)の取得が必要。
インストール方法
pip install flickrapi
ソースコード
検索した画像を指定のフォルダに保存する。download.py
というプログラムを作成する。
例えば、
python download.py monkey
と入力すると、monkey
で検索した画像をmonkey
というフォルダに格納する。
インポート
from flickrapi import FlickrAPI
from urllib.request import urlretrieve
from pprint import pprint
import os, time, sys
APIキーの情報
# APIキーの情報
key = "<<文字列>>"
secret = "<<文字列>>"
wait_time = 1
取得したキーと秘密鍵を格納しておく。
wait_timeは名前の通りウェイト時間。頻繁にFlickrにアクセスすると、アクセス拒否されてしまうため、画像1枚取得する度に1秒待つようにする。
画像情報取得
# 保存フォルダの指定
animalname = sys.argv[1]
savedir = "./" + animalname
flickr = FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
text = animalname,
per_page = 400,
media = 'photos',
sort = 'relative',
safe_search = 1,
extras = 'url_q, licence'
)
FlickrAPI
に、「下準備」で取得したキー、秘密鍵、フォーマットを指定(今回はjson形式)してflickr
インスタンスを作成し、flickr.photos.search
メソッドを呼び出す。
result
には以下のようなデータが入っている。
{'photos': {'page': 1,
'pages': 541,
'perpage': 400,
'photo': [{'farm': 66,
'height_q': 150,
'id': '49823614651',
'isfamily': 0,
'isfriend': 0,
'ispublic': 1,
'owner': '14136614@N03',
'secret': '888c8a381a',
'server': '65535',
'title': 'LEGO Minifigures Series 19 Rainbow Bear',
'url_q': 'https://live.staticflickr.com/65535/49823614651_888c8a381a_q.jpg',
'width_q': 150},
...
画像ダウンロード
result
に入っている情報を使って画像をダウンロードする。
画像のURLをphoto['url_q']
で取得。
ダウンロードの実行はurlretrieve
で行う。
photos = result['photos']
for i, photo in enumerate(photos['photo']):
print(i)
url_q = photo['url_q']
filepath = savedir + '/' + photo['id'] + '.jpg'
if os.path.exists(filepath): continue
urlretrieve(url_q, filepath)
time.sleep(wait_time)
確認
python download.py monkey
と実行すると、monkey
フォルダに下記のように保存されている。
ただし、サルではない画像(サルの絵だったり、サルと全く関係が無いものなど)も含まれているため、手動で取り除くことが必要。