LoginSignup
1
4

【Flickr】Pythonで画像収集してみた【API】

Posted at

目次

0.結論
1.はじめに
2.FlickrAPI取得
3.スクリプトの説明
4.おわりに

0. 結論

Python(FlickrAPI)を用い、目的の検索語句にて自動画像取集が可能。
FlickrAPI取得し、本内容をコピペすることで誰でも活用可能。

▼作成したスクリプト
Get_Image_At_Flickr_For_Qiita.ipyb

1. はじめに

機械学習を進める中で一つの大きなフェーズとして、学習に用いるデータ取集があります。

AIコンペティション参加するのであれば、用意されているデータセットを使うことで、データ取集を省略できます。

しかし、自ら課題設定を行い、AI開発を進めていく場合はデータ収集を自分で行う必要があります。

今回は画像分類AI作成の前段階の画像取集について記載させていただきます。

スクリプトは大きく分けて2つのパート「FlickrAPI取得」「スクリプトの説明」に分けられますので、それぞれを紹介していきます。

なお開発環境ですがGoogle Colaboratoryを利用しています。

では、以下から作成したスクリプトについて紹介していきます。

2. FlickrAPI取得

ここではプログラム作成前処理として、今回画像取得を行うサイトのFlickrでのAPIを取得することについて記載していきたいと思います。

まずAPIとは自動車でいう車輪と思っていただいたらと思います。

何度も使うようなプログラム(自動車で言う車輪)に対して、毎回作成するのは効率が悪いため、汎用的に使用できるプログラム(API)が作成されており、無償、有償等のさまざまな提供スタイルで、企業から公開されています。

今回は画像取集を行うサイトとして、以下の写真の共有を目的として立ち上げられているFlickrを使用します。

Flickr: Find your inspiration.

以下のページからFlickrのAPIKeyを取得してください。

Flickr App Garden

APIKey取得の際には以下の画像を参考にしてください。

Flickr.png

Flicker2.png

上記の操作でAPIKey取得できたと思いますので、スクリプト内容に移っていきます。

3. スクリプトの説明

ここでは、作成したスクリプトのメインの部分となるFlickrAPIを利用した画像収集について紹介していきたいと思います。

まずはFlickrAPIライブラリのインストールです。

# FlickrAPIのインストール
!pip install flickrapi

次には周辺環境ライブラリのインストールです。

#周辺環境のimport
from flickrapi import FlickrAPI
from urllib.request import urlretrieve
from pprint import pprint
import os, time , sys
from tqdm.contrib import tenumerate
wait_time = 1

以下に前の章で取得したAPIKeyの情報を記載します。

APIKeyは登録した個人所有のものとなりますので、自分で取得したものを使用しましょう。

#FlickrAPIの情報
key = 'XXXXXX'
secret = 'XXXXXX'
flickr = FlickrAPI(key, secret, format = 'parsed-json')

以下では取得する画像の検索語句および取得枚数を記載します。

検索語句はリストに格納することで、一度の処理で複数の検索語句に対応しています。

また、pathは適切なものを設定してください。

#取得する画像の名前、保存する枚数、保存するフォルダ
names = ['banana', 'apple', 'strawberry']
get_img_num = 100
path = ''

以下の内容はAPIを利用して画像のURLを取得しています。

#取得する画像の情報を取得
def get_images_info_flickr(names, results):
  for name in names:
    result = flickr.photos.search(
        text = name,
        per_page = get_img_num,
        media = 'photos',
        sort = 'relevance',
        safe_search = 1,
        extras = 'url_q, licence'
    )
    results.append(result['photos'])
  return results

以下の内容は取得したURLを用いて画像を保存している処理です。

#画像の保存
def save_img_flickr(path, names, results):
  for name, result in zip(names, results):
    print(f'{name}の保存')
    for i, photo in tenumerate(result['photo']):
      url_q = photo['url_q']
      img_path = path + name + '_' + str(i) + '.jpg'
      urlretrieve(url_q, img_path)
      time.sleep(wait_time)

以下にて、上記の作成した2つの関数を用いた画像処理処理を記載しています。

#実行関数
def main():
  results = []
  results = get_images_info_flickr(names, results)
  save_img_flickr(path, names, results)

以下にて実際に画像取集処理を実行しています。

#実行するぞ
main()

上記を実行するとColab上のフォルダに以下のように画像が保存されます。

スクリーンショット 2024-04-13 15.43.30.png

4. おわりに

初めてAPIによる画像取集を開発してみましたが、自分の思った通りの動作ができてよかったです。

ぜひ、本スクリプトを活用し、良い画像取集生活を!

長い文章を最後までお読みいただき、ありがとうございました!!

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4