スポンサードリンク



こんにちは。sinyです。

この記事では、Flickerという画像検索WEBサイトからPythonを使って画像データを自動収集する方法をご紹介します。

Flickerとは?

Flickerとは個人の写真や画像を共有できるサイトです。

日本語で検索してもちゃんと検索結果が表示されるので機械学習、ディープラーニングの画像素材としても利用できると思います。

今回は、Frickrサイトに対応したAPI「flickrapi」を使って指定したキーワードの画像を自動収集するプログラム例を紹介します。

 

まずはAPIキーとSecretキーを取得しよう

flickrapiを利用するには、以下のステップが必要です。

  • Yahoo.comのIDを取得(yahoo.co.jpのユーザは不可で.comのユーザが必要
  • APIキーとSecretキーの取得

以下の手順に従ってAPIキーを発行しましょう。

Flickrにアクセスして、画面右上の「Sign up」ボタンを押します。

以下のようにyahoo.comのユーザ登録画面が表示されるのでユーザ登録をしましょう。

 yahoo.co.jpのユーザIDではログオンできないので注意!

ユーザ登録が完了したら改めてFlickrにアクセスして、画面したの「Developers」をクリック。

下記画面の「API」をクリック。

下記画面の「Request an API key」をクリック。

下記画面の「Request an API Key」をクリック。

Flickrへのログオン画面が表示されるので、Emailアドレスを入力してログオンしましょう。

Non-Commercial」の「APPLY FOR A NON-COMMERCIAL KEY」をクリック。

アプリの名前(任意)と、アプリの説明を適当に入力して「SUBMIT」を押しましょう。

KEYとSecretが発行されるので、テキストなどにコピペしておきましょう。

FlickerAPIでデータ取得

APIキーの取得ができたら、いよいよAPIを使って画像データを自動取得してみます。

今回は、インタラクティブに動作確認するためJupterNotebook上でプログラムを実行してみます。

まずは、必要なモジュールをインストールします。

 

jupyter notebookコマンドでNotebookを起動して新しいノートを作ったら以下のコードを記載していきましょう。

 

FlickrAPIクラスにAPIキー、Secret情報とフォーマットを指定してflickrインスタンスを作成します。
検索キーワードは「ねこ」とします。

続いて、flickr.photos.searchメソッドを使ってAPI経由で「ねこ」画像の情報を取得します。

 

flickr.photos.searchメソッドの詳細パラメータについて知りたい方は以下を参照してみてください。

 

今回は、「ねこ」の画像情報を100枚取得してみます。
上記コードを実行すると、result変数には長さ2のdict型のデータ(result['photos']とresult['stat']の2つ)が格納されます。

写真に関するデータはキーが「photos」の方に複数個格納されています。(下記参照)

{'photos': {'page': 1, 'pages': 585644, 'perpage': 2, 'total': '1171287', 'photo': [{'id': '5306800458', 'owner': '54021464@N03', 'secret': '3c6d555650', 'server': '5130', 'farm': 6, 'title': 'Motorbike', 'ispublic': 1, 'isfriend': 0, 'isfamily': 0, 'license': '4', 'url_q': 'https://live.staticflickr.com/5130/5306800458_3c6d555650_q.jpg', 'height_q': '150', 'width_q': '150'}, {'id': '3434982322', 'owner': '58616528@N00', 'secret': '37a55ac118', 'server': '3584', 'farm': 4, 'title': 'Motorbike', 'ispublic': 1, 'isfriend': 0, 'isfamily': 0, 'license': '0', 'url_q': 'https://live.staticflickr.com/3584/3434982322_37a55ac118_q.jpg', 'height_q': '150', 'width_q': '150'}]}, 'stat': 'ok'}

では実際にAPI経由でねこの写真データをダウンロードしてみます。

 

photos['photo']に写真情報が格納されているので、enumerateでループ処理を回して画像のURL情報photo['url_q']を取得した後、urlretrieveメソッドを使って指定したURLの画像をローカルPC上にダウンロードします。

こんな感じでファイルがダウンロード出来ればOKです。

以上、Flickerを利用した画像データの自動収集方法でした。

とっても簡単に大量画像を自動収集できるので、ぜひ試してみてください。

 

おすすめの記事