Flickr APIで画像を取得するとき、指定ライセンスの画像を取得したい

機械学習

結論

Flickr APIで画像を取得した際に、ライセンス情報も含まれている。画像を取得する際にライセンスを指定する。

経緯

機械学習でモデルを作成する際、Flickrから訓練データを取得しました。取得した画像にはライセンスが設定されています。モデルを作成するとき、何のライセンスであれば問題ないのか。下記3つについて調査しました。

  1. 画像を取得するときに指定のライセンスを取得する方法
  2. Flickrの画像に設定されているライセンスの種類
  3. 日本国内おける機械学習モデルを作成する際の著作権について

画像を取得するときに指定のライセンスを取得する方法

flickrのインスタンスを作成する際に、extrasでlicenseを追加することで取得する画像のライセンス情報を追加することができます。

コード

flickr = FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
    text = keyword,
    per_page = 100,
    media = 'photos',
    sort = 'relevance',
    safe_search = 1,
    extras = 'url_q, license'

取得した情報を表示する場合は、pprintを使用するときれいに整形されて表示されます。

コード

from flickrapi import FlickrAPI
from urllib.request import urlretrieve
from pprint import pprint
import os
import time

# APIキーの情報
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
secret = 'xxxxxxxxxxxxxxxxx'

wait_time = 1

# 取得した画像の保存先を設定する
keyword = 'sample'
savedir = './' + keyword

# 保存先フォルダが無ければ作成する
if not os.path.isdir(savedir):
    os.makedirs(savedir)

flickr = FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
    text = keyword,
    per_page = 200,
    media = 'photos',
    sort = 'relevance',
    safe_search = 1,
    extras = 'url_q, license'
)

photos = result['photos']
pprint(photos)

実行結果(一部のみ)

{'farm': 8,
 'height_q': 150,
 'id': '1234567890',
 'isfamily': 0,
 'isfriend': 0,
 'ispublic': 1,
 'license': '0',
 'owner': 'XXXXXXXX@XXX',
 'secret': 'XXXXXXXXXX',
 'server': '1234',
 'title': 'sample',
 'url_q': 'https://live.staticflickr.com/1234/1234567890_XXXXXXXXXX_q.jpg',
 'width_q': 150}

画像のライセンス情報は、licenseの項目に記載されている。
指定したライセンスのみを取得する方法として下記のコードを作成しました。
ライセンス情報が4以上の画像のみを取得します。

コード

from flickrapi import FlickrAPI
from urllib.request import urlretrieve
from pprint import pprint
import os
import time

# APIキーの情報
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
secret = 'xxxxxxxxxxxxxxxxx'

wait_time = 1

# 取得した画像の保存先を設定する
keyword = 'sample'
savedir = './' + keyword

# 保存先フォルダが無ければ作成する
if not os.path.isdir(savedir):
    os.makedirs(savedir)

flickr = FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
    text = keyword,
    per_page = 200,
    media = 'photos',
    sort = 'relevance',
    safe_search = 1,
    extras = 'url_q, license'
)

photos = result['photos']
pprint(photos)

for p in photos['photo']:
    # 画像のライセンスを選択する
    if int(p['license']) >= 4:
        url_q = p['url_q']
        filepath = savedir + '/' + p['id'] + '.jpg'

        # 取得済みであれば取得処理を飛ばす
        if os.path.exists(filepath): continue

        # 画像を取得する
        print(url_q)
        urlretrieve(url_q, filepath)
        time.sleep(wait_time)

Flickrの画像に設定されているライセンスの種類

Flickrで設定されているライセンス情報は下記URLに記載があります。

Flickr Services: Flickr API: flickr.photos.licenses.getInfo

Flickr: Creative Commons

ラインセンス情報の一覧

<licenses>
  <license id="0" name="All Rights Reserved" url="" />
  <license id="1" name="Attribution-NonCommercial-ShareAlike License" url="https://creativecommons.org/licenses/by-nc-sa/2.0/" />
  <license id="2" name="Attribution-NonCommercial License" url="https://creativecommons.org/licenses/by-nc/2.0/" />
  <license id="3" name="Attribution-NonCommercial-NoDerivs License" url="https://creativecommons.org/licenses/by-nc-nd/2.0/" />
  <license id="4" name="Attribution License" url="https://creativecommons.org/licenses/by/2.0/" />
  <license id="5" name="Attribution-ShareAlike License" url="https://creativecommons.org/licenses/by-sa/2.0/" />
  <license id="6" name="Attribution-NoDerivs License" url="https://creativecommons.org/licenses/by-nd/2.0/" />
  <license id="7" name="No known copyright restrictions" url="https://www.flickr.com/commons/usage/" />
  <license id="8" name="United States Government Work" url="http://www.usa.gov/copyright.shtml" />
  <license id="9" name="Public Domain Dedication (CC0)" url="https://creativecommons.org/publicdomain/zero/1.0/" />
  <license id="10" name="Public Domain Mark" url="https://creativecommons.org/publicdomain/mark/1.0/" />
</licenses>

license idが1,2,3には、NonCommercialの記載があるので、商用利用はできません。
ShareAlikeが含まれている場合は、画像を改変した際、その画像には元画像のライセンスが継承されます。
NoDerivsが含まれている場合は、画像の改変を禁止しています。
license idが9,10は、著作権がありませんので、著作権表示は不要です。

ライセンス情報について整理してみました。
こちらは参考となります。詳細については、クリエイティブ・コモンズ・ライセンス – WikipediaFlickr: Creative Commonsを参照してください。

日本国内おける機械学習モデルを作成する際の著作権について

調べてみると「著作権法47条の7」の話題を見つけました。

進化する機械学習パラダイス ~改正著作権法が日本のAI開発をさらに加速する~ | STORIA法律事務所 (storialaw.jp)

著作権法47条の7
著作物が自由に使える場合 | 文化庁 (bunka.go.jp)

コンピュータ等を用いて情報解析(※)を行うことを目的とする場合には,必要と認められる限度において記録媒体に著作物を複製・翻案することができる。

ただし,情報解析用に広く提供されているデータベースの著作物については,この制限規定は適用されない。※情報解析とは,大量の情報から言語,音,映像等を抽出し,比較,分類等の統計的な解析を行うことをいう。

機械学習でモデルを作成するときに使用するデータに対しても適用され、営利と非営利の両方に適用されるようです。日本国内で、機械学習によるモデルを作成する時に著作権を含む学習データを使用する際、同一事業者が学習データの作成からモデルの作成までを実施する場合は、「著作権法47条の7」が適用されるようです。

コメント

タイトルとURLをコピーしました