Flickr APIを使って画像ファイルをダウンロードする

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
         

はじめに

機械学習用に画像データが欲しかったので、画像共有サービスのFlickr APIを使って取得するスクリプトを作成しました。

Flickr API

動作環境

  • macOS High Sierra Version 10.13
  • python 3.6.3
  • flickrapi 2.3
  • retry 0.9.2

API Keyを取得する

まずは開発者サイトのCreate an appからアプリを登録します。

Request an API KeyからAPI Keyを取得していきます。

その際Yahoo.comのアカウントを求められるので、持っていない場合は新しく作成してログインします。
Yahoo JAPANのアカウントではログイン出来ないので注意して下さい。

ログインすると、作成するアプリが商用かどうか聞かれるので、非商用を選択します。
今回は学習用の画像を取得するだけなので非商用で問題ありません。

アプリ情報を入力します。
利用規約などにチェックを入れてSUBMITしましょう。

API KeyとSecret Keyが取得できます。

Python用のライブラリをインストール

Flickr APIを扱うPython用のライブラリはいくつかありましたが、使いやすそうな以下のライブラリを使うことにしました。

sybrenstuvel/flickrapi

pipでインストールします。

$ pip install flickrapi

APIの使い方に関しては公式リファレンスを参照して下さい。

Flickr APIで画像を取得するスクリプト

キーワードを指定して、ヒットした画像を300枚ローカルフォルダに格納するスクリプトです。

import os

import time
import traceback

import flickrapi
from urllib.request import urlretrieve

import sys
from retry import retry

flickr_api_key = "XXXXXXXXXXXXXXXXXXX"
secret_key = "XXXXXXXXXXXXXXXXXXX"

keyword = sys.argv[1]


@retry()
def get_photos(url, filepath):
    urlretrieve(url, filepath)
    time.sleep(1)


if __name__ == '__main__':

    flicker = flickrapi.FlickrAPI(flickr_api_key, secret_key, format='parsed-json')
    response = flicker.photos.search(
        text=keyword,
        per_page=300,
        media='photos',
        sort='relevance',
        safe_search=1,
        extras='url_q,license'
    )
    photos = response['photos']

    try:
        if not os.path.exists('./image-data/' + keyword):
            os.mkdir('./image-data/' + keyword)

        for photo in photos['photo']:
            url_q = photo['url_q']
            filepath = './image-data/' + keyword + '/' + photo['id'] + '.jpg'
            get_photos(url_q, filepath)

    except Exception as e:
        traceback.print_exc()

コマンドラインからキーワードを指定して実行します。

ポイントはflicker.photos.searchのオプションを指定していることです。

  • text
    検索キーワード。
  • per_page
    取得するデータ数。
  • media
    写真を指定します。
  • sort
    relevanceで関連順に取得します。
  • safe_search
    不適切な可能性のあるコンテンツを除外することができます。1が最も安全です。
  • extras
    取得するデータの種類を指定します。url_qは150×150の画像ファイルURLを、licenseはライセンスの種類を指定しています。

さらに実際に実行してみるとたまに接続に失敗するので、失敗時にリトライするライブラリを使いました。

invl/retry
retryリファレンス

Flickrから画像ファイルをダウンロードするスクリプトが出来ました。

機械学習する時の学習データ集めなどに使えると思います。

スポンサーリンク

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。