#はじめに
画像認識プログラムを作るために、まずは訓練させるための大量の画像データが必要。
そのために、画像データを自動で収集するプログラムを作成する。
参考教材:【画像判定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登録」参照。
キーと秘密鍵(?)の取得が必要。
##インストール方法
https://stuvel.eu/flickrapi
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
フォルダに下記のように保存されている。
ただし、サルではない画像(サルの絵だったり、サルと全く関係が無いものなど)も含まれているため、手動で取り除くことが必要。